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

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

建议专业机构给予支援。




  

相关话题

  如果用两个字 来形容生活 你想说什么? 
  有什么字单独拿出来不容易认出来,放到词语里一下就认出来的? 
  intptr_t和uintptr_t的区别是什么?为什么需要带符号的intptr_t? 
  作曲和编曲有什么区别? 
  汤圆和元宵有什么区别? 
  掷弹兵和普通步兵有什么区别? 
  如果《阿房宫赋》其中的虚写、夸张的内容都是真的,那么阿房宫会是一幅怎么样的景象? 
  中国女生与外国的女生有什么区别? 
  声与振动领域,除了BK和GRAS还有哪些,还有哪些测量系统厂家?国内的有哪些? 
  5是一个已知数,设5=x或者x=5,这两个表达的意思在数学和语文表达正确吗? 

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





© 2024-05-15 - tinynew.org. All Rights Reserved.
© 2024-05-15 - tinynew.org. 保留所有权利