内存重叠

memcpy的内存重叠问题

青春壹個敷衍的年華 提交于 2019-12-14 23:45:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 【注】改编自 memmove 和 memcpy的区别 。原作者如有不爽,请告知! memcpy是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dest, const void *src, size_t count) 使用memcpy时,有可能会遇到内存重叠的问题: 第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。 第二种情况下, 问题出现在右边的两个字节,这两个字节的原来的内容首先就被覆盖了,而且没有保存 。所以接下来拷贝的时候, 拷贝的是已经被覆盖的内容,显然这是有问题的 。 通过memmove可以避免这一问题。memmove和memcpy实现一样的功能:内存拷贝。原型如下: void *memmove(void *dest, const void *src, size_t count) 以下几点你需要了解: memove可以避免内存拷贝时的重叠问题。 实际上,memcpy只是memmove的一个子集。 memcpy比memmove的速度要快一些。 有兴趣的,可以看看 linux的源码 ,实现很简单,一看就明白。 /** * memcpy - Copy one area of memory to