const唯讀變數的記憶體分配

2021-08-01 03:45:49 字數 557 閱讀 9114

編譯器通常不為普通 const 唯讀變數分配儲存空間,而是將它們儲存在符號表中,這使

得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

例如:

#define m 3//巨集常量

const int n=5;//此時並未將 n 放入記憶體中

…… int i=n;//此時為 n 分配記憶體,以後不再分配

int i=m;//預編譯期間進行巨集替換,分配記憶體

int j=n;//沒有記憶體分配

int j=m;//再進行巨集替換,又一次分配記憶體

**const 定義的唯讀變數從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define

一樣給出的是立即數,所以,const 定義的唯讀變數在程式執行過程中只有乙份拷貝(因為它是全域性的唯讀變數,存放在靜態區),而#define 定義的巨集常量在記憶體中有若干個拷貝。

#define 巨集是在預編譯階段進行替換,而 const 修飾的唯讀變數是在編譯的時候確定其值。

#define 巨集沒有型別,而 const 修飾的唯讀變數具有特定的型別。**

const 修飾的唯讀變數

const 修飾的唯讀變數必須在定義的同時初始化 編譯器通常不為普通const 唯讀變數分配儲存空間,而是將它們儲存在符號表中,這使 得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率也很高。例如 define m 3 巨集常量 const int n 5 此時並未將n 放入記憶體中...

const記憶體分配

常量有沒有儲存空間,或者只是編譯時的符號而已?不一定。在c中,define常量是預處理階段的工作,其不佔據記憶體。但是const常量總是佔據記憶體 在c 中,const常量是否佔據儲存空間取決於是否有引用該常量位址的 c 對於const預設為內部鏈結,因此const常量定義通常都放在標頭檔案中,即使...

const記憶體分配

常量有沒有儲存空間,或者只是編譯時的符號而已?不一定。在c中,define常量是預處理階段的工作,其不佔據記憶體。但是const常量總是佔據記憶體 在c 中,const常量是否佔據儲存空間取決於是否有引用該常量位址的 c 對於const預設為內部鏈結,因此const常量定義通常都放在標頭檔案中,即使...