-1

我的分配代码是

dat* data = NULL;
data = sbrk(SIZE);
if((int) data != -1){
   return data
}else{
  printf("Not enough space");
}

sbrk(...) 函数返回一个有效地址 (0x603021) 但是当我进入 gdb 并打印 sbrk(0) 时,我得到了十六进制值 0xffffffff8060341。经过数学计算,我发现指针 0x8060341 应该是 sbrk(0)。前面的字母f(即0xfffff...)从何而来?

4

1 回答 1

1

gdb 向您显示内存段的完整 64 位地址。十六进制的 64 位地址需要总共 16 个十六进制数字 (0-9,AF) 才能完全指定。从每位数 64 位/4 位 = 16。

如果您看到的更少,那是因为编辑器正在截断内存地址的前 32 位(8 个十六进制数字),只显示剩余的或更低的 8 个。这是 32 位计算世界的遗留问题,其中 8 个十六进制数字足以完全指定内存地址。

于 2017-03-07T01:21:07.680 回答