C 基礎 記憶體模型記憶體分割槽模型

2022-10-11 05:24:12 字數 636 閱讀 7298

**區:存放函式體的二進位制**,由作業系統進行管理;

全域性區:存放全域性變數和靜態變數以及常量;

棧區:由編譯器自動分配釋放,存放函式的引數值、區域性變數等;

堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**。

存放cpu執行的機器指令,**區是共享的,只有乙份**,是唯讀的。

存放全域性變數(定義在函式{}外的變數)、靜態變數(static修飾的變數)、部分常量(字串常量和const修飾的全域性常量)。

注意:#define巨集定義是不放記憶體的,定義的變數只是替換關係。

存放函式的引數值、區域性變數等

注意:不要返回區域性變數的位址,因為函式執行完作業系統雖然會保留,但其實棧區記憶體已經被釋放了。但是const修飾的引用可以返回並作為左值使用

在c++中主要利用new在堆區開闢記憶體,由程式設計師分配釋放,若程式設計師不釋放,整個程式結束時由作業系統釋放。

利用new建立的資料,會返回該資料對應型別的指標。

開闢的資料由程式設計師手動釋放,利用delete操作符。

eg:int * func()

釋放:delete p;

指標p也屬於區域性變數,存放在棧區,但是p裡存的是位址,這個位址指向堆區,堆區的記憶體裡值為10。

原文位址:

C 記憶體分割槽模型

c 程式在執行時,將記憶體大方向劃分為4個區域 區 存放函式體的二進位制 由作業系統進行管理的 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 位址高低 棧區 堆區 全域性...

c 記憶體分割槽模型

區 存放所有 的二進位制 全域性區,存放全域性變數,靜態變數,常量 棧區,編譯器自動分配與釋放,存放函式引數值和區域性變數,隨函式結束而釋放 堆區,有程式設計師進行分配與釋放,或者函式結束時自動釋放 不同區域用於存放那個不同的資料,有不同的生命週期 在程式編寫完,編譯後,生成exe檔案,這時已經出現...

C 基礎 記憶體模型

區 存放函式體的二進位制 由作業系統進行管理 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 存放cpu執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...