• 5679阅读
  • 5回复

数组太大怎么办 [复制链接]

上一主题 下一主题
离线friday1203
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-13
    程序主要实现数值计算,可是数据量很大,有3579个txt,每个txt还有4000个数据,所以定义了一个指针**p,然后用new去分配类存,指向float[3579][4000]这样大的数组,然后在用QTextStream实现导入功能,那是相当慢啊。而且之后还要再分配这么大的空间来保存计算后的结果,结果出错。应该有别的什么方法吧,有谁遇到过这种情况,救救小弟!
    部分代码如下:
double **v= new double *[3579]];
for ( int i = 0; i < 3579; ++i )
        {
             v[ i ] = new double[4000];
        }
for(int i=0;i<3579;i++)
{
    QFile file(fileName[ i ]);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 文件的打开方式
     qDebug() << "Open file error!";
      }
    QTextStream in(&file);
    int j=0;
    while (!in.atEnd()) {
      // 从文件中读取一个double数
        in>>v[j];
        j++;
         }
    file.close();
}
//其中fileName[3579]是3579个txt的绝对路径
[ 此帖被friday1203在2009-11-13 21:14重新编辑 ]
离线tingxx

只看该作者 1楼 发表于: 2009-11-13
不知道你这些数据是怎么处理呀?可不可以读取一部分数据计算完后,再读下一部分数据呢?
QT自带的文档真是个好东西
一定要好好看呀
离线friday1203
只看该作者 2楼 发表于: 2009-11-13
我想那样也是一样要读这么多数据,一样很慢呀
离线steinlee

只看该作者 3楼 发表于: 2009-11-14
1. use c code to load it  and see if it is faster
2. direct use assembling code to load it on a specific computer
3. try some OpenMP and openMPI(parallel)
4. load on demand(load only data which is needed)
5. buy a faster computer

if non of them above can not help you, then be that way.
Looking for remote C/C++ and Qt 兼职
离线rqzrqh

只看该作者 4楼 发表于: 2009-11-14
那就new一次就够了,反复new会造成内存碎片。
也许malloc效率会高一些
离线10点睡觉
只看该作者 5楼 发表于: 2009-11-14
一下子读这么多个文件,确实慢。。。
快速回复
限100 字节
 
上一个 下一个