矢量无效的分配大小

vector invalid allocation size

本文关键字:分配 无效      更新时间:2023-10-16

当我试图创建并调整向量以容纳最大项目数(vector::max_size())时,我在运行时遇到调试错误:

"无效的分配大小:429467292"

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

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

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

有人知道线索吗?

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

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

简而言之,在实践中不可能分配具有max_size()元素的vector