memcpy的内存重叠问题 + memcpy比for循环效率高
来源:互联网 发布:巨衫数据库 编辑:程序博客网 时间:2024/05/22 15:58
通常来说,这个函数的实现比较简单
这其实是为了解决区域重叠问题
比如这种
| src |
| dst |
我看了下crt的实现源码,如下:(略去64位机的)
void * __cdecl memcpy ( void * dst, const void * src, size_t count ){ void * ret = dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return(ret);}
今天,我看到一个面试题上叫实现这个函数,看了下它的参考答案,如下
void *MyMemCopy(void *dest,const void *src,size_t count){ char *pDest=static_cast<char *>(dest); const char *pSrc=static_cast<const char *>(src); //注意,这里是关键,为什么要这样比较呢?理由何在? if( pDest>pSrc && pDest<pSrc+count ) { for(size_t i=count-1; i>=0; ++i) { pDest[i]=pSrc[i]; } } else { for(size_t i=0; i<count; ++i) { pDest[i]=pSrc[i]; } } return pDest;}
这其实是为了解决区域重叠问题
比如这种
| src |
| dst |
memcpy跟memmove的区别,memmove可以处理重叠的情况
来源:http://bbs.csdn.net/topics/210050580
另外,用一个for循环去复制一块内存永远比memcpy慢,因为memcpy是编写CRT库的人手工写出的为CPU特别优化的汇编代码(另一个原因是大多数编译器会特殊处理memcpy这个函数)。——见《游戏之旅——我的编程感悟》82页
在古老的介绍优化的书本上,很多前辈提到过循环展开这样的优化策略,也就是说,通过减少循环的次数,而在循环体内复制多次需要做的事物可以减少操作循环计数器的次数,以此来提高一点运行速度。我本人是不赞同这种方案的,即使真的能提高速度,这样做也破坏了程序美感。到了Pentium时代,循环展开更是画蛇添足的败笔,因为他极大地影响了CPU内部缓存的工作。
——见184页
0 0
- memcpy的内存重叠问题 + memcpy比for循环效率高
- memcpy 内存重叠问题
- memcpy内存重叠问题
- memcpy内存重叠的解决
- memcpy的效率问题
- memmove 和 memcpy的区别以及处理内存重叠问题
- memmove 和 memcpy的区别以及处理内存重叠问题
- memmove 和 memcpy的区别以及处理内存重叠问题
- memmove 和 memcpy的区别以及处理内存重叠问题
- memmove 和 memcpy的区别以及处理内存重叠问题
- C内存重叠问题,memcpy,memmov,strcpy
- 内存重叠问题,memcpy,memmov,strcpy
- C内存重叠问题,memcpy,memmov,strcpy
- Strcpy,memcpy函数的内存重叠
- strcpy,memcpy,memmove的内存重叠
- 实例介绍利用valgrind定位memcpy内存重叠问题------顺便再次说说memcpy和memmove的区别
- 比memcpy更好的内存拷贝方法
- 比memcpy更快的内存拷贝
- 金融科普 为什么连交易员也要学Python?
- LightOJ 1024 - Eid (高精度求n个数的LCM)
- Table 'performance_schema.session_variables' doesn't exist
- Optimized Primitives 《ARM System Developer‘s Guide》Chapter-7
- 首篇,作个标记
- memcpy的内存重叠问题 + memcpy比for循环效率高
- C语言基础(二)
- bzoj2806 Cheat 后缀自动机&单调队列
- Git 10 周年访谈:Linus 讲述背后故事
- 推荐普通开发者学习使用的6个JDK内建工具
- 获取SHA1密文和MD5密文
- BZOJ 1653 USACO 2006 Feb Backward Digit Sums 全排列
- 戴尔-卡耐基:《人性的弱点 How to Win Friends And Influence People》总结
- [BZOJ3132] 上帝造题的七分钟