gpt4 book ai didi

c++ - 如何知道 vector 的正确最大大小?最大大小()?但不是

转载 作者:太空狗 更新时间:2023-10-29 23:31:04 25 4
gpt4 key购买 nike

使用vector时,显示“Out of Memory”。
为了修复它,我使用 max_size() 来检查,然后保留或 push_back。
如果 max_size() 大于保留值,应该可以,但不行!那么max_size()是什么意思呢?
我在 Windows 7 和 Visual Studio 2010 中编译了下面的演示。我的电脑有 4GB 内存。当 reseverd 为 max_size() 的 1/2 时,它会失败。

max_size()=2^32/sizeof(CPoint3D)-1=268435455

demo中max_size()的1/4时就可以了。在我的真实项目中,直到 1/10 才可以。

vector的max size右边是多少,怎么放大


当我将大量元素放入 std::vector 时,出现“内存不足”错误。为避免错误,我首先检查了 vector::max_size(),然后使用 vector::reserve() 预分配内存。但是,它不起作用。在演示项目中,当我保留 1/4 的 max_size 时会发生错误。实际项目中,我预留1/10的时候就报错了。我正在运行 Windows 7 并使用 Visual Studio 2010 进行编译。我的计算机有 4GB 内存。

如果 max_size 不起作用,我如何找出可以为 vector 分配的最大元素数?

最佳答案

max_size() 返回 vector 可能包含的最大元素数。也就是说,考虑到使用它可能存储的整数类型的寻址限制和操作系统的地址空间限制等因素时的绝对限制。

这并不意味着您实际上可以使 vector 包含那么多元素。这只是意味着您永远无法存储更多。同样,仅仅因为您拥有 4 GB 的 RAM 并不意味着您实际上可以创建一个占用 4 GB RAM 或任何接近 RAM 的连续缓冲区。还有其他因素需要考虑,例如内存碎片(由于它,您可能只能将 1 gig 内存块分页到物理内存中)。

如果您确实需要在一个容器中放置这么多元素,那么连续序列可能不是一个好的选择。对于如此大的数据集,您可能需要一些可以分页的东西,例如 std::deque。

关于c++ - 如何知道 vector 的正确最大大小?最大大小()?但不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com