0

関数を並列化したいのですが、数時間後にメモリが過負荷になるという問題があります。

テスト プログラムは単純なものを計算し、これまでのところ動作します。メモリ使用量だけが常に増加しています。

QT プロジェクト ファイル:

QT -= gui
QT += concurrent widgets
CONFIG += c++11 console
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp

QT プログラム ファイル:

#include <QCoreApplication>
#include <qdebug.h>
#include <qtconcurrentrun.h>

double parallel_function(int instance){
    return (double)(instance)*10.0;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int nr_of_threads = 8;
    double result_sum,temp_var;
    for(qint32 i = 0; i<100000000; i++){
      QFuture<double> * future = new QFuture<double>[nr_of_threads];

      for(int thread = 0; thread < nr_of_threads; thread++){
        future[thread] = QtConcurrent::run(parallel_function,thread);
      }
      for(int thread = 0; thread < nr_of_threads; thread++){
        future[thread].waitForFinished();
        temp_var = future[thread].result();
        qDebug()<<"result: " << temp_var;
        result_sum += temp_var;
      }
  }

  qDebug()<<"total: "<<result_sum;
  return a.exec();
}

私が観察したように、QtConcurrent::run(parallel_function,thread)はメモリを割り当てますが、 の後にメモリを解放しませんfuture[thread].waitForFinished()

ここで何が問題なのですか?

4

2 に答える 2