声明CONST问题
自动变量的初始化较之赋值语句效率并无提高.除了声明为const的变量之外, 为什么声明const变量后会提高呢
[解决办法]
const 在编译时有优化
如果不取 const 的指针,一般的编译器都不会给 const 分配内存。在编译时,编译器直接用 const 的值代进去,就和 #define 一样了。
[解决办法]
const和宏一样
在预编译时就确定了
[解决办法]
要注意C和C++的const不一样的
且不同编译器实现也不一样
如bcc,同样下面的程序
const x=123456;
main()
{
const y=2333;
return x+y;
}
如果是C:
;main()
;
push ebp
mov ebp,esp
;
;{
; const y=2333;
;
@1:
mov eax,2333 //这个是直接赋值
;
;
; return x+y;
;
?live1@32: ; EAX = y
add eax,dword ptr [_x] //没有优化
;
;}
C++:
;main()
;
push ebp
mov ebp,esp
;
;{
; const y=2333;
;
; return x+y;
;
@1:
mov eax,125789 //直接优化了
;
;}
;
[解决办法]
VC的话,的C要看编译选项(-O2)
如果没有-O2,不优化(对上面的程序x,y都有地址)
用了-O2,就全部优化了
对于C++就全部优化(当然上面程序不能编译,要加类型int)
[解决办法]
呵呵,一般而言。如果你的一个没用const修饰的auto变量,在你当前翻译单元内,编译器也会做优化。
所以加const能让编译器优化仅仅是在概念上说而已。
而如果是一个extern的变量就不一样了,呵呵。