C语言模拟实现memcpy,memmove函数
2015-11-18 22:30
344 查看
这里memcpy与memmove函数的模拟实现,需要用到空指针来传递参数,之后强制类型转换为char型,用size_t这个宏接受偏移量进行偏移,模拟实现如下:
memcpy函数:
memmve函数是为了避免memcpy函数出现的内存重叠(上篇提到过),而开发的新函数,思想就是,如果有内存重叠的情况,那我们从后向前拷贝,如果没有,就如memcpy一样,从前向后拷贝,实现代码如下:
如有不足,希望批评指正。
memcpy函数:
void* my_memcpy(void*dst,const void*src ,size_t count) { assert(dst); assert(src); void* ret = dst; while (count--) { *(char*)dst = *(char*)src; dst = (char*)dst + 1; src = (char*)src + 1; } return ret; }memmove函数:
memmve函数是为了避免memcpy函数出现的内存重叠(上篇提到过),而开发的新函数,思想就是,如果有内存重叠的情况,那我们从后向前拷贝,如果没有,就如memcpy一样,从前向后拷贝,实现代码如下:
void* my_memmove(void*dst, const void*src, size_t count) { assert(dst); assert(src); void*ret = dst; if ((char*)dst > ((char*)src + count))//判断是否内存重叠 { while (count--) { *((char*)dst + count) = *((char*)src + count); } } else { while (count--) { *(char*)dst = *(char*)src; dst = (char*)dst + 1; src = (char*)src + 1; } } return ret; }进行内存拷贝,比字符串拷贝要多传递一个拷贝偏移量的参数,因为字符串拷贝往往是遇到0就停止拷贝,而内存拷贝不存在此类问题,运用这两类函数需要思考怎样才能高效地让程序运行。
如有不足,希望批评指正。
相关文章推荐
- Google C++编程风格指南(非常有用)
- c语言:使用main函数的参数,实现一个整数计算器
- C++基础::Stream
- c++编程规范的纲要和记录
- 对C++中异常处理中的构造和析构的认识
- python之自动生成解析xml的C++类
- 【C语言】【面试题】【笔试题】使用main函数实现一个整数计算器!
- 【ubuntu操作系统】ubuntu系统下第一个C语言程序
- C语言中模拟实现strcpy,strstr,strcat函数
- 《C++ primer》英文第五版阅读笔记(十三)——表达式基本知识
- C++ Primer 学习笔记 ——语句
- C语言宏定义和宏函数
- c++ dirname() basename()
- c语言之康托展开
- C++ 学习 new
- 圈奶牛<计算几何><C++>
- C++语法疑点
- C++中const的使用
- 学习笔记4-C语言数组和字符串
- C++ 学习 (static, extern)