2010-01-25 143 views
1

如果多次將某物推入堆棧(例如,在一個循環中),堆棧是否不斷增加或者是否替換了之前的值?例如,重複推EDI 5次。堆棧會有5個EDI?關於「推」和堆棧的問題

回答

2

堆棧不斷增長,直到達到某個操作系統定義的限制。然後拋出異常。這個限制在PC上通常爲256k甚至兆字節,以允許遞歸。

堆棧不保持類型,這樣以來EDI是一個32位寄存器,之後5推進EDI的,將包含5個32位值,同

1

沒有生長在EDI值。堆棧指針寄存器每次推動時都會增加(或減少,取決於CPU架構),因此它指向一個新的但現有的存儲器位置。

這通常被稱爲堆「生長」,但它確實是相同的話說,C:

int stack[100]; 
int sp = 0; 
stack[sp++] = 42; // push 

的CPU堆棧,像上面的陣列,是固定的大小,並且當它是耗盡了某種錯誤(再次依賴於體系結構)。

2

確實堆棧保持增長

是。這就是爲什麼它被稱爲「堆棧」。這是一個非常基本的屬性,因爲它允許遞歸調用(子例程使用不同的參數調用它自己)。