我想更好地理解栈上的项目以及如何解决它们。我发现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