__attribute__((constructor)) と __attribute__((destructor)) の仕組み
__attribute__((constructor)) がいつ行われるかRun?
この属性は、共有ライブラリがロードされるとき、通常はプログラムの起動時に実行されます。
なぜ 2 つの括弧があるのですか?
すべて GCC属性はこの構文に従いますが、これはおそらく関数と区別するためです。
属性の性質
属性 は、関数や関数ではなく、GCC 固有の構文です。マクロ。
互換性
__attribute__((constructor)) と __attribute__((destructor)) は C と C の両方で動作します。
関数静的要件
__attribute__((constructor)) および __attribute__((destructor)) で属性付けされた関数は静的である必要はありません。
__attribute__((destructor)) 実行Time
デストラクター共有ライブラリがアンロードされるとき (通常はプログラムの終了時) に実行されます。
コンストラクターとデストラクターの仕組み
共有オブジェクト ファイルには、参照する特別なセクション (.ctors および .dtors) が含まれています。コンストラクター属性とデストラクター属性でマークされた関数。ダイナミック ローダーは、ライブラリのロードおよびアンロード中にこれらの関数を呼び出します。同様のメカニズムが、起動とシャットダウンの両方の静的リンカーに存在します。
以上が`__attribute__((constructor))` と `__attribute__((destructor))` は C/C でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。