Advertisement

C语言中的memcpy和memmove

阅读量:

浅谈memcpy和memmove

POSIX明确规定,在使用mem‐cpy()时如果内存区域发生重叠可能会导致未定义的行为。
当内存区域发生局部重叠时, memmove函数能够确保数据复制的正确性;而在内存不重叠的情况下两者操作结果相同.

为什么说memcpy不能保证拷贝结果的正确性,可以看看下面这个例子。

当src和dst重合(即内存重叠)且src小于dst且dst < src+count时,如下图所示:
![123

该系统通过智能算法实现快速数据处理能力

当从低地址执行拷贝操作时,在源数据被访问之前它会覆盖内存空间的内容;除此之外,在其余情况下 memcpy 拷贝操作都能正常完成。

因为memmove函数基于memcpy的设计理念,在各种情况下的处理机制确保了操作的正确性;具体来说,在内存区域存在重叠且源数据内容会被覆盖的情况下,则采用从高地址进行读取的方式;而在其他情况下则采用从低地址进行读取的方式。

下面是我自己写的一个memmove实现函数:

复制代码
    void *my_memmove(void *dst, const void *src, int count)
    {
    	if(NULL == dst || NULL == src || count <= 0)
    	{
    		return NULL;

全部评论 (0)

还没有任何评论哟~