c語言中const全域性變數儲存在唯讀資料段,編譯期最初將其儲存在符號表中,第一次使用時為其分配記憶體,在程式結束時釋放。
而const區域性變數(區域性變數就是在函式中定義的乙個const變數,)儲存在棧中,**塊結束時釋放。
在c語言中可以通過指針對const區域性變數進行修改,而不可以對const全域性變數進行修改。因為const全域性變數是儲存在唯讀資料段
而c++中,乙個const不是必需建立記憶體空間,而在c中,乙個const總是需要一塊記憶體空間。
在c++中是否要為const全域性變數分配記憶體空間,取決於這個const變數的用途,如果是充當著乙個值替換(即就是將乙個變數名替換為乙個值),那麼就不分配記憶體空間,不過當對這個const全域性變數取位址或者使用extern時,會分配記憶體,儲存在唯讀資料段。也是不能修改的。
c++中對於區域性的const變數要區別對待:
對於基礎資料型別,也就是const int a = 10這種,編譯器會把它放到符號表中,不分配記憶體,當對其取位址時,會分配記憶體
對於基礎資料型別,如果用乙個變數初始化const變數,如果const int a = b,那麼也是會給a分配記憶體
對於自定資料型別,比如類物件,那麼也會分配記憶體。
c中const預設為外部連線,c++中const預設為內部連線.當c語言兩個檔案中都有const int a的時候,編譯器會報重定義的錯誤。而在c++中,則不會,因為c++中的const預設是內部連線的。如果想讓c++中的const具有外部連線,必須顯示宣告為: extern const int a = 10。
記憶體儲存 全域性 靜態儲存區 常量儲存區
全域性 靜態儲存區 全域性變數和靜態變數被分配到同一塊記憶體中 常量儲存區 存放的是常量,是不允許修改的。靜態儲存是main函式執行前分配記憶體並初始化 常量儲存是固化在執行檔案上的資料。棧的方向和平台有關,一般來說,windows由高位址向低位址增長,linux相反,但基於linux的第三方系統得...
堆,棧,靜態儲存區和常量儲存區
在c 中,記憶體分成4個區,他們分別是堆,棧,靜態儲存區和常量儲存區 1 棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的存 儲區.裡面的變數通常是區域性變數,函式引數等.2 堆,又叫自由儲存區,它是在程式執行的過程中動態分配的,它最大的特性就是動.態性.由new分配的記憶體塊,...
有關字元常量儲存引起的資料在記憶體中儲存的若干問題
字串常量,放在哪個儲存區呢?是 自動儲存區 還是 靜態儲存區 中?比如 char pstr hello world 這裡,hello world 是乙個字串常量,pstr是在棧中的變數。我想問,字串常量,在哪個記憶體區域分配空間呢?好像應該不是在 棧區 分配空間吧!一 預備知識 程式的記憶體分配 乙...