あ…ありのまま 今 起こった事を話すぜ!
『データのアライメントをしようと思ったら
いつのまにかメモリを大量消費していた』
コンパイルミスだとかリンカのバグだとか
そんなチャチなもんじゃあ 断じてねえ
もっと恐ろしいものの片鱗を味わったぜ…
あるデータ列の先頭アドレスを8の倍数にしたかったため、ソースコードに次のように書きました。
.align 8
FOO: .byte 0x01, 0x02, 0x03, 0x04
その後makeしてみたら、なんとROM使用量とRAM使用量が250byte近く増加していました!!アライメントのためのパッディングでメモリーが無駄遣いされたにしては多すぎます。8の倍数へのアライメントなら高々7byteの無駄遣いで済むはずです。
気になってasのドキュメントを参照してみると…こんなものが見つかりました。
仕様を確認した後、AVRはother systemsに属するので
.align 3
と直して一件落着しました。
それにしても面倒くさい仕様ですねぇ。balignやp2alignを使えばアーキテクチャによる違いがなくなるそうです。
ところで、8ビットマイコンであるAVRを使っているのに8バイト境界にアライメントするのは不思議に感じます。その理由は次回に説明します。
by Shiozaki
[…] かし、AVRがメモリにアクセスするときは1byte単位なので、このような問題は発生しません。では前回書いた8バイト境界にアライメントするというのはどのような場面だったのでしょうか。 […]