我试图查看新分配器的行为以及它为什么不连续放置数据。
我的代码:
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 的结构大得多。