1

私は、Windows および Linux、32 ビットおよび 64 ビット用のビルドを含むプロジェクトに取り組んでいます。このプロジェクトは、テキスト ファイルの文字列を読み込んで処理し、結果を SQLite3 データベースに書き込むことに基づいています。

Linux では、最適化なしで GCC によってコンパイルされた、1 秒あたり約 400k シーケンスに達します。ただし、Windowsでは、最適化なしでVS2010でコンパイルされ、毎秒10万シーケンスでスタックします。

コンパイラで最適化を使用してみましたが、何も変わりませんでした。

これは正しいですか?Windows での C コードの実行速度は遅くなりますか?

編集:

いくつかの点でより明確にする必要があると思います。コードの最適化を有効にして無効にしてテストを行いました。おそらく私のプログラムのボトルネックは、HD からのデータの読み取りに無駄な時間がかかるためです。

このプログラムは、並列計算を利用しています。スレッドが処理されたデータをキューに入れるキューと、SQLite データベースに書き込むための別のデキューがあります。このようにして、これからパフォーマンスが低下することはないと思います。

4

1 に答える 1

2

これは正しいですか?Windows での C コードの実行速度は遅くなりますか?

いいえ、Cにはスピードがありません。速度を導入するのは C の実装です。Windows と Linux の両方で、高速な動作を生成する実装 (一般に「高速なマシン コードを生成するコンパイラ」) と低速な動作を生成する実装があります。

ここでも重要なのは Windows と Linux だけではありません。一部のコンパイラは、特定のプロセッサ向けに最適化し、他のプロセッサ向けに遅いマシン コードを生成します。

コンパイラで最適化を使用してみましたが、何も変わりませんでした。

最適化を有効にせずに速度をテストしても意味がありません。ただし、これは他の何かが遅いことを示している傾向があります。おそらく、Windows で SQLite3 クライアント用のライブラリ ファイルを生成した実装は、遅いコードを生成する実装です完全な最適化を有効にしてロット (SQLite3 ライブラリを含む) を再構築することから始めます。その後、プロファイラーを使用して違いがどこにあるかを判断し、その結果を使用してコードをインテリジェントに最適化することができます。

于 2013-06-02T14:59:12.727 に答える