前提・実現したいこと
c++で書いたファイルをターミナル上でコンパイルして実行した時と、.shファイルを作成し、コンパイル、実行を自動で行った時に終了時間が目に見える形で遅くなってしまっています。
どういったところに原因があるのか見当がつかず、困っています。
//test.cpp #include <iostream> #include <vector> #include <time.h> // for clock() int main() { std::cout << "clock():\n"; for (int i = 0; i < 10; ++i) { std::vector<int> v; // int 型動的配列 clock_t start = clock(); // スタート時間 const int N = 1000*100; // 10万回 for (int i = 0; i < N; ++i) { v.push_back(i); // 末尾に i を追加 } clock_t end = clock(); // 終了時間 std::cout << "duration = " << (double)(end - start) / CLOCKS_PER_SEC << "sec.\n"; } return 0; }
こちらのコードをターミナル上で実行すると、
$ g++ test.cpp $ ./a.out
//実行結果 clock(): duration = 0.000552sec. duration = 0.000132sec. duration = 0.00013sec. duration = 0.00013sec. duration = 0.00013sec. duration = 0.00013sec. duration = 0.00013sec. duration = 0.000129sec. duration = 0.00013sec. duration = 0.000129sec.
となります。
//test.sh g++ test.cpp ./a.out
こちらのshファイルを実行すると、
//実行結果 clock(): duration = 0.003828sec. duration = 0.004294sec. duration = 0.004214sec. duration = 0.004259sec. duration = 0.003939sec. duration = 0.004081sec. duration = 0.003952sec. duration = 0.003898sec. duration = 0.003784sec. duration = 0.003933sec.
となります。
時間のかかり方が明らかに違うので、原因はどこにあるのかと困っています。
追記
環境に関して何も示しておらずすみませんでした。
Mac環境で動作させていています。
macOS Catalina 10.15.1
同じコードを試しにやってみましたが、どちらもdurationは15ms程度で有意な差はありませんでした。情報まで。
なるほど、、ありがとうございます
どんな環境で実行されているのでしょうか。Linuxだとは思いますが、質問文中に編集、追記するかたちでご提示ください。
.shで作られた a.out を ターミナル(?)で実行した場合、どうなるのでしょうか? また、その逆は? (./a.out のみの ファイル)
macOSということですが、正確に示してください。Catalinaですか。それとも前のMojaveなどですか。
macとか使ったことないので知りませんが、timeコマンドとかが使えたら、user/systemがそのプロセスで消費した時間が見れます。system消費時間でも変化があるようなら、これもmacで使えるかどうか知りませんが、straceなどの手段でシグナル経由のシステムコール?などに違いがないか調べるかもしれません。user消費時間に違いがあったらお手上げです。
どちらも違わなければ、他のプロセスの影響なので、環境依存的なものを調べるかなぁ…。
回答3件
あなたの回答
tips
プレビュー