请解释一下之间的区别x86,x32和x64?它有点令人困惑x86,x32因为大多数时候32位程序在x86上运行...
通过在普通台式PC上运行简单的C ++程序进行基本测试,似乎可以假设任何类型的指针(包括函数指针)的大小等于目标体系结构位的大小。
例如:在32位体系结构中-> 4个字节,在64位体系结构中-> 8个字节。
但是我记得读过的话,它不是一般的那样!
所以我想知道这种情况会怎样?
我读到64位机器实际上只使用48位地址(具体来说,我使用的是英特尔酷睿i7).
我希望额外的16位(位48-63)与地址无关,并将被忽略.但是当我尝试访问这样的地址时,我收到了一个信号EXC_BAD_ACCESS.
我的代码是:
int *p1 = &val;
int *p2 = (int *)((long)p1 | 1ll<<48);//set bit 48, which should be irrelevant
int v = *p2; //Here I receive a signal EXC_BAD_ACCESS.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?有没有办法使用这16位?
这可用于构建更多缓存友好的链表.不是将8个字节用于下一个ptr,而是将8个字节用于密钥(由于对齐限制),可以将密钥嵌入到指针中.
我刚刚被赋予了将遗留应用程序从32位更新到64位的任务.在查看任务的范围时,我在包含外部(例如平台)标头之前立即发现了以下定义:
#define POINTER_32
Run Code Online (Sandbox Code Playgroud)
我找不到使用这个定义或它有什么效果的东西,但它看起来像是与我的任务直接相关的东西!
它是为了什么?有什么用?立即将其移除是否安全(我认为从长远来看有必要将其移除)?
这是使用MS VC++ 2008,很快将是2010年.
64-bit ×2
c++ ×2
32bit-64bit ×1
architecture ×1
assembly ×1
c ×1
intel ×1
pointers ×1
portability ×1
visual-c++ ×1
x86-64 ×1