c 記憶體中呼叫dll C C 中的記憶體四區

2021-10-17 08:05:39 字數 1487 閱讀 9008

存放 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...