質問
私自身のメモリプールで実施んに少し戸惑いポイント合わせ---
そしているメモリプールハウのサイズは一定のメモリブロック、ポイントのメモリプールで作成しmalloc((サイズ)-(numのブロック)).まだ割り当てられることはオブジェクトのサイズからsizeofオペレーターの配置などを懸念し、そのサイズが均一でな(しようと100バイトブロックのための何らかの理由で)、その後、時分割のチャンクされたmallocいで終わunalignedのポインタ.私の質問はいつものブロックの一部に境界があり?
解決
X86まなアライメントが性能が良い場合のデータが揃います。アラインメント タイプ 一般的にsizeof(タイプ)、16(バイト単位)。
わたしは、この馬鹿げ試験プログラムん(asuming malloc何がそうで返します16っamd64ます。を返します8時計の32ビットモード:
#include <stdlib.h>
#include <stdio.h>
int main() {
int i;
unsigned long used_bits = 0, alignment;
for (i = 0; i < 1000; ++i) {
used_bits |= (unsigned long)malloc(1); /* common sizes */
used_bits |= (unsigned long)malloc(2);
used_bits |= (unsigned long)malloc(4);
used_bits |= (unsigned long)malloc(8);
used_bits |= (unsigned long)malloc(16);
used_bits |= (unsigned long)malloc(437); /* random number */
}
alignment = 1;
while (!(used_bits & alignment)) {
alignment <<= 1;
}
printf("Alignment is: %lu\n", alignment);
return 0;
}
他のヒント
適切なアライメントを少なくとももを性能的に)ほとんどのx86実装(一部のようなアライメントが実際に必須の他建築).だいcallocい)のための引数は、サイズのバイト数だけでなく、一つのサイズをバイトでは、mallocな);そこで本質的にalign(下のブロックサイズ)の次に高出力の2つの上項目サイズはスイッチを複数の16バイト以上16日だ倍増永遠のように、@derobert勧告すると説明してい!-).この場合、呼び出し側うNバイトw/o他の配置やパディングで常に求め、Nは1バイトの各(ようcallocと同じ理由;-).
所属していません StackOverflow