1

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

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

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

我打算将“size_t”替换为“unsigned long long”,这样它的大小在 32 位和 64 位上将相同。

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


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

4

1 回答 1

3

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

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

无论您选择什么类型,使用 typedef 给它一个有意义的名称(例如 shared_memory_address)是明智的,并始终使用该名称。这样,您可以稍后根据需要更改基础类型。

于 2012-09-23T22:39:20.550 回答