c++之如何知道 vector 的实际最大大小 (不使用 std::vector::max_size)

jackei 阅读:11 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 根本无法分配足够的内存来容纳所有元素。


标签:C++
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号