首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sizeof (long) vs sizeof (*lp)

sizeof (long) vs sizeof (*lp)
EN

Stack Overflow用户
提问于 2012-04-25 13:32:29
回答 3查看 131关注 0票数 1

一段经常执行的代码有以下计算:

代码语言:javascript
复制
long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (*lp);

将其更改为:

代码语言:javascript
复制
long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (long);

导致更高的效率(因为在编译时计算的大小),或者现代编译器已经在编译时处理了这一点。gcc是做什么的?

EN

回答 3

Stack Overflow用户

发布于 2012-04-25 13:33:54

sizeof()总是在编译时计算,所以没有区别。

票数 2
EN

Stack Overflow用户

发布于 2012-04-25 13:45:50

您可以通过以下方式完全省去除法运算:

代码语言:javascript
复制
tlen = ((long*)ep - (long*)cp);

但我不确定这样的实现是否会更有效率。我的小实验是不确定的。测试!

编辑:正如评论中提到的,只有当指针实际指向长整型(或指向适合保存长整型的内存位置)时,它才有效。但如果它们不在原始代码中,原始结果也不会有意义,所以我假设它们是有意义的。

票数 0
EN

Stack Overflow用户

发布于 2012-04-25 19:59:40

不会导致性能差异,但会导致不同平台的行为差异。例如:在Win x64上,sizeof(long)将为4,但sizeof(*lp)为8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10309864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档