存放 cpu 執行的機器指令。通常**區是可共享的(即另外的執行程式可以呼叫它),使其可共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可。**區通常是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令。另外,**區還規劃了區域性變數的相關資訊。
總結:你所寫的所有**都會放入到**區中,**區的特點是共享和唯讀。
全域性區中主要存放的資料有:全域性變數、靜態變數、常量(如字串常量)
全域性區的叫法有很多:全域性區、靜態區、資料區、全域性靜態區、靜態全域性區
這部分可以細分為data區和bss區
2.1 data區
data區里主要存放的是已經初始化的全域性變數、靜態變數和常量
2.2 bss區
bss區主要存放的是未初始化的全域性變數、靜態變數,這些未初始化的資料在程式執行前會自動被系統初始化為0或者null
2.3 常量區
常量區是全域性區中劃分的乙個小區域,裡面存放的是常量,如const修飾的全域性變數、字串常量等
在vs下執行結果如下:
總結:全域性區存放的是全域性變數、靜態變數和常量
在程式執行後由產生了兩個區域,棧區和堆區
棧是一種先進後出的記憶體結構,由編譯器自動分配釋放,存放函式的引數值、返回值、區域性變數等。在程式執行過程中實時載入和釋放,因此,區域性變數的生存週期為申請到釋放該段棧空間。
vs執行效果如下
堆是乙個大容器,它的容量要遠遠大於棧,但沒有棧那樣先進後出的順序。用於動態記憶體分配。堆在記憶體中位於bss區和棧區之間。一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**。
vs執行效果如下:
當我們把幾個案例放在一起執行,就可以看到記憶體將每個區域劃分的很有條理。每個區域互不干涉,區域中的資料位址也是非常接近的
C 中的堆記憶體 棧記憶體和靜態記憶體
c 中的空間主要分為三類,堆記憶體 棧記憶體和靜態記憶體,其中靜態記憶體用來儲存全域性物件 定義在任何函式之外的物件 區域性static物件 類static資料成員,棧記憶體用於儲存定義在函式之內的非static物件。靜態記憶體和棧記憶體中的物件,所占用的空間都是由編譯器自動的建立和銷毀的。而除此之...
C 中記憶體對齊
在我們的程式中,資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。我們還是先來看一段簡單的程式 程式一 1 include iostream 2using namespace std 34 structx15 1011str...
C 中記憶體管理
1 分配方式簡介 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。堆,就是那些由n...