我運行如下代碼:函數調用時如何將本地變量組織在堆棧中?
void func()
{
int i;
int array[10];
cout << &i << endl;
for(int i = 0; i < 10; ++i)
{
cout << &array[i] << '\n';
}
}
輸出爲:
0x28fe98
0x28fe70
0x28fe74
0x28fe78
0x28fe7c
0x28fe80
0x28fe84
0x28fe88
0x28fe8c
0x28fe90
0x28fe94
爲什麼i
地址是0x28fe98
?
我認爲i
的地址必須是&array[0] - 4
。
爲什麼i
的地址其實是&array[9] + 4
?
堆棧通常會向下增長,如果每個變量有多個元素,則每個變量都會向上。當然,依靠這一點並不好。 – chris
我不太確定。但是我仍然會說,如果我錯了,我會去學習。預計您的數組將以constios方式進行分配,而不是代碼中聲明的所有變量。編譯器會在可行的情況下爲'i'分配內存 –
實際上,無論實際是什麼,如果數組或結構中較早的元素的地址(它們具有相同的訪問說明符),operator <必須返回true )稍後再進行比較,爲什麼不在內存中真正做到這一點?這是我第一次評論的第二部分的一個很好的理由。至於向下增長,我還沒有充分研究它,但它可能更有效或傳統。 – chris