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

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

建议专业机构给予支援。




  

相关话题

  声与振动领域,除了BK和GRAS还有哪些,还有哪些测量系统厂家?国内的有哪些? 
  怎么形容你现在的状态? 
  intptr_t和uintptr_t的区别是什么?为什么需要带符号的intptr_t? 
  咬文嚼字回应「年度流行语为何不选 yyds」,称「字母词不是纯正的汉语符号」,对此你支持吗? 
  天使投资、VC 以及 PE 的区别是什么? 
  作曲和编曲有什么区别? 
  软卧和硬卧的区别是什么? 
  绿茶粉和抹茶有什么不同? 
  什么时候应该叫 Wi-Fi,什么时候叫 WLAN 呢? 
  咬文嚼字回应「年度流行语为何不选 yyds」,称「字母词不是纯正的汉语符号」,对此你支持吗? 

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





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