c/c++關於內存四區的模型。

一個由c/c++編譯的程序佔用的內存分爲以下幾個部分
1、棧區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方

式類似於數據結構中的棧。

函數的中的臨時變量在函數開始執行時存入棧中,函數執行完畢釋放掉。(不同的編譯器,不同的情況下

釋放的時間不同,但是肯定是在函數,函數執行完畢,函數的局部變量就不能使用。)

2、堆區(heap: 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。

java中數組是存放在堆上的,c中不是,c只能malloc或者new出來的內存纔會存放在堆上。而且如果不釋放

就只會在程序結束時自動釋放。


3、數據區:主要包括靜態全局區和常量區,如果要站在彙編角度細分的話還可以分爲很多小的區。
           全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變

量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 

程序結束後有系統釋放
常量區 :常量字符串就是放在這裏的。 程序結束後由系統釋放

4、代碼區:存放函數體的二進制代碼。

char *str = "hello world";

"hello world"是放在數據區的。

char str[20] = "hello world";

把數據區的"hello world";拷貝到str數組中。

char str[20] = "hello world";

return str;

接收端接收不到數據,已經被釋放。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章