最近把我寫過的乙個很大的c++程式給朋友看,朋友說我用了太多的const常量,會消耗很多靜態區記憶體空間,最好用define代替。const真的占用了很多靜態空間嗎?我做了兩個實驗,測試環境是bcc55,使用-s引數生成彙編**。廢話不多說,我把實驗結果帖出來:
測試 1:
const int testa = 1;
const int testb = 2;
int main()
彙編碼:
.386p
ifdef ??version
if ??version gt 500h
.mmx
endif
endif
model flat
ifndef ??version
?debug macro
endm
endif
?debug s "2.cpp"
?debug t "2.cpp"
_text segment dword public use32 'code'
_text ends
_data segment dword public use32 'data'
_data ends
_bss segment dword public use32 'bss'
_bss ends
dgroup group _bss,_data
_text segment dword public use32 'code'
_main segment virtual
@_main proc near
?live16385@0:
; ; int main()
; push ebp
mov ebp,esp
; ;
; @3:
@2:pop ebp
ret
@_main endp
_main ends
_text ends
_text segment dword public use32 'code'
_text ends
?debug d "2.cpp" 13353 40136
end測試2:
const int testa = 1;
const int testb = 2;
int main()
彙編碼:
.386p
ifdef ??version
if ??version gt 500h
.mmx
endif
endif
model flat
ifndef ??version
?debug macro
endm
endif
?debug s "2.cpp"
?debug t "2.cpp"
_text segment dword public use32 'code'
_text ends
_data segment dword public use32 'data'
_data ends
_bss segment dword public use32 'bss'
_bss ends
dgroup group _bss,_data
_text segment dword public use32 'code'
_main segment virtual
@_main proc near
?live16385@0:
; ; int main()
; push ebp
mov ebp,esp
; ;
; @3:
@2:pop ebp
ret
@_main endp
_main ends
_text ends
_data segment dword public use32 'data'
_testa segment virtual
align 2
@_testa label dword
dd 1
_testa ends
_data ends
_text segment dword public use32 'code'
_text ends
?debug d "2.cpp" 13353 40238
end可以看到,作為常量使用的const,並不占用儲存空間,這個和define的作用是一樣的;而如果你試圖對這個常量取位址操作,編譯器才會給它分配空間。時間上,你沒必要對常量通過位址改變,也沒辦法改變的,因為,常量在編譯階段已經被替換了。
定義全域性常量
這樣定義 private final static int over all 如果只有final,這個值雖然不能改,但是如果over all所在的類有很多個物件,那麼over all這個物件將存放很多次,會很浪費空間。所以需要加加上static,這樣的話就算有很多物件那也會只有乙個over all。...
GO語言 const常量
單行常量宣告,宣告時必須指定值,且無法修改 const pi 3.14多行常量宣告,若省略賦值,則預設與上一行值相同 const a 100 b 200 c c 200 d d 200 const aa iota 0 bb bb iota 1 cc cc iota 2 dd dd iota 3 co...
const 常量資料,唯讀
2 const的用法小結 引入const的目地 既要使資料能在一定範圍內共享,又要保證它不被 任意修改,這時可以使用const即把有關的資料定 義為常量。const 唯讀常量,初始化之後就不能修改 常物件的資料成員都是常資料成員,因此常物件的 建構函式只能用引數初始化表對常資料成員進行初 始化。指向...