は、次のC++のコードを考えます。 私はgccによって生成されたアセンブリ(-S
を使用)を見て、コードジェネのサイズが以前の数百倍も大きかったことに気付きました。奇妙なGCCの挙動
コンストラクタの定義を省略すると、生成されたアセンブリは完全に異なります。
.globl cube
.data
.align 32
.type cube, @object
.size cube, 120
cube:
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 3212836864
.long 1065353216
.long 1065353216
.long 3212836864
.long 3212836864
.long 3212836864
.long 1065353216
.long 1065353216
.long 3212836864
.long 1065353216
.long 3212836864
.long 1065353216
.long 1065353216
.long 1065353216
.long 1065353216
.long 1065353216
.zero 24
.text
明らかに、コンパイラによって生成されるコードには大きな違いがあります。 なぜですか? また、なぜgccはある状況のすべての要素をゼロにし、もう一方の要素をゼロにしませんか?
編集:私は、次のコンパイラフラグを使用しています :-std=c++0x
G ++ 4.5.2と。
これは野生の推測ですが、これを試してみてください:vertex_type():x()、y()、z(){} – Pubby
@ AlfP.Steinbachこれは正確です私のファイルにあるコード。他には何もありません。あなたのどちらかがコードをチェックしましたか?それは{}を持っています。それはインラインです... – dcousens
@Alf問題のコンストラクタはコメントアウトされています。 – zwol