境界調整とはなんでしょうか?
アラインメントとも言います。というか、むしろアラインメントと言うことの方が多いです。
変数をメモリに配置する際に、そのデータ型のサイズに合わせてアドレスを調整することを言います。
例えば、short型(2バイト)の変数は、2で割り切れるアドレスに配置され、int型(4バイト)の変数は4で割り切れるアドレスに配置されます。それぞれ2バイト境界、4バイト境界と言います。
では、double型(8バイト)はどうかというと、処理系によっては4バイト境界で配置されたり8バイト境界で配置されたりします。
境界をどこに調整するかは処理系(主にCPUの都合)によって異なり、32bit CPUなら4バイト境界、64bit CPUなら8バイト境界が多いです。
なぜそうするのかというと、ほとんどの場合、境界をまたがるように配置されると、データアクセスのパフォーマンスが低下するからです。CPUによってはアクセスに制限がかかったりすることもあります。
コンパイラーは境界調整のために場合によっては変数と変数の間に余分な領域を確保して、境界を合わせるようにします。その余分な領域のことをパディング(padding)と呼びます。
同じメモリ領域が共有されること利点とはなんですか??
どういったときに共用体が使われのでしょうか??
これはかなりテクニック的な質問になるので、説明するのは難しいです。究極的には、あるときはshortとしてアクセスし、別のときはintとしてアクセスしたい、ということなのですが、パフォーマンス向上が目的だったり、消費メモリの節約が目的だったり、いろいろです。
2016/06/10 13:10