使用矢量时,显示“内存不足”。
为了解决这个问题,我使用 max_size() 来检查,然后保留或 Push_back。
如果max_size()比保留值大应该没问题,但是不行!那么max_size()的意义是什么?
我在 Windows 7 和 Visual Studio 2010 中编译了下面的演示。我的电脑有 4GB RAM。当reserved是max_size()的1/2时,失败。
max_size()=2^32/sizeof(CPoint3D)-1=268435455
Run Code Online (Sandbox Code Playgroud)
演示中max_size()的1/4就可以了。在我的实际项目中,直到1/10都可以。
矢量的最大尺寸是多少,如何放大它?
当我将大量元素推入std::vector. 为了避免这个错误,我vector::max_size()首先检查了,并使用vector::reserve()预分配内存。然而,这不起作用。在演示项目中,当我保留 1/4 的max_size. 在实际项目中,当我保留1/10时,就会出现错误。我正在运行 Windows 7 并使用 Visual Studio 2010 进行编译。我的计算机有 4GB RAM。
如果max_size不起作用,我如何找出可以为 a 分配的最大元素数vector?
max_size()返回向量可以容纳的最大元素数。也就是说,考虑到使用它可能存储的整数类型的寻址限制和操作系统的地址空间限制等因素时的绝对限制。
这并不意味着您实际上可以让向量保存那么多元素。这只是意味着您永远无法存储更多。另外,仅仅因为您有 4 GB RAM 并不意味着您实际上可以创建一个占用 4 GB RAM 或任何接近 RAM 的连续缓冲区。还有其他因素需要考虑,例如内存碎片(因此您可能只能将一个千兆内存块分页到物理内存中)。
如果您确实需要在容器中包含这么多元素,那么连续序列可能不是一个好的选择。对于那么大的数据集,您可能需要一些可以零碎分页的东西,例如 std::deque。
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |