const全域性常量佔了多少空間

2021-04-06 18:40:44 字數 2335 閱讀 3509

最近把我寫過的乙個很大的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 唯讀常量,初始化之後就不能修改 常物件的資料成員都是常資料成員,因此常物件的 建構函式只能用引數初始化表對常資料成員進行初 始化。指向...