ホームページ >ウェブフロントエンド >CSSチュートリアル >静的再配置は正確にいつ行われるのでしょうか?

静的再配置は正確にいつ行われるのでしょうか?

PHPz
PHPzオリジナル
2023-12-28 16:00:581256ブラウズ

静的再配置は正確にいつ行われるのでしょうか?

静的再配置が発生する具体的な瞬間は、プログラムがロードされるときです。静的再配置とは、プログラムの実行前に、プログラム内の絶対参照アドレスを実際の物理メモリ アドレスに変換するプロセスを指します。最新のオペレーティング システムでは、静的再配置はプログラムのロード時にリンカによって完了します。

具体的なコード例は次のとおりです。

#include <stdio.h>

// 全局变量,需要进行静态重定位
int global_var = 10;

// 静态函数,也需要进行静态重定位
static void static_func()
{
    printf("This is a static function.
");
}

int main()
{
    printf("Before relocation:
");
    printf("Global variable: %p
", &global_var);
    printf("Static function: %p
", &static_func);

    // 程序加载后进行静态重定位
    // 在这里进行具体的重定位操作

    printf("
After relocation:
");
    printf("Global variable: %p
", &global_var);
    printf("Static function: %p
", &static_func);

    return 0;
}

上記のコードでは、グローバル変数 global_var と静的関数 static_func の両方が必要です。静的に再配置されます。 main 関数では、最初にこれら 2 つの変数と関数のアドレスを出力し、次にプログラムがロードされた後に特定の静的再配置操作を実行し、最後にこれら 2 つの変数と関数のアドレスを再度出力します。

静的再配置の具体的なプロセスはオペレーティング システムによって異なりますが、通常は次の手順が含まれます。

  1. プログラムがロードされるベース アドレス (ベース アドレス) を決定する。
  2. プログラムの実行可能ファイルをスキャンし、すべての絶対参照を見つけます。
  3. 絶対参照を実際の物理メモリ アドレスに変換します (再配置)。
  4. プログラムのメモリ マッピング テーブルを更新し、絶対参照アドレスを実際の物理メモリ アドレスに置き換えます。

上記の手順を完了すると、プログラム内の絶対参照が実際の物理メモリ アドレスに正常に変換され、プログラムが正常に実行できるようになります。

静的再配置はプログラムのロード時に行われるため、プログラムの開始時に 1 回だけ行われることに注意してください。プログラムの実行中に、動的ロードおよびリンク操作が関与する場合、動的再配置の概念が関与する可能性があります。

以上が静的再配置は正確にいつ行われるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。