我正在尝试查看新分配器的行为,以及为什么它不能连续放置数据。
我的代码:
我用char、int和ci运行了这个程序。大多数分配都是从上一个固定长度开始的,有时会从一个可用块跳到另一个可用块。
sizeof(char):1 平均跳跃:64字节
sizeof(int):4 平均跳跃:16
sizeof(ci):8(int必须放在4字节对齐上) 平均跳跃:9
有人能解释一下为什么分配器会像这样分片内存吗?还有为什么char的跳跃要比int和同时包含int和char的结构体要大得多呢?
我的代码:
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的结构体要大得多呢?