首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个strcpy解决办法

2012-04-27 
一个strcpy94年的glibc里面的strcpyC/C++ code/* Copy SRC to DEST.*/char *DEFUN(strcpy, (dest, src), c

一个strcpy
94年的glibc里面的strcpy

C/C++ code
/* Copy SRC to DEST.  */char *DEFUN(strcpy, (dest, src), char *dest AND CONST char *src){  reg_char c;  char *s = (char *) src;  CONST ptrdiff_t off = dest - src - 1;  do    {      c = *s++;      s[off] = c;    }  while (c != '\0');  return dest;}


为啥会想到拿负数当下标进行计算?和当时的硬件有关系?


[解决办法]
用一个地址计算比用两个地址计算更快吧,或者,这代码会被编译器优化成把s直接存放到寄存器中,如果再增加一个地址,就要使用到内存??你反汇编看看,它是不是在整个计算地址的过程中只用到了寄存器,如果是的话,那应该就是一个地址效率更高的原因,所以才这样写,至于具体原因,不详,呵呵,但个人认为,库函数这东西,多半是追求效率的,只要能提高效率,哪怕再纠结的写法,也会用的

热点排行