c++之如何知道 vector 的实际最大大小 (不使用 std::vector::max_size)
jackei
阅读:40
2024-06-20 12:54:19
评论:0
在在线类(class)中,我正在学习 vector 。在其中一个例子中,他们解释说:std::vector::max_size()
应该给我 vector 可以达到的最大尺寸。我决定测试一下:
#include <iostream>
#include <exception>
#include <vector>
int main(void) {
std::vector <int> nums;
int max = nums.max_size();
std::cout << "Max: " << max << std::endl;
for (int i = 0; i < max; i++) {
try {
nums.push_back(i);
}
catch (std::bad_alloc ex) {
std::cerr << ex.what() << std::endl;
std::cout << "Failed at: " << i << std::endl;
break;
}
}
return 0;
}
这是运行它的结果:
Max: 1073741823
bad allocation
Failed at: 204324850
它是 869416973 个整数。
所以我开始在谷歌上搜索它。 Here我读到它返回“容器可以达到的最大潜在大小”,并补充说“但绝不保证容器能够达到那个大小”。我会想象它会失败,但不会那么多。在失败之前,它只走了 1/5 的路。为什么是
std::vector::max_size
这么关?我认为更重要的是,有没有办法真正知道 vector 的潜在大小?
请您参考如下方法:
请注意 max_size
函数返回理论上的最大元素数,它没有说明所需的内存量。
如果我们假设 sizeof(int) == 4
(很常见)然后 204324850
元素需要 817299400
字节的连续内存(几乎 780 MiB)。
你得到一个 bad_alloc
异常是因为 vector 根本无法分配足够的内存来容纳所有元素。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。