在通常意义上,没什么本质上的区别。
但真要细究的话,指针类型虽然是平台实现相关,但在某些平台上的定义或者操作会更接近于有符号类型:
In addition, the AMD specification requires that the most significant 16 bits of any virtual address, bits 48 through 63, must be copies of bit 47 (in a manner akin to sign extension).
翻译一下,AMD64平台上,虽然指针类型实际上只用到了低48bit,但是高16bit必须和第47bit相同(类似于有符号数的扩展)。这个“有符号数的扩展”,举例说明就是:-3在8bit时是0xFD,在16bit就是0xFFFD,在32bit上就是0xFFFFFFFD……
所以,实际上AMD64规范中,在实际操作上,就是把指针数值当作有符号数来处理的。
当然,这种差异在一般情况下没什么实际意义,在C/C++里面,有符号无符号相互转来转去的事多了。弄这么个东西,更多应该是考虑万一以后有个什么架构真的不同吧(虽然我挺怀疑会不会真的有)。
但是有些时候,如果要想节约内存,在存储指针的同时利用没实际用到的高16bit存点什么东西(例如说tagged pointer),那就需要考虑这里面的差异了。
这个问题透着一股邪乎味儿,怎么看怎么危险啊……
建议专业机构给予支援。