2012-03-28 6 views
2

私は主な機能を持っているなら、例えば10K行。 2.5k回線で4つの機能を持つのは遅いですか?または、関数はコードの明瞭度などの美的理由のためだけですか?大きいサイズのメインはプログラムを遅くするつもりですか?

+3

それだけではありませんが、メタ推論によれば、10k-loc関数を書く人は、おそらく最高品質のコードを書かなかったでしょう。 –

+0

[Atomiq](http://getatomiq.com/)のようなツールを実行し、それらの大きな機能にいくつのDRY違反があるかを調べることは面白いかもしれません。 – Tod

答えて

12

1つの関数にオーバーヘッドを呼び出す関数はありません。これは現代的なハードウェアでは極小ですが、4つの関数を持つソリューションでは関数呼び出しのペナルティが発生します。

しかし、あなたのコードを維持する次の人は、あなたを狩り、10Kラインの機能を1つとか、4つの2.5Kラインの機能を持っているとあなたを殺します。

機能をすることになっている:

  • は、単一の作業単位を実行して、単一の責任を負っています。
  • コードを繰り返します。
  • モジュール化コード。

これらの10K行のうち、何行が同じ行に何度もコピーアンドペーストされていますか?

+2

+1。私のチームは、私たちのチームが13キロ以上の「goto」を持つ5K行の「メイン」プログラムをスピードアップする任務を遂行したときに、私が殺したことを知っています。コードは非常に脆弱であったため、*変更しようとすると*壊れてしまいました。正確さのためのコード、メンテナンス性の秒、そしてスピード...それの後のどこか。 –

5

コードは非常に馬鹿げて巻き込まれてしまい、実行時にぎこちなく停止するようなエラーであることを間違いなく維持することになるので、よりゆっくり実行されます。

0

大きな建物を作りたいというシナリオを想像してみてください。あなたは一人で仕事をしなければなりません...あなたが何をしているのかを簡単に知ることができます。しかし、あなたが建物で働くのを止めると、仕事をするために他の人が任命されます...彼は地獄にいるでしょう...

同様に、あなたの仕事だけで十分な時間を取るのに役立ちます。あなたのグループの新しいメンバーを任命し、あなたのために仕事をさせてください...

機能を使用すると、コードを読みやすく、保守しやすく、コンパイルされたサイズを小さくする良いチャンスですEXE。

いつものように、モジュール内で同じコードを複数回書き直すのではなく、同じ関数を繰り返し呼び出すことができます。

3

あなたはあなたにLinuxカーネルのコーディングスタイルから、このアドバイスにする必要があります:関数は短いと甘いこと、そしてただ一つのことを行う必要があります彼らは、テキストの1または2画面分の フィット(ISOべき」

を。/ANSIの画面サイズは80x24、 です)、1つのことを行い、それをうまく行います。

http://www.kernel.org/doc/Documentation/CodingStyle

+0

+1私のすべてのコーディングのベースとしてその文書を使用します。 – Morpfh

0

それは依存します。理論的には、すべてのコードを単一の関数に入れると、関数呼び出しのオーバーヘッドが減少します。まともに書かれたコードを持つ現代のプロセッサでは、それは通常はかなり低いです。

もう1つの方向では、そのサイズの関数がキャッシュの使用率を比較的低くする可能性はかなり高いです。関数呼び出しのオーバーヘッドとは異なり、頻繁にキャッシュの使用です。メインメモリへの参照は、通常、キャッシュへの参照よりも少なくとも15〜20倍遅くなるため、キャッシュの使用率がかなり改善されても速度はかなり向上する可能性があります。

この2つの間の不均衡を考えれば、より慎重な因数分解でより小さな関数に分割すると速度が向上する可能性が非常に高いです。

関連する問題