这是一个检查最大malloc大小的简单程序:
#include <iostream>
std::size_t maxDataSize = 2097152000; //2000mb
void MallocTest(void*& ptr)
{
while (1)
{
ptr = malloc(maxDataSize);
if (ptr)
{
std::cout << "Malloc success: " << maxDataSize << std::endl;
return;
}
maxDataSize -= 1024;
if (maxDataSize <= 0)
{
return;
}
}
}
int main()
{
void* ptr = nullptr;
MallocTest(ptr);
if (ptr)
{
free(ptr);
}
system("pause");
return EXIT_SUCCESS;
}
当我运行该程序时,我成功获得了〜1300mb的malloc调用。该程序使用32位体系结构(释放模式)构建,因此理论上内存限制等于2GB。有什么引起内存碎片的吗?为什么我不能分配超过1300mb的空间?
您没有说您使用的是什么操作系统,但是它是32位的。实际上,[[good 32位实现将有2 GB的硬限制,因为大于PTRDIFF_MAX
的对象存在许多细微的问题,在使用它们时都容易引起未定义的行为,并触发处理指针的编译器错误算术。但是,您遇到了一些下限限制因素。