gpt4 book ai didi

c++ - 移至 64 位操作系统时共享内存性能降低

转载 作者:可可西里 更新时间:2023-11-01 10:09:28 25 4
gpt4 key购买 nike

我遇到了在 64 位 Windows 上运行的 32 位旧版应用程序的问题。有问题的应用程序使用 CreateFileMapping 创建共享内存。当它在 64 位 Windows 上运行时,任何从另一个进程访问此共享内存的尝试都需要大约 1 秒。共享内存是使用页面保护标志创建的:

flProtect = PAGE_READONLY | SEC_NOCACHE | SEC_COMMIT;

当使用以下方法创建相同的内存时:

flProtect = PAGE_READONLY | SEC_COMMIT;

问题消失了。目前这种解决方法是可以接受的,但我们确实有一些设备需要设置 SEC_NOCACHE 标志。

谁能告诉我为什么在这种情况下 SEC_NOCACHE 会影响性能?

更新:好像只写这个buffer就增加到1000ms了。阅读似乎没有受到影响。这次我们正在向缓冲区写入大约 5MB。

更新 2:此软件在许多系统上使用,其中一个系统的物理设备需要使用此标志。我们目前仅限于在 32 位 Windows 中使用此设备运行机器。

最佳答案

这是Microsoft不得不说一下那个标志:

The SEC_NOCACHE flag is intended for architectures that require various locking structures to be located in memory that is not ever fetched into the CPU cache. On x86 and MIPS machines, use of this flag just slows down the performance because the hardware keeps the cache coherent.

不幸的是,他们没有量化减速的程度。

关于c++ - 移至 64 位操作系统时共享内存性能降低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3637318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com