Я читал [1] о указателях стека и необходимости знать как ebp (начало стека для функции), так и esp (end). В статье говорилось, что вам нужно знать, потому что стек может расти, но я не вижу, как это возможно в c/C++. (Я не говорю о вызове другой функции, потому что, на мой взгляд, это будет увеличивать стек, делать какие-то вещи, а затем рекурсивно выскакивать и возвращаться к состоянию перед вызовом).c/C++ allocate on stack
Я проделал немного исследований и видел только людей говоря, что new
выделяет кучу. Но указатель будет локальной переменной, не так ли? И это известно во время компиляции и зарезервировано в стеке во время вызова функции.
Я начал думать, что, возможно, с петлями у вас есть неконтролируемое количество локальных переменных
int a;
for (int i = 0; i < n; ++i)
int b = i + 3;
но нет, это не выделяет п раз b
, и только 1 INT зарезервирован так же, как это для a
.
Итак ... любой пример?
[1): http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames
Все переменные в C и C++ существуют в контексте * scope *. Например, локальные нестатические переменные в функции являются автоматическими только для этой функции. Тем не менее, что, по вашему мнению, имеет смысл существования 'b' в вашем коде? – WhozCraig
Нет ничего «неконтролируемого» в вашем примере с точки зрения компилятора. –
Где в статье говорится: «Вам нужно знать, потому что стек может расти»?Он говорит только о параметрах, передаваемых в стек. – delnan