c++ - 堆栈内存如何工作或函数变量如何在堆栈上分配和访问

标签 c++ c stack

当我在这个 page 上读到 Stack 和 Heap 的例子时,
我有一个问题,如果像页面上给出的示例一样,一个函数将其所有局部变量放在堆栈上,堆栈实际上是否访问不同的变量?
因为堆栈通常只能访问顶部,所以它只能访问函数的一个变量。
这是否意味着函数的变量存储在堆栈上的结构中?

最佳答案

堆栈指针,顾名思义,是一个和其他指针一样的指针,它指向普通的标准内存。要访问堆栈的任何区域,您只需向指针添加一个偏移量。

如果你从 C 指针的角度来考虑它,你就有堆栈指针

char *stack_pointer = some_memory;

这个指针然后可以用作普通指针,包括添加偏移量以访问堆栈上的特定位置,例如

*(int *)(stack_pointer + 4) = 5;

我建议您尝试学习汇编代码,然后您可以编写一个非常简单的程序,使用一些局部变量,并将其编译为汇编代码并阅读它以确切了解它是如何工作的。

关于c++ - 堆栈内存如何工作或函数变量如何在堆栈上分配和访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603092/

相关文章:

c++ - 使用 OpenCV 在轮廓线上标记点

c - 在 Visual 项目中包含一个文件以便使用它

c++ - 从一个到另一个调用裸函数?

java - 实现迭代器出错并抛出异常

根据模式进行多堆栈排序的算法

c++ - 构造函数体中的 auto_ptr 成员初始化(不在初始化器列表中)

c++ - 为什么不能像这样 : 在 C++ 中动态声明一个对象数组

c - 我的段错误发生在哪里? C

java - 主命令行参数存储在堆栈内存还是堆内存中?

c++ - for 循环在满足条件时不会结束