Linux 库函数源码分析(1) --- memmove
来源:互联网 发布:ubuntu 16.04 主题包 编辑:程序博客网 时间:2024/06/05 17:24
void *memmove(void *dest, const void *src, size_t count){char *tmp;const char *s;if (dest <= src) {tmp = dest;s = src;while (count--)*tmp++ = *s++;} else {tmp = dest;tmp += count;s = src;s += count;while (count--)*--tmp = *--s;}return dest;}
这个是从linux内核里面提取的源码,我们可以看到memmove 考虑到内存重叠的情况,需要判断内存地址位置,
如果dest在src的前面,那就可以从头部开始move,反之则需要从尾部开始move
另外需要注意的是参数类型是void*,这个是不能进行运算操作的,必须转为char* (网上看到有些文章没有转换应该是错误的)
当然有些同学可能觉得代码还可以更精简,其实本质应该还是一样的,以下代码仅供参考
void *memmove(void *dest, const void *src, size_t count){void *ret = dest;if (dest <= src) {while (count--)*(char*)dest++ = *(char*)src++;} else {dest = (char*)dest + count;src = (char*)src + count;while (count--)*--dest= *--src;}return ret;}
0 0
- Linux 库函数源码分析(1) --- memmove
- linux系统库函数之memmove
- 库函数memmove()实现
- memmove源码
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr,
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 部分字符串库函数的重写(源码) toupper,memcpy,memmove,memset,memchr,strlen,strcpy,strcat,strcmp,strchr
- 一些C的库函数,C++ stl函数源码(如:strcpy、memcpy和memmove)
- memmove ( )【C语言库函数源代码】
- 字符串库函数memmove的源代码
- 库函数memcpy()与memmove()实现
- 库函数memcpy()与memmove()实现
- Linux下库函数动态链接过程分析-结合glibc-2.11源码
- linux源码分析1
- glibc-linux C 标准库函数源码
- memmove源码实现
- memcpy与memmove源码
- 《程序员的自我修养》读后感
- Java中把数组转为一个List
- Android 有效的展示大图片(四)
- svn中如何列出所有branches下的分支?
- Why you should not shrink your data files
- Linux 库函数源码分析(1) --- memmove
- kettle 集群、分区
- hdu-1398-Square Coins
- Javascript 中的 && 和 ||
- Eclipse中配置tomcat
- solr schema.xml
- UVA - 156 Ananagrams
- Expression Blend for Silverlight 超丑数据加载效果
- 深入理解Java异常处理机制