函数调用时局部变量在堆栈中的组织方式
how the local variable organized in stack when function call?
我运行以下代码:
void func()
{
int i;
int array[10];
cout << &i << endl;
for(int i = 0; i < 10; ++i)
{
cout << &array[i] << 'n';
}
}
输出为:
0x28fe98
0x28fe70
0x28fe74
0x28fe78
0x28fe7c
0x28fe80
0x28fe84
0x28fe88
0x28fe8c
0x28fe90
0x28fe94
为什么i
的地址是0x28fe98
?
我认为i
的地址必须&array[0] - 4
.
为什么i
的地址实际上是&array[9] + 4
?
为什么 i 的地址是0x28fe98?
它位于阵列末尾之后
我认为 I 的地址必须是 &array[0] - 4。
为什么会这样?
为什么 i 的地址实际上是 &array[9] + 4?
因为i
是在阵列:)之后
通常,元素被推送到堆栈上,它们的地址减少,而堆限制增加,但任何代码都不应该依赖于它,除非你处于低级别(asm 等)。
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 算法问题:查找从堆栈中弹出的所有序列
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 在 Windows 上以编程方式设置堆栈大小
- 函数调用时局部变量在堆栈中的组织方式
- Visual Studio-在逐步执行时查看堆栈大小增长的方式
- 堆栈在C++中的使用方式
- 在堆栈上声明对象的两种方式之间的差异
- 如何在Windows中以编程方式从调用堆栈帧中读取函数参数
- 推入堆栈的另一种方式