印象中,在一个函数里定义的局部变量,先定义的在高地址,后定义的在低地址。
但今天仔细测试了下,发现情况并不总是如此。
Win10 VS2017,Debug x64
先低后高
Win10 VS2017,Debug x86
先高后低
Win10 VS2017,Release x64
先高后低
Win10 VS2017,Release x86
先低后高
Ubuntu18 gcc7.5,Debug x64
先低后高
Ubuntu18 gcc7.5,Debug x86
先低后高
Ubuntu18 gcc7.5,Release x64
先低后高
Ubuntu18 gcc7.5,Release x86
先低后高
综上,是不是可以下个结论:linux gcc里都是先低后高?
答案是否。
下面是fedora 37 + gcc 12.2中测试结果:
所以,函数里局部变量地址高低与定义顺序的关系,并没有一个统一的规则。