memcpy 和 memmove 函数
来源:互联网 发布:qq群优化软件怎么用 编辑:程序博客网 时间:2024/05/21 10:26
memcpy 和 memmove 都是C语言提供的内存拷贝函数。
memcpy的函数实现
linux 实现版本
#include <assert.h> // assert 需要的头文件void* memcpy(void * dest, void *src, size_t count){assert(src != NULL && src != NULL);char *tmp = (char *)dest;const char* s = (const char*)src;for (size_t i = 0; i < count; i++){tmp[i] = s[i];}return dest;}
<pre name="code" class="cpp">void* memcpy(void * dest, void *src, size_t count){void *ret = dest;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;}
该函数有极大缺陷,如内存重复的问题等。
memmove就是一个比较好的选择
void* memmove(void *dest, const void *src, size_t count){void* ret = dest;if (dest <= src || (char*)dest >= (char*)src + count){while (count--){*(char*) dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else{dest = (char*)dest + count - 1;src = (char*)src + count - 1;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}}return (ret);}
当src和dest区域没有重叠时,两个函数是完全一样的。木有重叠的条件是: dst <= src || (char *)dst >= ((char *)src + count 。否则,memcpy是不能正常工作的,memmove是可以正常工作的。
0 0
- memcpy 和 memmove 函数
- memmove和memcpy函数
- 实现memcpy和memmove函数
- 实现memcpy( )和memmove( )函数
- 实现memcpy和memmove函数
- memcpy函数 和 memmove函数 原码
- memcpy函数和memmove函数的区别
- memcpy和memmove函数的实现
- memcpy和memmove函数的比较
- memcpy和memmove函数的实现
- strcpy、memcpy和memmove函数源码
- memcpy和memmove函数的比较
- memcpy()和memmove()函数之间区别
- memcpy和memmove函数
- memcpy()和memmove() 函数的介绍
- memcpy和memmove的函数内部实现
- 模拟实现memcpy和memmove函数
- 内存操作函数memcpy和memmove
- Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)
- Opencv输出图像函数-imwrite
- Java AIO 认识
- 设计模式之单例模式
- JFinal - port: 80 already in use
- memcpy 和 memmove 函数
- 统计简单学_估计
- 放弃是最难的进步,进步是最大的放弃
- js的DOM(节点操作)
- memcache实例:缓存一条sql语句的执行结果
- iOS逆向工程-静态分析
- hdu 5414 CRB and String(贪心)
- artTemplate的嵌套使用
- Hibernate 一对多控制总结