私はAPUEを読んでいて、に来たときlongjmp、質問が来ました。最適化の前は、自動変数とレジスタ変数の両方がメモリに格納され、最適化後は、レジスタに格納されると本は述べています。しかし、を使用するobjdump -S a.outと、両方が即時オペランドになっていることがわかりました。それで ?
3 に答える
2
あなたの本は単純化しただけでした。最適化する前でさえ、変数がメモリ内で実現されるという保証はありません。autoとの違いは、変数registerのアドレスを取得できないことだけです。registerCコンパイラは、抽象マシンと同じように動作するすべてのことを実行できます。
コンパイラーがこれらの変数を即時として認識するということは、そこにある値が小さく、コンパイル時の定数であることを示しています。したがって、おそらくそれらを宣言したconstかenum、そもそも定数として宣言した可能性があります。
于 2011-12-17T07:57:04.410 に答える
1
したがって、プログラムは非常に単純であり、本が書かれて以来、コンパイラーははるかに賢くなっています。
于 2011-12-17T07:30:27.610 に答える
0
したがって、おそらく異なるマシンで、おそらく異なるレベルの最適化を使用して、異なるコンパイラを使用しました。コンパイラの動作が異なることを除いて、これから本質的に何も結論付けることはできません。すべてのマシンの詳細。
于 2011-12-17T07:25:05.660 に答える