重点是:我正在编写一种程序,它可以将手绘声波的BMP图像转换为实际声音。它运行良好,但我正在寻找一种将整个图像加载到内存的好方法。我目前使用std::vector来加载一个500 MB的图像,只看到任务管理器中进程已经分配了我的8GB RAM的很多空间,因此需要额外的分页(在大约6 GB左右停止)。我猜这是某种开销...
这里是我的问题:是否有更节省内存的方法来分配巨大的3D数组?并且是否有任何高效读取大文件的方法? (我正在等待它加载时编写这篇文章,它已经完成了大约85%,耗时约50分钟)
编辑 操作系统为64位Windows。它甚至超过了6GB,RAM对它来说太小了,因此Windows开始将数组放入分页文件中(我制作了一个小百分比指示器,并且此时分配大约80%)。
这是我用于分配的代码:
vector <vector<vector<char> > > raster_data; //declaration
raster_data.resize(width);
for(int i=0; i<width; i++)
{
raster_data[i].resize(height);
for(int j=0; j<height; j++)
{
raster_data[i][j].resize(3); //(24bpp=3Bpp)
}
}
所以我不是通过push_back()函数来写入数据,而是像访问一个普通数组一样来访问vector:
raster_data[i][j][k] // in a 3d for loop