我在读[1]关于堆栈指针和需要知道ebp(函数堆栈的开始)和esp(end)的知识。文章说,你需要知道这两者,因为堆栈可以增长,但我不明白在c/C++中这是如何实现的。 (我不是在谈论另一个函数调用,因为在我看来,这会使堆栈增长,做一些事情,然后递归地弹出并返回到调用状态之前)c/C++在堆栈上分配
我做了一点研究,只看到人说new
分配在堆上。但指针将是一个局部变量,对吗?这在编译时是已知的,并在函数被调用时保留在堆栈中。
我开始想,也许与你的循环有局部变量
int a;
for (int i = 0; i < n; ++i)
int b = i + 3;
不受控制的数量,但没有,这不分配n次b
,只有1 INT被保留只是因为它是a
。
那么...任何例子?
[1):http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames
C和C++中的所有变量都存在于* scope *上下文中。例如,函数中的本地非静态变量仅对该函数自动执行。也就是说,你认为你的代码中'b'的存在范围是什么? – WhozCraig
从编译器的角度来看,在你的例子中没有什么“不受控制的”。 –
文章在哪里说“你需要知道这两者,因为堆栈可以增长”?它只谈谈在栈上传递的参数。 – delnan