c - 堆栈的大概地址是多少?
问题描述
最近在学习堆栈,为了学习,我用C语言写了一个简单的编程示例。我尝试调试。显然,栈中存储了局部变量或参数等数据,从高地址到低地址累加,但是当我打印出局部变量num1的地址时,出现了一个似乎是代码区{0x00bef6fc}的地址值。局部变量是存放在栈中的,所以我认为局部变量的地址应该是栈的位置,也就是高地址。我想错了吗?如果我做错了什么,你能指导我吗?
解决方案
这个小程序打印了一个局部变量的地址和一个参数的地址。
#include <stdio.h>
int bar(int parameter)
{
int foo = 0;
printf("Address of foo: %p\n", (void*)&foo);
printf("Address of parameter: %p\n", (void*)¶meter);
}
int main()
{
bar(42);
}
在大多数平台上,函数参数和局部变量都存储在堆栈中。所以上面程序打印的两个地址很可能会很接近,因此这也将是堆栈的大致地址。
OTOH,您无法以可移植的方式确定堆栈的起始地址和长度。
可能的输出:
Address of foo: 006FFCD4
Address of parameter: 006FFCE8
推荐阅读
- javascript - 如何从被调用函数中获得响应?
- machine-learning - 深度强化学习 (keras-rl) 提前停止
- sql - SQL 连接限制为 1 行,其中时间最旧的日期
- bash - 查找两个文件之间的所有匹配项,然后将字符附加到第二个文件中的所有匹配项的开头
- angular - 如何在 Angular 7 应用程序的 Edge 中查找错误源?
- powershell - 如何从批处理文件调用 powershell 脚本并将多个值返回到批处理文件?
- jquery - 用于 10-15 位电话号码验证的正则表达式
- umbraco - 母版页中的 Umbraco 字段
- google-apps-script - Data Studio Community Connector 始终需要授权
- android - 改造:小写标题