首页 > 解决方案 > 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

标签: cmemoryintegerlocation

解决方案


这取决于架构,但在许多系统上,局部变量存储在堆栈中。对于编译器而言,并不一定需要自顶向下填充堆栈,因此这取决于编译器的实现。通常,编译器会在堆栈上节省足够的空间并按照它认为合适的方式组织它。

编译器甚至可能不将其放入内存中,而是可以将值直接放入寄存器中,只要可观察的行为保持不变。


推荐阅读