为什么使用十六进制数表示内存地址?

the*_*row 14 language-agnostic memory hex

每当我看到C程序直接引用内存中的特定位置(例如内存屏障)时,它都是用十六进制数字完成的,当你得到一个segfualt时它也会在windows中显示内存被十六进制数字分段化.
例如:*(0x12DF)
我想知道为什么使用十六进制数字表示内存地址?
这有什么特别的原因还是只是一个惯例?

Jim*_*wis 22

内存通常根据较大的单位进行操作,例如页面或段,其大小通常为2的幂.因此,如果地址以十六进制表示,则更容易将它们作为页面+偏移或类似结构读取.十进制是困难的,因为那个讨厌的因子是5,并且二进制地址太长而不易读.

  • 值得注意的是,即使在没有任何虚拟存储器概念的系统中,硬件本身也会在很长一段时间内将存储器分成几个区域,这些区域的大小和边界要么是两倍或小倍的倍数(例如标准VIC-20有8个) -db RAM来自0x0000-0x03FF和0x1000-0x1FFF,以及来自0x9400-0x97FF的4位RAM). (3认同)

Bin*_*x1n 8

它是一种更短的方式来表示本来用二进制写的东西.将十六进制转换为二进制和返回也非常好且容易.二进制的每4个数字对应于十六进制的一个数字.


gee*_*aur 6

惯例和便利:十六进制更清楚地显示了各种指针必须解决的分段关系.(例如,共享库通常加载在偶数十六进制边界上,数据段同​​样位于偶数边界.)DEC小型机惯例实际上更喜欢八进制,但IBM的十六进制偏好在实践中胜出.

(至于为什么这很重要:什么更容易记住,0xb73eb000或者3074338816?它是我当前shell中的一个共享对象的地址jinx.)