相关疑难解决方法(0)

带有x86-64 ISA的32位指针:为什么不呢?

x86-64指令集添加了更多寄存器和其他改进,以帮助简化可执行代码.但是,在许多应用中,增加的指针大小是一种负担.每个指针中额外的未使用字节会阻塞缓存,甚至可能溢出RAM.例如,GCC使用-m32标志构建,我认为这就是原因.

可以加载32位值并将其视为指针.这不需要额外的指令,只需加载/计算32位并从结果地址加载.但是,这个技巧不可移植,因为平台有不同的内存映射.在Mac OS X上,保留了整个低4 GiB的地址空间.尽管如此,对于我编写的一个程序,0x100000000L在使用改进的性能大大优于真正的64位地址或编译之前,仍坚持添加32位"地址" -m32.

使用32位x86-64平台有任何根本障碍吗?我认为支持这样的嵌合体会增加任何操作系统的复杂性,任何想要最后20%的人应该只是Make it Work™,但似乎这仍然是最适合各种计算密集型程序的.

performance 64-bit operating-system x86-64 32bit-64bit

10
推荐指数
2
解决办法
1012
查看次数

__ptr32 和 __ptr64 有什么意义?

正如这篇 MSDN 文章中所述,Microsoft 有这两种类型注释来声明不同体系结构上的本机指针。然而,在第二行:

在 32 位系统上,使用 __ptr64 声明的指针将被截断为 32 位指针。在 64 位系统上,用 __ptr32 声明的指针被强制为 64 位指针。

在我看来,声明并不重要;如果架构无论如何都会覆盖 __ptrXX 的默认声明,那么首先标记 __ptrXX 的意义何在?

我看到这个答案说它是为了互操作,但是如果声明基本上如上所述被覆盖,那么这对互操作有何帮助?

pointers visual-c++

8
推荐指数
1
解决办法
3596
查看次数

如何在Windows上检测X32?

X32允许用户使用在x86_64处理器上运行的32位整数,长整数和指针来编写程序.在某些使用案例中,使用X32有许多好处.(X32与X86或X64 不同 ; 有关详细信息,请参阅x86,x32和x64体系结构之间的差异).

一些Windows Enterprise Server似乎支持X32,但我无法找到更多信息.这是基于一些英特尔PDF,如基于英特尔®至强®处理器E5-2400系列的智能系统平台:

在此输入图像描述

微软关于预定义宏的文档列出了常见的嫌疑,比如_M_X64_M_AMD64.但它似乎没有讨论X32的架构选项.

如果Microsoft支持X32,那么我怀疑它将是一个类似于大地址空间感知或终端服务感知的选项.

Microsoft 实际上是否支持X32(而不是X86和X64)?

如果是这样,我如何确定何时在Windows下选择X32?

如果没有,那么为什么英特尔专门为Windows推出X32平台呢?

windows abi 32bit-64bit c-preprocessor linux-x32-abi

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