为什么数据段(ds)为0? event其他合法变量(整数)就在那里

时间:2013-04-22 01:40:30

标签: c linux null

我写了以下C程序。

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

当我使用gdb编译和调试它时,我得到以下注册信息..

gcc main.c -g
gdb a.out

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

我的问题是如果ds为0,整数ichar* q如何获取其实际地址?

2 个答案:

答案 0 :(得分:1)

这是编译器相关的。数据段是程序虚拟地址空间的一部分,它包含由程序员初始化的全局变量和静态变量。默认情况下初始化为零的全局和静态分配数据在所谓的进程的BSS区域。堆是动态内存(由malloc(),calloc(),realloc()和new - C ++获得)的地方。 。堆栈段是分配本地(自动)变量的位置。所以我,p和q存储在堆栈段中。代码段包含已编译的程序。 RO(只读)段包含常量字符串,如“Hello”

答案 1 :(得分:0)

这里我和q是主函数堆栈的一部分。编译后,它们可归结为堆栈中的地址。因此,它们不会成为数据部分的一部分。