2016-03-22 9 views
0

私のプロジェクトでは、私のヘッダーファイルで定義されているいくつかの "インタフェース"関数があります。しかし、私は同じソースファイル内でのみ使用されるより多くの機能を持っています。したがって、どのヘッダファイルにも関数宣言はありません。Cソースファイル内のすべての関数をインラインで

inlineと宣言することをお勧めしますか?インライン関数はパフォーマンスが優れているので、私には良いアイデアのように思えます。または何か欠点がありますか?私は、実行可能ファイルのサイズが大きくなる可能性がありますが、これは私にとっては大丈夫です。

+6

「静的」として宣言することをお勧めします。 – LPs

答えて

4

異なる翻訳単位で共有されていないローカル関数は、staticとして修飾する必要があります。
inline指定子は、可能であれば関数をインライン化するようにコンパイラに指示しますが、インライン化は行いません。コンパイラが関数をインライン化する必要がある場合は、インライン展開を強制するには、forceinlineまたは__forceinlineを使用します。
インライン関数では、常に最適な解決方法とは限りません。コードの全体的なパフォーマンスを慎重にチェックする必要があります。インライン化プロセスは、呼び出しコードの中で関数のコードをマージします。これは、主実行を妨害することなく計算を実行するために、レジスタの利用可能性を必要とする。レジスタスウォッチのプロセスでは、コードの全体的な効率を低下させる可能性のある現在の値などを一時的に格納する必要があります。
インライン化は、短いプロセスであり、メインコード内での実行に必要な時間がコールのプロローグとエピローグに必要な時間よりも短い場合に有効です。

3

お気軽にstatic inlineとタグ付けしてください。

inlineと表示された機能がである必要はありません。インラインです。コンパイラがインライン化するかどうか判断するのはコンパイラに委ねられています。最新のコンパイラは十分に「賢い」ので、コンパイラに決定を下してください。これは信頼できるものです。

3

inlineは、コンパイラのヒントです。 inlineを指定すると、コンパイラはそのヒントを尊重しないことを選択することがあります。 inlineを指定しない場合、コンパイラは関数をインライン展開することを選択することがあります。

6.7.4 (p6) in the C11 Standardを参照してください。

+0

'' inline'を指定するかどうかは実際に違いがありますか? –

+0

@ThomasSparber 'inline'を追加することで、コンパイラに提案します。その提案がなければ、機能はインラインでは作成されません。 –

関連する問題