ID非公開

2022/6/18 15:35

33回答

C言語で作ったプログラムの処理速度が遅いため、速くしたいです。

画像

ベストアンサー

0
ID非公開

質問者2022/6/19 0:00

その通りです!参考にさせていただきます!

ThanksImg質問者からのお礼コメント

とても参考にも勉強にもなりました。 ありがとうございました。

お礼日時:6/20 12:28

その他の回答(2件)

0

700MB 程度のデータなら、全部メモリに読み込んで処理すれば、あっという間では? C++でやったほうが簡単そうではありますね。 やってみたところ、初回では、ファイル読み込みに数秒かかかりますが、処理自体は1秒以内でした。 C++なので、お気に召さないかもしれませんが。ご参考 #include <iostream> #include <string> using namespace std; int main() {     string strFile = "data.data";     // ファイルサイズを得る。     struct stat s;     if (stat(strFile.c_str(), &s)) {         cout << "can't get stat" << endl;         return 0;     }     long lSize = s.st_size;     cout << "size = " << lSize << endl;     // ファイルを開いて読む。     FILE* pFile;     if (fopen_s(&pFile, strFile.c_str(), "rb")) {         cout << "can't open " << strFile << endl;         return 0;     }     char* pcBuff = new char[lSize];     if (pcBuff == 0) {         cout << "can't get memory" << endl;         return 0;     }     cout << "start reading" << endl;     size_t size = fread_s(pcBuff, lSize, sizeof(char), lSize, pFile);     if (size <= 0) {         cout << "cant read file" << endl;         return 0;     }     cout << "end reading" << endl;     // 比較用関数定義     auto IsSame = [](const char *p1, const char *p2, int iLen) {         for (int i = 0; i < iLen; i++) {             if (*p1++ != *p2++) { return false; }         }         return true;     };     // 比較して数える。     int iTagSize = 12;     int iStride = 144;     int iTagOffset = 3;     char* pTag = pcBuff + iTagOffset;     int iCount = 0;     for (char* pTarget = pTag + iStride; pTarget + iStride < pcBuff + size; pTarget += iStride) {         if (IsSame(pTag, pTarget, iTagSize)) { iCount++; }     }     // 結果をプリントする。     for (int i = 0; i < iTagSize; i++) {         cout << pcBuff[iTagOffset + i] << (i % 3 == 2 ? " " : "");     }     cout << "Count = " << iCount << endl;     // 後始末     fclose(pFile);     delete pcBuff; }

ID非公開

質問者2022/6/18 22:05

ありがとうございます。 参考にさせていただきます。

0

すでに出された案は、どんな結果でしたか? あと、実際のデータも、比較部分は数字だけの12文字ですか?