c - c中整数在内存中的位置
问题描述
我想知道如何在c中分配内存。在下面的示例中,编译器似乎为程序分配了一些内存,然后返回。它是如何以及为什么这样工作的?
代码:
int main (void) {
int a;
int b;
int c, d;
printf("a: %p\nb: %p\nc: %p\nd: %p\n", &a, &b, &c, &d);
}
输出:
a: 0x7ffff275351c
b: 0x7ffff2753518
c: 0x7ffff2753514
d: 0x7ffff2753510
解决方案
这取决于架构,但在许多系统上,局部变量存储在堆栈中。对于编译器而言,并不一定需要自顶向下填充堆栈,因此这取决于编译器的实现。通常,编译器会在堆栈上节省足够的空间并按照它认为合适的方式组织它。
编译器甚至可能不将其放入内存中,而是可以将值直接放入寄存器中,只要可观察的行为保持不变。
推荐阅读
- amazon-web-services - 来自 aws 的 pinpoint 无法将我的 csv 标头识别为地址
- python - 从列表列表中设置值和变量
- apache - 可以将“添加日期”列添加到 Apache 目录列表中吗?
- javascript - ChromeExtension:在谷歌搜索上触发监听器
- raspberry-pi3 - 尝试在我的 Rasberry Pi b+ 上运行 Alexa 语音服务时未满足的依赖关系
- c++ - 为什么这个范围基于返回一个数字的语句太低?
- kibana - 如何使用 keycloak 设置 kibana 单点登录
- java - JavaFx ListView 在每个项目中设置工具提示
- c# - 在 Asp Net MVC 中持久显示表单提交失败的数据
- here-api - HERE 地图“选择视图” - 我们可以删除选项吗?