c++ - C语言中的堆栈如何分配?
迷茫
迷茫 2017-04-17 13:10:09
0
5
667

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?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(5)
洪涛

很顯然,ij做為全域變量,在程式的靜態儲存區;這塊區域在程式啟動時即被申請,同時在程式運作全程不被釋放。

xp作為局部變量,分配在呼叫堆疊上。隨f()被呼叫時被分配,返回(退棧)時被釋放。

f作為一個函數,儲存在記憶體的程式碼段。程式碼段的東西隨程式啟動時讀入內存,並且在程式運行全程不動。

p指向的記憶體被分配在上。 「堆」其實本質是系統動態分配給記憶體的空間——程式把從系統中動態申請下來的一段空間視為“堆”,並提供malloc()等靈活的分配功能。作業系統其實只知道一段記憶體被程式申請走,根本不知道這段記憶體的使用模型是「堆」。

黄舟

f:.text segment,
i:.data segment,
j:.bss segment,
x,p:stack,
x和p都是局部變量,存於上,但是p指向的記憶體空間處於heap上。

PHPzhong

i,j在靜態區,x在堆疊區,p的內容在堆區

伊谢尔伦

樣品—>樣品是->是

黄舟

你看下面兩篇文章,講得很清楚的

ij在堆中
xp在堆疊裡

http://segmentfault.com/a/1190000002575242

http://m.blog.csdn.net/blog/zhoucoolqi/7540612

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板