変数と関数に「静的」プレフィックスを追加するのをいつも忘れているため、GCC はそれらを extern としてマークします。デフォルトですべてを静的にマークするように、この動作を変更することは可能ですか。また、実行時に 2 つの型の間にパフォーマンスの違いはありますか?それとも形式的なものですか?
2 に答える
デフォルトですべてを静的にマークするように、この動作を変更することは可能ですか。
私の知る限りではありません。
また、実行時に 2 つの型の間にパフォーマンスの違いはありますか?それとも形式的なものですか?
はい、gcc
オブジェクトまたは関数がstatic
指定されている場合、さらに最適化を実行できます。たとえば、gcc
(でも) は、一度だけ呼び出される指定された関数を-O0
インライン化します。static
まず第一に、extern
修飾子はデフォルトではありません。その修飾子は、言及された項目が別のコンパイル単位で定義されることを示しているため、グローバル変数などを宣言する場合にのみ適しています。
このデフォルトをキャンセルするモディファイアstatic
がないため、モディファイアをデフォルトにする方法はありません。dynamic
そのため、そのデフォルトで動作するコードを記述する方法はありません。すべての関数と変数は にstatic
なり、コンパイラは空の出力ファイルを生成します!
実行時の 2 つの型のパフォーマンスの違いはありますか?それともより形式的なものですか?
コンパイラはstatic
、動的なものでは実行できない関数と変数に対していくつかの最適化を実行できます。特に、static
参照されることのない関数と変数は完全に削除される可能性があり、static
関数はより積極的にインライン化できます。