相关疑难解决方法(0)

x86,x32和x64架构之间的区别?

请解释一下之间的区别x86,x32和x64?它有点令人困惑x86,x32因为大多数时候32位程序在x86上运行...

architecture 64-bit intel

49
推荐指数
3
解决办法
11万
查看次数

指针的大小和体系结构

通过在普通台式PC上运行简单的C ++程序进行基本测试,似乎可以假设任何类型的指针(包括函数指针)的大小等于目标体系结构位的大小。

例如:在32位体系结构中-> 4个字节,在64位体系结构中-> 8个字节。

但是我记得读过的话,它不是一般的那样!

所以我想知道这种情况会怎样?

  • 为了使指向数据类型的指针的大小与指向其他数据类型的指针的大小相等
  • 为了使指向数据类型的指针的大小与指向函数的指针的大小相等
  • 为了使指向目标体系结构的指针大小相等

c c++ assembly portability

17
推荐指数
6
解决办法
2140
查看次数

在64位指针中使用额外的16位

我读到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个字节用于密钥(由于对齐限制),可以将密钥嵌入到指针中.

64-bit pointers x86-64 memory-access

6
推荐指数
3
解决办法
4559
查看次数

POINTER_32 - 它是什么,为什么?

我刚刚被赋予了将遗留应用程序从32位更新到64位的任务.在查看任务的范围时,我在包含外部(例如平台)标头之前立即发现了以下定义:

#define POINTER_32
Run Code Online (Sandbox Code Playgroud)

我找不到使用这个定义或它有什么效果的东西,但它看起来像是与我的任务直接相关的东西!

它是为了什么?有什么用?立即将其移除是否安全(我认为从长远来看有必要将其移除)?

这是使用MS VC++ 2008,很快将是2010年.

c++ 32bit-64bit visual-c++

4
推荐指数
1
解决办法
2289
查看次数