C 如何解释内存地址分配的顺序?

C 如何解释内存地址分配的顺序?,c,memory-management,C,Memory Management,我想弄清楚内存地址是如何分配给每个变量的,因此我有以下代码: #include <stdio.h> int main() { int males; int females; printf("Address of 'int females': %p\n", (void *)&females); printf("Address of 'int males': %p\n", (void *)&males); return

我想弄清楚内存地址是如何分配给每个变量的,因此我有以下代码:

#include <stdio.h>

int main() {

    int males;
    int females;

    printf("Address of 'int females': %p\n", (void *)&females);
    printf("Address of 'int males':   %p\n", (void *)&males);

    return 0;
}
但是我分配
int男性
int女性
的顺序与地址不同。输出显示
int
地址是一个较小的数字,为什么会这样

我的直觉是看到
int雄性
有地址
0x7fff54f52b34
,然后4个字节后,
int雌性
分配到
0x7fff54f52b38

编译程序
负担在你身上:你为什么想象有任何关于局部变量地址的规则?根据语言标准,您甚至不允许在排序时比较两个地址。

我不想在程序中比较它们,我只想深入探讨如何将它们放入内存的原因。但现在很难做到这一点,因为有两个相互矛盾的答案……但你问的是一个比较性质,我告诉你,你所追求的这个性质是不存在的。这就像问为什么独角兽是绿色的。编译器可以按自己喜欢的方式布置局部变量,而且编译器执行相当普通的重新排序是非常常见的。您应该检查编译器的codegen和优化代码,以了解编译器作者所做的设计决策。我确实从中得到了我想要的,所以再次感谢您,我非常感谢您的时间。请参阅
Address of 'int females': 0x7fff54f52b34
Address of 'int males':   0x7fff54f52b38
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix