读书人

一个strcpy解决办法

发布时间: 2012-04-27 11:57:44 作者: rapoo

一个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直接存放到寄存器中,如果再增加一个地址,就要使用到内存??你反汇编看看,它是不是在整个计算地址的过程中只用到了寄存器,如果是的话,那应该就是一个地址效率更高的原因,所以才这样写,至于具体原因,不详,呵呵,但个人认为,库函数这东西,多半是追求效率的,只要能提高效率,哪怕再纠结的写法,也会用的

读书人网 >C语言

热点推荐