the*_*row 14 language-agnostic memory hex
每当我看到C程序直接引用内存中的特定位置(例如内存屏障)时,它都是用十六进制数字完成的,当你得到一个segfualt时它也会在windows中显示内存被十六进制数字分段化.
例如:*(0x12DF)
我想知道为什么使用十六进制数字表示内存地址?
这有什么特别的原因还是只是一个惯例?
Jim*_*wis 22
内存通常根据较大的单位进行操作,例如页面或段,其大小通常为2的幂.因此,如果地址以十六进制表示,则更容易将它们作为页面+偏移或类似结构读取.十进制是困难的,因为那个讨厌的因子是5,并且二进制地址太长而不易读.
惯例和便利:十六进制更清楚地显示了各种指针必须解决的分段关系.(例如,共享库通常加载在偶数十六进制边界上,数据段同样位于偶数边界.)DEC小型机惯例实际上更喜欢八进制,但IBM的十六进制偏好在实践中胜出.
(至于为什么这很重要:什么更容易记住,0xb73eb000或者3074338816?它是我当前shell中的一个共享对象的地址jinx.)