but*_*ech 1 c stack local-variables
在 C 程序中,局部变量存储在堆栈中。让我们说在那里定义了局部变量。
int x, y, z;
Run Code Online (Sandbox Code Playgroud)
这意味着首先将“x”压入堆栈,然后是“y”,然后是“z”。现在,如果我需要在 'y' 或 'z' 之前使用 'x' 变量,那么这意味着我必须先弹出 'y' 和 'z',然后才能访问堆栈上的 'x' 变量。
我的理解是正确的还是遗漏了什么?
您对典型系统堆栈的工作方式有基本的误解。
最重要的是:您似乎认为只能访问堆栈中的最后一个元素,但这不是它的工作原理。可以随时访问堆栈上的所有对象(也称为变量)。
此外,通常没有单个对象的推送/弹出。通常它是一个改变的堆栈指针,并且该单个操作为堆栈中所需的所有对象腾出空间。
最后,声明变量的顺序并不决定它们在堆栈中的放置顺序。甚至有可能您的一个或多个变量将保存在寄存器中,因此不会在堆栈中。
还要注意,这一切都不是来自 C 标准。这一切都取决于所使用的系统。C 标准甚至没有提到/要求实现使用堆栈。