gpt4 book ai didi

c++ - 如何使应用程序具有大地址感知能力?

转载 作者:IT老高 更新时间:2023-10-28 22:35:33 26 4
gpt4 key购买 nike

我目前正在制作我们的应用程序大地址感知。经验表明,这样做时会遇到一些意想不到的问题。我创建这篇文章是为了列出需要采取的步骤。

AMD Large Address Aware guide 中列出的开发注意事项提供了一个很好的起点,但绝不是完整的:

The following considerations will help to make sure that the code can handle addresses larger than 2GB:

  • Avoid the use of signed pointer arithmetic (I.e. compares and adds)
  • Pointers use all 32-bits. Don’t use Bit31 for something else.
  • Some dll’s will be loaded just under the 2GB boundary. In this case, no consecutive memory can be allocated with VirtualAlloc().
  • Whenever possible, use GlobalMemoryStatusEx() (preferred) or GlobalMemoryStatus() to retrieve memory sizes.

因此,问题是:在制作 C++ Win32 native 应用程序大地址感知时需要做的事情的完整列表是什么?

最佳答案

  • (很明显)在项目属性中选择支持大于 2 GB 的地址(/LARGEADDRESSAWARE):链接器/系统/启用大地址
  • 检查所有指针减法并验证结果是否存储在可以包含可能差异的类型中,或者用比较或其他构造替换它们 - 参见 Detect pointer arithmetics because of LARGEADDRESSAWARE )。注意:指针比较应该没问题,与 AMD 的建议相反,它没有理由导致 4 GB 问题
  • 确保您没有假设指针的 Bit31 为零,请勿尝试将 Bit31 用于其他用途。
  • 用 GetCursorInfo 替换所有 GetCursorPos 调用 - 参见 GetCursorPos fails with large addresses
  • 对于 PVOID64 中的所有分配,使用 PtrToPtr64,例如需要使用 ReadFileScatter 时,请参阅 ReadFileScatter remark section

关于c++ - 如何使应用程序具有大地址感知能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109543/

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