我试图看看新的分配器的行为,为什么它不连续放置数据。C++新的内存分配碎片
我的代码:
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和char的结构。
我应该添加在调试和发布模式之间的行为是非常不同的。我认为在调试模式下的额外空间是用于调试的目的...... – 2010-04-27 20:31:53
我不认为值得对通用分配器做任何假设 - 它将随着模式的不同而不同,从平台到平台。我根本不是想让你灰心丧气 - 如果你对这件事情有什么兴趣,你肯定会*继续挖掘! (相应地提出你的问题) – 2010-04-27 21:05:34