新しいアロケータの動作と、データが連続して配置されない理由を調べようとしていました。
私のコード:
struct ci {
char c;
int i;
}
template <typename T>
void memTest()
{
T * pLast = new T();
for(int i = 0; i < 20; ++i) {
T * pNew = new T();
cout << (pNew - pLast) << " ";
pLast = pNew;
}
}
だから私はこれをchar、int、ciで実行しました。ほとんどの割り当ては最後から固定長であり、使用可能なブロックから別のブロックへのジャンプが奇妙な場合がありました。
sizeof(char):1
平均ジャンプ:64バイト
sizeof(int):4
平均ジャンプ:16
sizeof(ci):8(intは4バイトの整列に配置する必要があります)
平均ジャンプ:9
アロケータがこのようにメモリを断片化している理由を誰かが説明できますか?また、charのジャンプがintよりもはるかに大きく、intとcharの両方を含む構造であるのはなぜですか。