あらぁ陰面とぉ
アラインメントというものがあるらしい。
C言語を久しぶりに扱った。C言語ですら久しぶりだ、そりゃ構造体なんてもっただ。
ポインタも久しぶりやな。
ポインタでつまずく人が多いそうだが、アセンブリを扱えば、
大したものではない事が良く分かる。
だから最初はCをやって、ポインタに達した時点でアセンブリを勉強すれば、
両方分かって一石二鳥って感じなわけさ。
それにしてもアラインメントのお蔭で、一体何時間悩んだのだ。
ってか俺の持っている本には載っていないんですけどぉ。
アラインメントってのは、32bitCPUは32bitがお好きだから、
構造体とかで中途半端なの扱われたら、マジ腹が立つんだけどって怒り始めるから、
「へへぇ〜、CPU様申し訳ありません。今生贄をしんぜよう。」
とか、訳の分からない言葉を吐き捨てながら、無駄にメモリを捧げるという、そんなもん。
要は
struct _BAKA {
int baka;
char ore;
}
としたときに4+1=5ではなく、4+4=8にすると言うこと。
これでCPU様に3バイトも無駄なメモリを捧げたのである。
でもこんなことされると、FAT操作ツールが作れませんので、
gcc -o ほにゃらら ほにゃらら.c -fpack-struct
と、「-pack-struct」で、生贄を捧げないようにします。
そうするとCPU様はお怒りになりながらも、どうにか頑張って作業を進めてくれます。
当然お怒りなので、CPUの効率が多少落ちるのです。
「CPU様は出来るだけ怒らせない方が良い。」