我在什么时候请您对'sizeof'的用法提出意见
它出现在多个源文件中,并且在相同类型上运行。
例如在我的代码中,我需要

sizeof(float) * MY_CONSTANT


在几个地方(例如用于内存分配或将其传递给glBufferData()调用),我正在考虑为此编写一个宏:

#define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT)


这会给我带来编译速度方面的任何好处吗?您有没有想到的缺点(例如,我还需要一个带有该定义的标头才能包含在所有来源中)?

问候,
阿尔弗雷德

最佳答案

根据我的知识,将#define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT)定义为宏不会给编译速度带来任何好处,实际上,由于进行预处理,可能会稍微降低编译速度。

编译分4个阶段/步骤进行:


前处理
汇编
部件
连结中


在预处理阶段,宏将替换为其所代表的代码。通过定义宏#define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT),您只是添加了一个在整个代码中都必须替换的宏,这增加了预处理阶段需要完成的工作。当然,由于这是一个简单的替换,因此进行替换的时间可能很短,但是您绝对不会看到加速的。

在我看来,您不应该为了加速编译而包含宏,而是为了试图加快开发速度,因为宏会减少您花费在编写重复代码上的时间。

有关编译阶段的更多信息,这可能是阅读的好资源:http://placementyogi.com/tutorials/c/c-basics/c-program-compilation-steps

关于c - 多个源中时间常数的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41432437/

10-11 22:41
查看更多