一段经常执行的代码有以下计算:
long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (*lp);将其更改为:
long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (long);导致更高的效率(因为在编译时计算的大小),或者现代编译器已经在编译时处理了这一点。gcc是做什么的?
发布于 2012-04-25 13:33:54
sizeof()总是在编译时计算,所以没有区别。
发布于 2012-04-25 13:45:50
您可以通过以下方式完全省去除法运算:
tlen = ((long*)ep - (long*)cp);但我不确定这样的实现是否会更有效率。我的小实验是不确定的。测试!
编辑:正如评论中提到的,只有当指针实际指向长整型(或指向适合保存长整型的内存位置)时,它才有效。但如果它们不在原始代码中,原始结果也不会有意义,所以我假设它们是有意义的。
发布于 2012-04-25 19:59:40
不会导致性能差异,但会导致不同平台的行为差异。例如:在Win x64上,sizeof(long)将为4,但sizeof(*lp)为8
https://stackoverflow.com/questions/10309864
复制相似问题