我想更好地理解棧上的項目以及如何解決它們。我發現here的文章似乎表明,當MIPS堆棧被初始化時,將分配固定數量的內存,並且堆棧增長到堆棧限制,這看起來是較小的地址。我會假設基於這種邏輯,當遍歷0x0000時會發生堆棧溢出?關於堆棧增長和尋址的困惑
我意識到MIPS是大端,但這是否會改變棧的增長?我寫了我認爲可以在x86_64機器上觀察到這種情況的一種快速方法,但堆棧似乎正在成長,正如我原先假定的那樣。
#include <iostream>
#include <vector>
int main() {
std::vector<int*> v;
for(int i = 0; i < 10; i++) {
v.push_back(new int);
std::cout << v.back() << std::endl;
}
}
我還感到困惑,並不是所有的內存地址的的不出現是連續的,這讓我覺得我做了一些愚蠢的。有人可以澄清嗎?
該程序在堆上分配數據,而不是在堆棧上分配數據。 – interjay
哦,是因爲我使用矢量這個事實嗎?會使用字符數組在堆棧上? – mreff555
矢量的數據和來自'new int'的分配都在堆上。只有本地變量本身(不包括任何內部分配的數據,例如向量的)在堆棧中。 – interjay