1

コンピュータの文献では、一般的に可能な限り短い関数を書くことが推奨されています。私はそれが読みやすさを向上させるかもしれないことを理解しています(常にではありませんが)、そしてそのようなアプローチはまたより多くの柔軟性を提供します。しかし、それは最適化とも関係がありますか?つまり、コンパイラにとって、いくつかの大きなルーチンではなく、一連の小さなルーチンをコンパイルすることは重要ですか?

ありがとう。

4

2 に答える 2

7

それはコンパイラに依存します。古いコンパイラの多くは、一度に 1 つの関数しか最適化しなかったため、より大きな関数 (ある制限まで) を作成すると、最適化が改善されますが、(ほとんどのコンパイラでは) その制限を超えると、最適化が完全に無効になります。

合理的に最新のコンパイラのほとんどは、関数のインライン コードを生成でき (C99 はinelineそれを容易にするためにキーワードを追加しました)、グローバル (クロス関数) 最適化を実行できます。この場合、通常はまったく違いはありません。

于 2012-04-25T19:44:57.337 に答える
1

@ twain249 と @ Jerry はどちらも正しいです。プログラムを複数の関数に分割すると、パフォーマンスに悪影響を及ぼす可能性がありますが、コンパイラが関数をインライン コードに最適化できるかどうかによって異なります。

確実に知る唯一の方法は、プログラムのアセンブラー出力を調べて、プロファイリングを行うことです。たとえば、特定のコード パスがパフォーマンスの問題を引き起こしていることがわかっている場合、アセンブラを調べて、呼び出されている関数の数、パラメータがスタックにプッシュされている回数などを確認できます。小さな機能を 1 つの大きな機能に統合したい場合があります。

これは私にとって過去の懸念事項でした.組み込みプロジェクトの非常に厳密な最適化を行っているため、特にタイトなループでは、関数呼び出しの数を意識的に削減しようとしました。ただし、これにより、場合によっては数ページの長さの、見苦しい関数が生成されます。このメンテナンス コストを軽減するために、マクロを使用できます。私はこれを大いに活用して、読みやすさを維持しながら関数呼び出しがないようにしています。

于 2012-04-25T19:50:15.023 に答える