sample code:
int i = 3;
int j;
void f ()
{
int x = 4;
int *p = malloc (sizeof(*p));
}
where are i, j, f, x, and p located?
PHP中文网2017-04-17 13:12:09
很顯然,i
和j
做為全域變量,在程式的靜態儲存區;這塊區域在程式啟動時即被申請,同時在程式運作全程不被釋放。
x
和p
作為局部變量,分配在呼叫堆疊上。隨f()
被呼叫時被分配,返回(退棧)時被釋放。
f
作為一個函數,儲存在記憶體的程式碼段。程式碼段的東西隨程式啟動時讀入內存,並且在程式運行全程不動。
p
指向的記憶體被分配在堆上。 「堆」其實本質是系統動態分配給記憶體的空間——程式把從系統中動態申請下來的一段空間視為“堆”,並提供malloc()
等靈活的分配功能。作業系統其實只知道一段記憶體被程式申請走,根本不知道這段記憶體的使用模型是「堆」。
黄舟2017-04-17 13:12:09
f:.text segment,
i:.data segment,
j:.bss segment,
x,p:stack,
x和p都是局部變量,存於上,但是p指向的記憶體空間處於heap上。
黄舟2017-04-17 13:12:09
你看下面兩篇文章,講得很清楚的
ij在堆中
xp在堆疊裡
http://segmentfault.com/a/1190000002575242
http://m.blog.csdn.net/blog/zhoucoolqi/7540612