假設你看堆,並具有以下代碼的過程中寄存器...連續2次函數調用有什麼不同?
...
void Test()
{
for (int i = 0; i < 10; i++)
{
OneRunDontKnow();
}
}
...
你看看究竟兩次當進程執行循環堆棧,並在這兩個時代OneRunDontKnow
是堆棧的頂部。
你能否知道OneRunDontKnow
是否被彈出堆棧,然後再次推入或者它從未彈出?
編輯:OneRunDontKnow
可以有任何簽名(它也可以帶參數或返回一個值)。
通過檢查堆棧指針?但是,現在的編譯器做了很多技巧,即內聯。 –
@Jan Dvorak:問題在於本地變量也在堆棧上創建。 – angelatlarge