4

当我尝试创建一个向量并调整其大小以容纳最大数量的项目(vector::max_size())时,我在运行时出现调试错误:

“无效的分配大小:429467292”

我想知道为什么你不能调整这个大小,如果 max_size() 应该返回向量中的最大项目数......

vector<int> vc;
vc.resize(vc.max_size());

我也尝试在 VS2010 中启用 LARGADRESSAWARE:On,但这无济于事。想知道这是否是一个正确的 thoguth...

有人有线索吗?

4

1 回答 1

5

max_size()是向量可以存储的元素的绝对最大数量。使用默认分配器,这通常是std::numeric_limits<std::size_t>::max() / sizeof(T). 也就是说,它是您可能创建的该类型的最大数组。

但是,您永远无法真正分配这么大的数组。程序加载的模块会占用程序的一些地址空间,每个线程的堆栈也是如此。您的程序中可能会有其他动态分配的对象(由您或运行时分配)。这些都导致地址空间碎片化,这意味着可用地址空间的最大连续块远小于可用地址空间的总量。

简而言之,实际上不可能vectormax_size()元素来分配 a。

于 2012-08-27T20:25:33.953 回答