如果我有:
int c = 100;
float g = 22f;
当我调试代码时,分配这些变量的地址与我编写的顺序相反。
因此,即c
在address处分配,0x0086f910
并在addressg
处分配0x0086f904
。
g
是在之前分配的,c
但是在我c
之前编写的代码中g
!
例如,对于数组元素或结构成员(按我放置它们的顺序分配元素/成员),则不会发生这种情况。
为什么?
C没有讨论局部变量的分配方式,位置或顺序。这些是实施细节。从语言的角度来看,这个问题尚无定论。一种实现方式可以完全随机地进行分配,以至于根本无法将其与任何内容相关联,并且仍然符合ISO C标准。
对于实现,在x86上,堆栈从上到下递增,即,从较高的内存地址向较低的内存地址分配了较新的堆栈帧,变量等。再一次,这是一个约定,可以忽略它并为x86编写一个编译器,这可能会使堆栈朝相反的方向增长。
阅读同行堆高机Eli Bendersky的x86栈顶位置的更多信息。它正好解决了您的困惑(尽管从实现的角度来看)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句