注册 登录
编程论坛 C++教室

请教一个关于64 bit变量地址输出的问题

lulu9928 发布于 2012-09-20 02:09, 693 次点击
code如下:
int x = 1;
cout << &x <<endl;

在32 bit情况下输出的地址是0xbffff8cc, 这个我可以理解。可是当我在Macbook的xcode里面运行时(64 bit architecture),输出地址为0x7fff5fbff86c. 我不明白的是64 bit时0x后面不应该有64/4=16位吗?为什么是12位?还是我对概念理解错了?

另外我试过sizeof(&x). 32 bit是4, 64 bit是8. 而0x7fff5fbff86c的size是6啊。
多谢!

[ 本帖最后由 lulu9928 于 2012-9-20 02:19 编辑 ]
5 回复
#2
眼底星空2012-09-20 13:13
    64 bit时0x后面不应该有64/4=16位吗?为什么是12位?这是啥意思。。
    你是说0x7fff5fbff86c是12位,那按照这个说法, 0x1是1位,0x01是2位,0x001就是3位?
    0x7fff5fbff86c的size是6,又是怎么来的。。
    真心不懂你是怎么理解位,size的。

    sizeof是和编译器有关的。  
    一般按大家的说法,多数编译器在32位和64位机上,就是在long和指针变量上长度有区别,这两个类型,32位上为4,64位上为8。
    没有具体操作过,你可以试下。
   
   
#3
lulu99282012-09-21 02:02
回复 2楼 眼底星空
可能我用词不准确,我指的是0x后面的字符个数。我理解64 bit应该是用64/8=8bytes储存一个地址的,所以0x后面应该有16个字符,实际上只有12个,这就是我不明白的地方。
另外我用sizeof(&x)测试的不是x变量的data type size而是储存地址的size.
#4
lulu99282012-09-21 02:09
又搜了一下,在wiki上找到了相关解释:
Larger physical address space: The original implementation of the AMD64 architecture implemented 40-bit physical addresses and so could address up to 1 TB (240 bytes) of RAM.(p24) Current implementations of the AMD64 architecture (starting from AMD 10h microarchitecture) extend this to 48-bit physical addresses and therefore can address up to 256 TB of RAM.
#5
pangding2012-09-21 11:42
4楼 正解。
intel80x64 的架构就地址空间只有48位,最多能寻256T,硬件决定的。
#6
pangding2012-09-21 20:32
原来是楼主 自己动手,丰衣足食。而且找到答案还来回馈论坛,值得嘉奖。
1