移植 - 共享内存x32& x64进程

时间:2012-09-23 20:21:42

标签: windows winapi porting

32位主机Windows应用程序设置共享内存(使用内存映射文件/ CreateFileMapping()API),然后其他32位客户端进程使用此共享内存相互通信。

我打算将主机应用程序移植到64位平台,一旦准备就绪,我打算32位和64位客户端进程应该能够使用主64位主机应用程序的共享内存设置。 / p>

为主机x32应用程序编写的原始代码几乎在任何地方使用“size_t”,因为当我们从x32移动到x64时,这从4个字节到8个字节不同,我正在寻找替换它。

我打算用“unsigned long long”替换“size_t”,这样它的大小在32位& 64位。

你能建议我更好的选择吗? 另外,使用“unsigned long long”会对x32应用程序产生性能影响吗?我想是吗?


研究完成 - 找到非常有用的文章 - a)从32位移植到64位的20个问题(www.viva64.com) b)无法使用编译器标志或任何钩子/骗子将x64平台上的“size_t”限制/更改为4个字节,因为它是typedef

1 个答案:

答案 0 :(得分:3)

使用64位变量通常会降低32位应用程序的速度。

但是:由于通常无法在所有进程中将共享内存定位在同一虚拟地址,因此您可能使用相对于共享内存块开头的地址;此外,由于您的应用程序将支持32位进程,因此共享内存块的大小可能小于4GB。那么为什么不使用unsigned int?

无论您选择哪种类型,使用typedef为其指定有意义的名称(例如shared_memory_address)并使用该名称一致是明智的。这样,如果需要,您可以稍后更改基础类型。