linux内核中memcpy和memmove函数的区别和实现
来源:互联网 发布:光猫itv端口改成网口 编辑:程序博客网 时间:2024/05/17 09:05
linux内核中memcpy和memmove函数的区别和实现
Kernel version:2.6.32
CPU architecture:ARM
Author:ce123(http://blog.csdn.net/ce123)
嵌入式开发交流群:280352802,欢迎您的加入!
- memcpy是把src指向的对象中的size个字符拷贝到dest所指向的对象中,返回指向结果对象的指针.
- memmove也是把src指向的对象中的size个字符拷贝到dest所指向的对象中,返回指向结果对象的指针,但这两个函数在处理内存区域重叠的方式不同.
内存重叠问题是指目的地址的内存空间的首地址,包含在源内存空间中,这两段内存空间有了交集,因而在使用memcpy进行内存复制操作时,这段重叠的内存空间会被破坏.这种情况在应用程序级代码中一般不会出现的,而在驱动或内核级代码中要十分小心,尽量使用memmove函数.
memcpy对内存空间有要求的,dest和src所指向的内存空间不能重叠,否则复制的数据是错误的.下面具体讲解一下这个错误是如何产生的.
如果内存空间布局入下图所示:
src所指向的内存空间后面部分数据被新拷贝的数据给覆盖了(也就是dest<=src+size).所以拷贝到最后,原来的数据肯定不是原来的数据,拷贝的数据也不是想要的数据,使用memcpy函数可以得到错误的结果.
再者,如果内存空间布局入下图所示:
虽然原来的数据不再是原来的数据(dest+size>=src),但拷贝的数据是原来的数据,使用memcpy函数可以得到正确的结果.因此,在使用memcpy这个函数之前,还需要做一个判断,如果dest<=src你才能使用这个函数不过完全没有必要,你直接使用memmove函数就可以了.memmove在拷贝之前就做了一个判断,如果dest <= src,就按照memcpy的思路拷贝,如果dest>src怎么办呢,看函数,它是从后面往前拷贝,这样就能正确拷贝数据了.根据上面的分析,理解下面的代码应该是一件很容易的事情.
- linux内核中memcpy和memmove函数的区别和实现
- linux内核中memcpy和memmove函数的区别和实现
- linux内核中memcpy和memmove函数的区别和实现
- Linux内核中memcpy和memmove函数的区别和实现
- linux内核中memcpy和memmove函数的区别和实现
- memcpy和memmove函数的区别和实现
- memcpy函数和memmove函数的模拟实现与区别
- memcpy函数和memmove函数的区别
- memmove和memcpy函数的区别及实现
- memcpy和memmove的区别与实现
- memcpy和memmove的区别与实现
- memcpy和memmove的区别与实现
- memcpy和memmove函数的实现
- memcpy和memmove函数的实现
- memcpy和memmove的函数内部实现
- memcpy memmove区别和实现
- memcpy memmove区别和实现
- memcpy memmove区别和实现
- python 继承 及调用被重写的父类方法(未被绑定的方法)
- Hive文件存储格式的测试比较
- 结构化程序设计
- app store注册美区appid下载中国区无法下载的app
- Tzl_C#金字塔_Abstract抽象类使用总结
- linux内核中memcpy和memmove函数的区别和实现
- 2008年中山市小学生信息学邀请赛第一题——机器人行走
- 关于hql中的in 和not in
- SoC Structure
- JAVA用引用实现队列
- ASP + FLASH + ACCESS教程
- POJ 2785 4 Values whose Sum is 0
- View Composer 代理初始化失败
- gentoo 无线网络配置