2017-09-13 28 views
-3

C++でメモリ最適化に問題があります。私のコードは以下の通りである:ベクトル関数のC++メモリ最適化

void readSis(string sisName) { 
    namaFile << "Model.prism"; 
    namaFile2 << "Properties.csl"; 

    ifstream infile(sisName.c_str()); 
    Data platform; 

    // todo: split tiap = 
    platform.N = atof(readInputLine(infile).c_str()); 
    platform.Ti = atof(readInputLine(infile).c_str()); 

    // save Ti 
    ostringstream temp; 
    temp << platform.Ti; 
    Ti = temp.str(); 

    for (int i = 0; i<platform.N; i++) { 
     Component tmp; 
     tmp.componentName = readInputLine(infile); 
     tmp.X = atof(readInputLine(infile).c_str()); 
     tmp.Y = atof(readInputLine(infile).c_str()); 
     tmp.LDU = atof(readInputLine(infile).c_str()); 
     tmp.LDD = atof(readInputLine(infile).c_str()); 
     tmp.MDD = atof(readInputLine(infile).c_str()); 

     if (tmp.Y == 1) 
     tmp.MaxState = (4 * tmp.Y) - 2; 
     else if (tmp.Y>1) 
     tmp.MaxState = (4 * tmp.Y) - 3; 
     tmp.HFT = tmp.Y - tmp.X; 

     // looping to read every tmp input 
     platform.vc.push_back(tmp); 

     // make the .prism and .csl file 
     makePrism(i + 1, tmp.HFT, platform.N, tmp.componentName, tmp.X, tmp.Y, tmp.MaxState, tmp.LDD, tmp.LDU, tmp.MDD); 
     makeCSL(tmp.HFT, i + 1, platform.Ti, platform.N, tmp.X, tmp.Y, tmp.LDD, tmp.LDU); 
    } 
    OKStream << ";" << endl; 

    // export .prism and .csl into file 
    exportPrism(); 
    exportCSL(platform.Ti); 

    cout << "Model and properties have been exported!" << endl; 

    // calling prism function 
    cout << "Calling PRISM Software in C:Program Files/prism-4.3.1/bin/prism" << endl; 
    cout << "Executing model and properties......" << endl; 
    cout << "Please wait for some moments......" << endl; 

    callPrismBat(); 

    // calling readtxt function 
    cout << "Processing PFD.txt...." << endl; 
    readtxt("PFD.txt"); 

    cout << "SIL calculation has been done in file SILCalc.SIS" << endl << endl; 
} 

私の問題があり、私は再び0(ゼロ)にそれを作ることによってcallPrismBat()関数を呼び出す前に、私の使用しているメモリを最適化したいです。誰でも助けてくれますか?
ありがとうございます!

+1

「いくつかの問題がありますか」を教えてください。 *なぜ* "メモリ最適化"をしたいですか?私たちはあなたが本当に何も知らない問題を解決するのを手助けすることはできません。 –

+1

「使用済みのメモリを最適化しますか?」とはどういう意味ですか? –

+1

そして、それは何ですか? – molbdnilo

答えて

0

簡単な解決策:callPrismBat()までのすべてを別のスコープ(機能またはちょうどエキストラ{})に移動すると、以前の地方の存在がなくなります。

void readSis(string sisName) { 
    { 
     namaFile << "Model.prism"; 
     namaFile2 << "Properties.csl"; 

     ifstream infile(sisName.c_str()); 
     Data platform; 

     // todo: split tiap = 
     platform.N = atof(readInputLine(infile).c_str()); 
     platform.Ti = atof(readInputLine(infile).c_str()); 

     // save Ti 
     ostringstream temp; 
     temp << platform.Ti; 
     Ti = temp.str(); 

     for (int i = 0; i<platform.N; i++) { 
      Component tmp; 
      tmp.componentName = readInputLine(infile); 
      tmp.X = atof(readInputLine(infile).c_str()); 
      tmp.Y = atof(readInputLine(infile).c_str()); 
      tmp.LDU = atof(readInputLine(infile).c_str()); 
      tmp.LDD = atof(readInputLine(infile).c_str()); 
      tmp.MDD = atof(readInputLine(infile).c_str()); 

      if (tmp.Y == 1) 
       tmp.MaxState = (4 * tmp.Y) - 2; 
      else if (tmp.Y>1) 
       tmp.MaxState = (4 * tmp.Y) - 3; 
      tmp.HFT = tmp.Y - tmp.X; 

      // looping to read every tmp input 
      platform.vc.push_back(tmp); 

      // make the .prism and .csl file 
      makePrism(i + 1, tmp.HFT, platform.N, tmp.componentName, tmp.X, tmp.Y, tmp.MaxState, tmp.LDD, tmp.LDU, tmp.MDD); 
      makeCSL(tmp.HFT, i + 1, platform.Ti, platform.N, tmp.X, tmp.Y, tmp.LDD, tmp.LDU); 
     } 
     OKStream << ";" << endl; 

     // export .prism and .csl into file 
     exportPrism(); 
     exportCSL(platform.Ti); 

     cout << "Model and properties have been exported!" << endl; 
    } 
    // calling prism function 
    cout << "Calling PRISM Software in C:Program Files/prism-4.3.1/bin/prism" << endl; 
    cout << "Executing model and properties......" << endl; 
    cout << "Please wait for some moments......" << endl; 

    callPrismBat(); 

    // calling readtxt function 
    cout << "Processing PFD.txt...." << endl; 
    readtxt("PFD.txt"); 

    cout << "SIL calculation has been done in file SILCalc.SIS" << endl << endl; 
} 
+0

コンパイラは 'callPrismBat()' 'readtxt(" PFD.txt ")'などに影響を与えることのないデストラクタでは何も起こらないことを証明できれば、このコードであるかのようにあなたのコードを扱うことができます。 – Caleth

関連する問題