Linux内存分页导致memcpy慢,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 - Cop
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 - Cop