0

以下のCプログラムを書きました。

int main() {
  int i = 3;
  char *q = "hello";
  char *p = NULL;
  return 0;
}

gdbでコンパイルしてデバッグすると、次のreg情報が得られます..

gcc main.c -g
gdb a.out

info reg:
cs  0x33   51
ss  0x2b   43
ds  0x0    0

私の質問は、ds0の場合、どのくらい整数ichar* q、物理アドレスを取得していますか?

4

2 に答える 2

1

これはコンパイラに依存します。データ セグメントは、プログラムの仮想アドレス空間の一部であり、プログラマによって初期化されるグローバル変数と静的変数が含まれます。デフォルトでゼロに初期化されるグローバルおよび静的に割り当てられたデータは、プロセスの BSS 領域と呼ばれます。ヒープは、動的メモリ (malloc()、calloc()、realloc() および new – C++ によって取得される) が発生する場所です。. スタック セグメントは、ローカル (自動) 変数が割り当てられる場所です。したがって、i、p、q はスタック セグメントに格納されます。コード セグメントには、コンパイルされたプログラムが含まれます。RO (読み取り専用) セグメントには、「Hello」のような定数文字列が含まれます

于 2013-04-22T02:53:13.947 に答える
0

ここで i と q は main 関数のスタックの一部です。コンパイル後、それらはスタック上のアドレスに要約されます。したがって、それらはデータ セグメントの一部にはなりません。

于 2013-04-22T07:50:21.620 に答える