搜尋

首頁  >  問答  >  主體

c++ - C语言中的堆栈如何分配?

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?

迷茫迷茫2805 天前663

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:12:09

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

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

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

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

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:12:09

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:12:09

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:12:09

    樣品—>樣品是->是

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:12:09

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

    ij在堆中
    xp在堆疊裡

    http://segmentfault.com/a/1190000002575242

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

    回覆
    0
  • 取消回覆