【发布时间】:2012-06-27 06:05:30
【问题描述】:
对于在 C++ 中使用 new 或 malloc 进行动态分配,是否存在任何类型的限制、系统或其他限制? 系统是 64 位的,我想分配一个大约 8 亿个结构的数组。
编辑:我之前没有自己测试的原因是因为我目前无法访问具有足够内存的机器,所以我觉得在我目前的机器上测试它没有意义。
运行我自己的测试后,我可以很好地分配 8 亿个元素,但是一旦我达到 ~8.5 亿,malloc 就会返回 NULL。该结构包含 7 个浮点数,因此总大小约为 22GB。 这个看似任意的限制背后的原因是什么?这台机器有 4GB 的内存和 4GB 的虚拟内存,所以我不知道为什么我什至能够分配这么多。
【问题讨论】:
-
你试过了吗?尝试的时间应该不会超过几分钟...
-
你构建的程序也应该是x64的。
-
对于任何特定系统,显然都会有一个限制——但它通常取决于系统配置,例如物理 RAM 的数量、交换文件/分区大小等。
-
那么如果物理内存的容量超过了malloc请求的大小,还有其他原因malloc会返回null吗?
标签: c++ memory dynamic limit allocation