c/c++中,記憶體中資料儲存分成4個區,分別是堆、棧、全域性/靜態儲存區和常量儲存區。
棧(stack),就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。
堆(heap),一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。
全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的(data段)和未初始化的(bss段),在c++裡面沒有這個區分了,它們共同占用同一塊記憶體區。
常量儲存區,常量字串就是放在這裡的,不允許修改(通過非正當手段也可以修改,而且方法很多),程式結束後由系統釋放。
|----------------------|
| 核心虛擬儲存器 |
|----------------------|
| 使用者棧(statk) |
|----------------------|
| | |
| / / |
| |
| / / |
| | |
|----------------------|
| 堆(heap) |
|----------------------|
| 未初始化(bss) |
|----------------------|
| 初始化(data) |
|----------------------|
| 正文段(text |
|----------------------|
區分堆與棧:
void f()
這條短短的一句話就包含了堆與棧,關鍵new指示分配了一塊堆記憶體,而指標p分配的是一塊棧記憶體,所以這句話的意思就是:在棧記憶體中存放了乙個指向一塊堆記憶體的指標p。在程式會先確定在堆中分配記憶體的大小,然後呼叫operator new分配記憶體,然後返回這塊記憶體的首位址,放入棧中,他在vc6下的彙編**如下:
C C 程式記憶體中變數儲存區域的溫習
四 總結 c語言在記憶體中分為下列幾個區 記憶體棧區 存放區域性變數名 記憶體堆區 存放new或者malloc出來的物件 常數區 存放區域性變數或者全域性變數的值 靜態區 用於存放全域性變數或者靜態變數 區 二進位制 接下來我們用c語言來檢視位址的變化 include include include...
程式設計師面試寶典 C C 記憶體分類
在進行c c 程式設計時,需要程式設計師對記憶體的了解比較精準。經常需要操作的記憶體可分為以下幾個類別。棧區 stack 由編譯器自動分配和釋放,存放函式的引數值 區域性變數的值等。其操作方式類似於資料結構中的棧。堆區 heap 一般由程式設計師分配和釋放,若程式設計師不釋放,程式節束時可能由操 作...
深度學習資料在記憶體中的儲存 C C
資料型別分類 1.整形 short 短整型 2 byte unsigned short int 無符號位 signed short int 有符號位 int 整形 4 byte unsigned int signed int long 長整型 8 byte unsigned long int sig...