memmove和memcpy的区别

简介: 你真的懂memmove和memcpy的区别吗

memmove和memcpy一样都是C语言自带的函数,可实现内存数据的移动。

不同的是,memcpy在使用时有可能会出现内存重叠现象,导致数据移动错误,而memmove就是为了解决内存重叠而存在的。

void *memcpy(void *dst, const void *src, size_t count);  
void *memmove(void *dst, const void *src, size_t count);

两者的参数一样,都是数据拷贝的源地址,目的地址以及拷贝数据的长度。
对于内存重叠,指的是拷贝数据的源地址和目的地址存在重叠现象,如下

image.png

如果我们将数据由高地址往低地址拷贝,即使出现数据重叠(情况1),两个函数都能正确的实现拷贝功能。

但是如果我们把数据从低地址往高地址拷贝(情况2),如果出现数据重叠,那么就会出现拷贝的数据出错,如上图的情况2,则会出现原来的1 2覆盖掉源内存的4 5,导致拷贝 45 地址的时候拷贝的数据是12.

这种情况需要使用memmove函数。

memmove函数中存在地址判断,如果判断出地址会重叠,则会有相应处理,因此,在使用内存数据移动时,可根据自己拷贝的数据需要,合理选择这两个函数使用。

相关文章
|
2天前
模拟实现memcpy,memmove,memset,memcmp
memcpy void * memcpy ( void * destination, const void * source, size_t num );
10 1
|
2天前
|
编译器 C++
C++中memcpy函数的实现
C++中memcpy函数的实现
|
2天前
|
算法 编译器 C语言
memcpy内存拷贝函数
memcpy内存拷贝函数
37 0
|
2天前
|
存储 编译器 BI
内存函数​(memcpy、memmove、memset、memcmp)
内存函数​(memcpy、memmove、memset、memcmp)
|
2天前
|
存储 安全
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
56 0
内存函数(memcpy、memmove、memset、memcmp)你真的懂了吗?
|
10月前
|
编译器 C语言 C++
C进阶:内存函数memcpy, memmove, memcmp
C进阶:内存函数memcpy, memmove, memcmp
53 0
【memcpy和memmove函数的详解】
我们知道,strcpy函数是拷贝字符串的,但是它并不能拷贝例如整型,结构体之类的东西,strcpy有一定的局限性,memcpy函数可以说涵盖了所有类型数据的拷贝。
|
12月前
|
IDE 编译器 开发工具
对于memcpy和memmove的区别,以及模拟实现memcpy和memmove
对于memcpy和memmove的区别,以及模拟实现memcpy和memmove
|
12月前
|
存储 编译器 C语言
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
161 0