在我的程序中,我创建了一个大型(约 1000 万个元素)对象列表,其中每个对象大约 500 字节大。目前的分配是这样的:
const int N = 10000000;
object_type ** list = malloc( N * sizeof * list );
for (int i=0; i < N; i++)
list[i] = malloc( sizeof * list[i]);
这工作正常 - 但我发现,由于大量的小分配,运行时间的很大一部分用于 malloc() 和随后的 free() 调用。因此,我将更改实现以分配更大的块。对我来说最简单的方法是将所有内容分配为一大块。
现在我知道在用户空间内存模型和实际物理内存之间至少有一个虚拟化级别,但是仍然存在获得如此大的“连续”内存块时遇到问题的风险吗?