与其他任何指针一样,堆栈指针与指针一样,指向正常的标准内存.要访问堆栈的任何区域,您只需向指针添加偏移量即可.
如果你用C指针来思考它,你就有了堆栈指针
char *stack_pointer = some_memory;
Run Code Online (Sandbox Code Playgroud)
然后,该指针可以用作普通指针,包括添加偏移以访问堆栈上的特定位置,例如
*(int *)(stack_pointer + 4) = 5;
Run Code Online (Sandbox Code Playgroud)
我建议你尝试学习汇编程序代码,然后你可以创建一个非常简单的程序,使用一些局部变量,并将其编译为汇编程序代码并阅读它以确切了解它是如何工作的.
stack semanticsvs stack region(或存储区域)之间经常存在混淆.堆也一样.同样,"基于堆栈的虚拟机(如JVM和CLR)"的激增误导了非C和C++程序员认为本机运行时堆栈的工作方式相同.
区分是很重要的:
大多数体系结构上的堆栈提供了随机访问语义O(1).常见的例子是立即和基本+偏移量寻址模式以及x86中的堆栈和基本指针.实际堆栈区域以LIFO方式分配,但各个变量是
random accessible, O(1).如果你想要堆栈是巨大的,它可能是.
空间像LIFO堆栈一样分配.变量在堆栈中像数组/向量或绝对地址(指针)一样被访问.
所以,不,在C和C++中,您不仅限于一个变量.