0

I wrote the following C program.

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

When I compile and debug it with gdb, I get the following reg information..

gcc main.c -g
gdb a.out

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

My question is if ds is 0, how integer i and char* q are getting their physical address?

4

2 回答 2

1

这取决于编译器。数据段是程序虚拟地址空间的一部分,其中包含由程序员初始化的全局变量和静态变量。默认初始化为零的全局和静态分配的数据保存在称为进程的 BSS 区域。堆是动态内存(由 malloc()、calloc()、realloc() 和 new – C++ 获得)的来源。. 堆栈段是分配本地(自动)变量的地方。所以 i , p 和 q 存储在堆栈段中。代码段包含已编译的程序。RO(只读)段包含常量字符串,如“Hello”

于 2013-04-22T02:53:13.947 回答
0

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

于 2013-04-22T07:50:21.620 回答