2012-03-09 25 views
0

私はLinuxマシン上の素早いターンアラウンド対のcygwinで実行するために本当に長い時間がかかるのC++プログラムを持っているに比べてcygwinの中にC++プログラムのために。私はそれがメモリの問題かもしれないと思ったし、使用するメモリを印刷しようとした、これは私が見WAHTです:長い実行時間のlinux

Linuxの

仮想メモリ:5072キロバイト、常駐セットサイズ(RSS):1064キロバイト

Cygwinの

仮想メモリ:7672キロバイト、常駐セットサイズ(RSS):108928キロバイト

は、誰も私がこの違いの原因を理解するのに役立ちます ? Cygwinは、64ビットのウィンドウ&と3 GBのメモリを搭載したラップトップで動作しています。このプログラムにはmallocを行う古い "C"コードがあります。これらを標準のC++コンテナに変換するのが助けになるでしょうか?

+3

に悪い考えであるフォーク()で、それは答えには不可能ですこの質問。 –

+0

は同じハードウェアですか?もしそうなら、JamesがOSの呼び出し時間に加えて言ったこと。 –

+0

g ++ -gを使ってコンパイルされました。 -o out.exe gcc version 4.5.3を使用しています。 cygwinに最新のlibsがインストールされています。ありがとう – cppcoder

答えて

3

CygwinはWindowsののへのPOSIX互換レイヤを提供します。これは、ネイティブOS CRTに対して構築されたコードよりも遅くなる可能性があります。あなたのコードは、標準CまたはC++の場合

、MSVCまたはMinGWの/ GCCでそれを再コンパイルし、それを比較します。別のノートで

newmallocは非問題です。ヒープ割り当ては高価です。重要であるかもしれない何

は、Windowsのヒープ割り当ては、一般的にLinuxの実装よりも高価であるということです。この相違の影響は、コードによって異なります。

+0

提案していただきありがとうございます。私はgcc 4.5.3を使用してコンパイルしています。ウィンウィングはうまくいくのだろうか? – cppcoder

+0

MinGWはCygwinのないGCCです。同じライブラリのMSVCリンク(ほぼ)にリンクしています。cygwinのDLLはなく、互換性コードもありません。 – rubenvb

0

rubenvbはあなたが本当にコードを見ずに言うことができない言うように - しかし:

メモリの量は何の意味もありません、それはcygwinのランチャーやOSのいずれかがちょうどmemeoryの多くを割り当てることを決定したということかもしれそのメモリは使用されていないため、cygwinジョブに渡します。 Cygwinアプリケーションによる将来のメモリ割り当てはより速くなります。 Linuxがメモリ使用量を報告する方法にも問題があります。それはオプトマティックな割り当てを行うため、メモリが実際にそのプロセスにロックされず、使用されるまでメモリが1Gbを使用すると表示されないというGbのメモリを割り当てた場合です。

Unixシステム上で非常に安価ですが、Windowsアーキテクチャ上で非常に遅いいくつかのタスクがあります。最も悪名高いが、Unixのアプリケーションでは非常に一般的ですが、コード、プログラムをコンパイルするために使用されるオプション、およびツールチェーンプログラムのバージョンを見ることなくWindowsの

+0

提案していただきありがとうございます。フォークはありません。プログラムは複数のファイルでかなり長いです。私は実行時の問題がどこにあるのかデバッグしていません。 Cygwinでは、プログラムは決して完了しません:( – cppcoder

+0

Windowsはフォークを持っていますか? – 01100110

+0

@ user1200129 - いいえ、cygwinが必要です!Fork()はCreateProcessです。遅いです –

関連する問題