百科问答小站 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 网友的相关建议: 
      

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

建议专业机构给予支援。




  

相关话题

  严格的说,「各诸侯(国)」的用法正确吗? 
  有什么字单独拿出来不容易认出来,放到词语里一下就认出来的? 
  Freedom 和 Liberty 都有「自由」的意思,它们在含义和用法上有什么区别? 
  5是一个已知数,设5=x或者x=5,这两个表达的意思在数学和语文表达正确吗? 
  黑胶唱片的音质和 CD 的音质哪一个更好?为什么? 
  Freedom 和 Liberty 都有「自由」的意思,它们在含义和用法上有什么区别? 
  intptr_t和uintptr_t的区别是什么?为什么需要带符号的intptr_t? 
  鼎、斝、簋、卣、觚、尊、鬲、爵……这些青铜器皿有什么区别? 
  是「纹身」还是「文身」? 
  大学生考驾照价格 2888 和 5000 的区别是什么? 

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





© 2024-06-03 - tinynew.org. All Rights Reserved.
© 2024-06-03 - tinynew.org. 保留所有权利