區分記憶體分配的方式

2021-08-19 05:15:36 字數 587 閱讀 2892

導言:

在c++的世界裡,「燙」和「屯」是我們遇到最多的兩個漢字(限於vc使用者)。為什麼呢?

答案:在vc裡,棧空間未初始化的字元預設是-52,補碼是0xcc。兩個0xcc,即0xcccc在gbk編碼中就是「燙」;堆空間未初始化的字元預設是-51,兩個-51在gbk編碼中就是「屯」。二者都是未初始化的記憶體。

關於記憶體的分配方式:

記憶體被分成了6個區:**區,資料區(自由儲存區,全域性/靜態儲存區,常量儲存區),堆取,棧區。除了**區不是我們能在**中直接控制的,其餘都是都是我們程式設計中可以利用的。

定義:棧區:在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,執行結束,儲存單元自動釋放。棧所分配的內容有限。

堆區:堆就是那些由new分配的記憶體塊,由我們的應用程式控制,乙個new對應乙個delete。如果程式設計師沒有被釋放掉,那麼作業系統就會自動**。

堆和棧的區別:(六個方向)

分配方式         : 堆都是動態分配,沒有靜態分配。棧有兩種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由alloca函式完成,但是棧的動態分配和堆的是不同的,它的動態分配是由編譯器進行釋放的,無須我們手動實現。

C 區分記憶體分配的方式

1.程式執行空間布局 區 資料區 堆區 棧區 2.區 程式的執行 3.資料區 全域性資料 常量 靜態變數 1 自由儲存區 由malloc等分配的記憶體塊,和堆十分類似,但是它是由free釋放記憶體。2 全域性 靜態儲存區 全域性變數和靜態變數被分配到同一塊記憶體中,c語言中,全域性變數又分為初始化的...

記憶體管理 分割槽分配

拼接技術 將空閒分割槽集中 基礎功能 分配和 記憶體 位址變換 擴充記憶體容量 記憶體保護 位址變換 指把程式中的邏輯位址轉換為實體地址,儲存保護 保護作業在自己的儲存空間並行互不受干擾 擴充記憶體的方法 交換技術 把不需要的程式和資料放到外存,把需要的從外存拿進記憶體 覆蓋技術 連續分配的管理方式...

記憶體動態分割槽分配 動態記憶體分配介紹

c語言的記憶體分配方式 堆和棧 基於快取的儲存器層次結構 當c程式在執行過程中需要額外虛擬記憶體時,可以使用動態記憶體分配器 dynamic memory allocator 動態記憶體分配器維護著乙個程序的虛擬記憶體區域,成為堆 heap 假設堆是乙個請求二進位制零的區域,它緊接在未初始化的資料區...