mallocのalignmentの件
カーネル読書会の議論から派生した、mallocのalignmentの件についてnoocyteさんが詳細なコメントをつけていただいている。ちゃんと追いきれていない。すいません。
まあ、わたしのアバウトな理解ではmallocを8バイトアラインしなければいけないというPOSIX的な標準はないけど、glibcの実装ではそうなっているというような感じではないかと。IA32(x86)では8バイトアラインでなければいけないということはなさそうなので。もちろん、8バイトアラインの方が好ましいけど。
#ifndef INTERNAL_SIZE_T #define INTERNAL_SIZE_T size_t #endif /* The corresponding word size */ #define SIZE_SZ (sizeof(INTERNAL_SIZE_T)) #define MALLOC_ALIGNMENT (2 * SIZE_SZ)
誰かMALLOC_ALIGNMENTを適当に変えて実験してみてください。
16バイトアラインだと1ビット余計にフラグに使えるので強烈な最適化が効くかもしれない。(どんな最適化か見当もつかないが)
あ、でもRubyとかは4バイトとか8バイトの小さいオブジェクトを大量に消費するのかな?そうすると無駄が増えてしまっていかんということかな?
あと、アラインしたメモリを要求する場合は、posix_memalign()という関数があるみたいですね。(なんと)