首页 > 解决方案 > sizeof() 语句是在编译时还是运行时评估的?

问题描述

有类似的东西会浪费内存吗

static const char size = sizeof(struct MyStruct);

如果它们在编译时被评估,那就像在做;

static const char size = 10;
functioncall(size);
functioncall2(size);

哪个更优化:

#define STRUCTSIZE sizeof(struct MyStruct)

或者

static const char size = sizeof(struct MyStruct);

如果在编译时评估 sizeof,这会在运行时为恒定值分配额外的内存。如果在编译时评估它,我还不如使用宏来提高内存效率。但是,如果在运行时评估它们,则此变量将节省处理能力,因为它不必在我使用它时一遍又一遍地评估它。所以。sizeof 语句是在编译时还是运行时评估的?

标签: cruntimesizeofcompile-time

解决方案


在 C 中,sizeof() 语句是在编译时还是运行时评估的?

通常是的。但是,当应用于可变长度数组时,它会在运行时进行评估。否则根本不计算操作数表达式,仅使用表达式的类型来确定结果。

在这种情况下,使用宏代替变量没有任何好处。请注意,使用该变量也不是必需的,并且可能会混淆程序。然而,这主要是风格问题。


推荐阅读