gpt4 book ai didi

c - sizeof (long) 与 sizeof (*lp)

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:04 25 4
gpt4 key购买 nike

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

long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (*lp);

将其更改为:

long *lp
char *ep, *cp
...
tlen = (ep - cp) / sizeof (long);

导致任何更高的效率(因为 sizeof 是在编译时计算的)或者现代编译器是否已经在编译时处理了这个问题。 gcc 做什么?

最佳答案

sizeof 运算符始终是编译时计算的构造 0,因此没有区别。

片段...

 tlen = (ep - cp) / sizeof (*lp);

因此将被转化为与......不同的东西

 tlen = (ep - cp) / 4;

(假设 sizeof(long)==4 1。),应用优化后下一个转换可能是 ...

 tlen = (ep - cp) >> 2;

当然还有更多优化;这只是一个编译时构造 0 的可能结果的演示。

sizeof(_typename_) 相比,我总是更喜欢 "sizeof(_var-name_)",因为它更通用,并且在您更改变量的类型(从数组更改为指针时除外)。


0:可变长度数组除外。

1:大小因平台而异

关于c - sizeof (long) 与 sizeof (*lp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com