5
は、ここでコードの一部:あなたが見ることができるようにスタックで、我々は右のスタックにbuffer
ABOVE check
を持っている必要がありますので、asm x86での変数宣言の順序は?
int main()
{
char buffer[64];
int check;
...
、check
は、buffer
AFTER 宣言されていますか? gdbでしかし
、私は(x86の)を解体それが、これは私が得たものである:
- >check
0xbffff4f8
で - 0xbffff4b8
で>buffer
私の質問:ローカル変数のスタックには特定の順序がありますか?
また、同じことを別のコンピュータ(x86でも同じgccコンパイルオプションですが、gdbのバージョンとLinuxディストリビューションとで異なる)で試してみましたが、その順序は同じではありません。 S
ありがとうございます!
PS:あなたはより多くの細部をしたい場合は、スクリーンショットを参照してください。(コンピュータ2とコンピュータ1と右と左)
いいえ、コンパイラはそれらを特定の順序で格納する必要はありません。変数がレジスタに収まるか、完全に最適化されていれば、変数はまったくメモリに格納されないこともあります。 – Jester
変数は任意の順序で指定することができ、変数の前、後、または間に任意の数のパディングバイトが存在することがあります。 – user3386109
明確にするために、パディングバイトはアラインメントを保持するために使用されます。 –