百科问答小站 logo
百科问答小站 font logo



intptr_t和uintptr_t的区别是什么?为什么需要带符号的intptr_t? 第1页

  

user avatar   haozhi-yang-41 网友的相关建议: 
      

在通常意义上,没什么本质上的区别。

但真要细究的话,指针类型虽然是平台实现相关,但在某些平台上的定义或者操作会更接近于有符号类型:

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),那就需要考虑这里面的差异了。


user avatar   pansz 网友的相关建议: 
      

这个问题透着一股邪乎味儿,怎么看怎么危险啊……

建议专业机构给予支援。




  

相关话题

  用一个词来形容自己最大的优点,你会是什么? 
  汤圆和元宵有什么区别? 
  「弊司」还是「敝司」,谦词该用哪个bì? 
  是「纹身」还是「文身」? 
  怎么形容你现在的状态? 
  Freedom 和 Liberty 都有「自由」的意思,它们在含义和用法上有什么区别? 
  「教育」与「洗脑」本质上有什么区别? 
  用一个词来形容自己最大的优点,你会是什么? 
  什么时候应该叫 Wi-Fi,什么时候叫 WLAN 呢? 
  汉堡包和三明治的区别是什么? 

前一个讨论
如何看待杭州浙医一院血透室爆燃事件?嫌疑人为什么会盯上血透室?
下一个讨论
女子离婚调解期内遭丈夫连砍数刀身亡,生前多次被家暴,曾被威胁「要离婚就毁掉你」,该如何保护被家暴者?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利