印象中,在一個函數(shù)里定義的局部變量,先定義的在高地址,后定義的在低地址。
但今天仔細測試了下,發(fā)現(xiàn)情況并不總是如此。
Win10 VS2017,Debug x64

image.png
先低后高
Win10 VS2017,Debug x86

image.png
先高后低
Win10 VS2017,Release x64

image.png
先高后低
Win10 VS2017,Release x86

image.png
先低后高
Ubuntu18 gcc7.5,Debug x64

image.png
先低后高
Ubuntu18 gcc7.5,Debug x86

image.png
先低后高
Ubuntu18 gcc7.5,Release x64

image.png
先低后高
Ubuntu18 gcc7.5,Release x86

image.png
先低后高
綜上,是不是可以下個結論:linux gcc里都是先低后高?
答案是否。
下面是fedora 37 + gcc 12.2中測試結果:

image.png
所以,函數(shù)里局部變量地址高低與定義順序的關系,并沒有一個統(tǒng)一的規(guī)則。