c/c ++在堆栈上分配

Tho*_*mas 2 c c++ cpu-registers

我正在阅读[1]关于堆栈指针和需要知道ebp(函数的堆栈的开始)和esp(结束).文章说你需要知道两者,因为堆栈可以增长,但我不知道在c/c ++中这是如何实现的.(我不是在谈论另一个函数调用,因为在我看来这会使堆栈增长,做一些事情,然后递归地弹出并返回状态,然后调用)

我做了一些研究,只看到人们说new在堆上分配.但指针将是一个局部变量,对吧?这在编译时是已知的,并在调用函数时保留在堆栈中.

我开始认为可能有循环,你有一些不受控制的局部变量

int a;
for (int i = 0; i < n; ++i)
  int b = i + 3;
Run Code Online (Sandbox Code Playgroud)

但不,这不会分配n次b,并且只保留1个int,就像它一样a.

所以......任何一个例子?

[1]:http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames

Evg*_*zin 5

您可以使用allocastdlib中的函数在堆栈上分配内存.我不建议在生产代码中使用此功能.这很容易破坏你的堆栈或堆栈溢出.