あらぁ陰面とぉ

アラインメントというものがあるらしい。
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様は出来るだけ怒らせない方が良い。」