0

変数と関数に「静的」プレフィックスを追加するのをいつも忘れているため、GCC はそれらを extern としてマークします。デフォルトですべてを静的にマークするように、この動作を変更することは可能ですか。また、実行時に 2 つの型の間にパフォーマンスの違いはありますか?それとも形式的なものですか?

4

2 に答える 2

5

デフォルトですべてを静的にマークするように、この動作を変更することは可能ですか。

私の知る限りではありません。

また、実行時に 2 つの型の間にパフォーマンスの違いはありますか?それとも形式的なものですか?

はい、gccオブジェクトまたは関数がstatic指定されている場合、さらに最適化を実行できます。たとえば、gcc(でも) は、一度だけ呼び出される指定された関数を-O0インライン化します。static

于 2013-01-23T22:47:29.917 に答える
1

まず第一に、extern修飾子はデフォルトではありません。その修飾子は、言及された項目が別のコンパイル単位で定義されることを示しているため、グローバル変数などを宣言する場合にのみ適しています。

このデフォルトをキャンセルするモディファイアstaticがないため、モディファイアをデフォルトにする方法はありません。dynamicそのため、そのデフォルトで動作するコードを記述する方法はありません。すべての関数と変数は にstaticなり、コンパイラは空の出力ファイルを生成します!

実行時の 2 つの型のパフォーマンスの違いはありますか?それともより形式的なものですか?

コンパイラはstatic、動的なものでは実行できない関数と変数に対していくつかの最適化を実行できます。特に、static参照されることのない関数と変数は完全に削除される可能性があり、static関数はより積極的にインライン化できます。

于 2013-01-23T22:54:30.307 に答える