runaway 關於檢視棧的分配大小問題

2021-09-23 18:52:20 字數 618 閱讀 6529

我們知道一些區域性變數的儲存是通過棧來實現的。但是我們在實際儲存當中,給每個資料儲存的空間到底是多少呢?這次以整型資料為例,展示一下如何檢視棧的分配。

#include #include int recurse(int x)
這裡通過不斷的遞迴呼叫函式來檢視儲存的極限。

int main(int argc, char *ar**)
我們來看看運算結果:

我們可以看到,在x = 38之後沒有37,而是現實核心已轉移。這是因為在不斷遞迴的過程中,我們所使用的的儲存空間不斷擴大,而計算機內部的儲存空間有限,不斷增加會導致後來的資料覆蓋前面的資料,這樣程式便無法找到「回去的路」。

再來看看帶引數執行的結果:

當引數為20時,便沒有顯示核心已轉移。

記憶體的堆分配和棧分配

記憶體的堆分配和棧分配 備註 這一部分非常重要,如果錯誤請及時告知。謝謝 這裡是完全參考其他部落格。c 記憶體模型 1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中的棧 2 堆區 一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構...

記憶體的堆分配和棧分配

c 記憶體模型 1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區 一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static 全域性變數和靜態變數的存放區域。...

棧記憶體的分配原理

什麼是堆記憶體分配棧記憶體分配 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由...