%.d: %.c @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$
char *strcpy(char *dest,const char *src) { char c; char *s = (char *) src; const ptrdiff_t off = dest - s - 1; do { c = *s++; s[off] = c; } while (c != '\0'); return dest; }
網上分析(http://blog.chinaunix.net/uid-23629988-id-2740802.html):html
1. glibc這個strcpy的效率在Intel的某些CPU上確實效率不高——我測試了(Intel(R) Pentium(R) 4和Pentium(R) Dual-Core CPU E5300。有興趣的朋友能夠在其它CPU上測試一下,最好不是Intel的;shell
2. 通常glibc會根據不一樣的CPU實現不一樣版本的庫函數,如strcpy。固然,我以前也知道這一點,不過我並無去特地的看特定CPU的strcpy的 代碼。而是看這個generic的代碼——當時我認爲generic的strcpy仍然會高效。那麼實際上對於intel的CPU來講,有特定的 strcpy實現代碼。因此在intel的CPU上,glibc的strcpy確定會高效。c#
最好的答案就是glibc中的generic的實現代碼,並不必定會高效。若是真的要學習且實現代碼,看來仍是要學習該CPU上的特定的實現代碼。安全