こんなコードを書いていた。
const char val[] = { 1, 2, 3, param, 4, 5 };
何かというと、配列の初期化子に変数が入っているのだ。
私のイメージとしては、初期化子はROM領域にあり、memcpy()でRAMに展開される、というものだ。
間に変数が入ることでどうなるのだろうか?
gcc -Sでコンパイルすると、全部展開されていた。
つまり、1byteずつmobvで代入されているのだ。
あらまあ。
movbが何バイトの命令かはわからないけど、1byteではあるまい。
2byteだったとしても、元のサイズの倍は必要になるのだ。
そりゃ確かに、アンロールすると高速にはなるだろうけど・・・。
かといって、変数をなくすと展開しないかというと、そうでもない。
初期化子のサイズ次第みたいだ。
-Osとかしても変わらない。
ふーん。
なんか落ち着かないが、仕方あるまい。
ARM版のgccでも同じなのかな?
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。