动态内存管理:模拟实现memcpy,memmove
来源:互联网 发布:手机淘宝如何重新登录 编辑:程序博客网 时间:2024/06/11 11:28
memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。
第二种情况下,问题出现在右边的两个字节,这两个字节的原来的内容首先就被覆盖了,而且没有保存。所以接下来拷贝的时候,拷贝的是已经被覆盖的内容,显然这是有问题的。
具体实现代码:
void* my_memcpy(void* dest, const void* src, int size){assert(NULL != dest&&NULL != src);void* ret = dest;while (size--){*(char*)dest = *(char*)src;((char*)dest)++;((char*)src)++;}return (char*)ret;}//memmovevoid* my_memmove(void* dest, void* src, int size){assert(NULL != dest&&NULL != src);char*ret = (char*)dest;if (dest > src && (char*)dest < (char*)src){while (size--){*((char*)dest + size) = *((char*)src + size);}}else{while (size--){*(char*)dest = *(char*)src ;((char*)dest)++;((char*)src)++;}}return ret;}
0 0
- 动态内存管理:模拟实现memcpy,memmove
- 模拟实现内存操作函数memcpy、memmove
- c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
- 模拟实现memcpy/memmove/memset
- 模拟实现memcpy memmove 函数
- 模拟实现memcpy,memmove,memset
- 模拟实现strstr,memcpy,memmove
- 模拟实现memcpy,memmove,memset
- 模拟实现 memcpy memmove 函数
- C语言模拟实现memcpy,memmove函数
- 模拟实现memcpy和memmove函数
- 【c语言】模拟实现memcpy()、memmove()函数
- memcpy和memmove的模拟实现
- 模拟实现memset,memcpy,memmove函数
- C语言模拟实现memcpy、memmove、memset
- memcpy和memmove的模拟实现
- 模拟实现memcpy和memmove函数
- C语言模拟实现memcpy和memmove
- 人见人爱A^B
- 5、HotSpot的算法实现
- 标签中onclick绑定函数却is not defined的原因
- 斗地主-比较牌大小算法
- 自定义dialog
- 动态内存管理:模拟实现memcpy,memmove
- 杨辉三角
- CodeForces 5891 Lottery
- 在freecodecamp练习的算法题心得记录
- HDOJ 1914 The Stable Marriage Problem
- Android自定义View【实战教程】5⃣️---Canvas详解及代码绘制安卓机器人
- yande.re Y站API翻译
- 备忘录模式
- Box of Bricks