C++在堆上分配大型数组会产生"内存不足异常"

 cc_lzx_530 发布于 2023-01-15 17:50

我目前在使用数据声明或填充大型数组时遇到问题,因为我得到一个"内存不足"的对话框,源自CMemoryException.

我试图用一个对象的大约50000个元素创建一个数组或向量(试过两个),其中sizeof(MyObjectClass)返回大约37000个字节.

如果我尝试按元素填充向量或CArray元素,那么在获取Out Of Memory异常之前,我会在16000个元素附近填充.那应该接近600MB?

我在机器上有8GB RAM,根据Windows任务管理器只使用4GB.因此物理RAM的数量不应该带来问题.我在Visual Studio 2010中运行C++ MFC,32位.

如果我试着写

MyObjectClass* heaparray = new MyObjectClass[50000];

然后我立即在那一行上得到了同样的内存不足错误.

有任何想法吗?先感谢您!

更新:我还尝试使用以下字段创建一个TestStruct:

struct TestStruct
{
  long long field1;
  GUID field2;
  GUID field3;
  GUID field4;
  TCHAR field5[256];
  TCHAR field6[4];
  TCHAR field7[258];
  TCHAR field8[1026];
  TCHAR field9[258];
  TCHAR field10[16386];
  TCHAR field11[258];
};

TestStruct* heapArr = new TestStruct[50000];

仍然相同...执行最后一行代码时出现"Out of Memory"异常.在处理大数据时,堆不应该只是由RAM(或多或少)限制的可能性之一.然而......因为它已经在600MB的分配空间崩溃了,我不能同意这是非常大的数据......或者我应该?:/

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有