对于常量的优化

假如我在头文件中定义

#define PAGE_SIZE 4096

然后在cpp里写 int p=addr & (PAGE_SIZE-1) 。我想编译器肯定能把4096-1这个优化掉,它不会真的在运行的时候计算4096-1=4095这个值。

可是假如我采用另一种方式去定义:在头文件中写extern const int PAGE_SIZE;。然后在某个.o中将它赋值给4096。我猜编译器是没有办法把那个减法给优化掉的。因为这个只有到最后一步链接的时候才能得知这个常量的值,更有甚者,这个常量有可能是通过dll动态载入进来的。

而如果换成static const int PAGE_SIZE=4096。那么这个在编译的时候就能被优化掉。我特地用gcc -O2看了下确实是如此。

假如在一个公用的头文件中用static const int xxxx=xxxx;的方式定义常量,链接后的大小真的会比#define的方式增大很多吗?

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥