地址窗口扩展

发布于 2024-12-02 15:41:41 字数 211 浏览 0 评论 0原文

我有一个 32 位应用程序,需要非常大的内存。

我注意到有一个名为 地址窗口扩展< /a>.

然而,我还没有找到太多关于如何使用它以及使用它时可能遇到哪些缺点和问题的信息?

I have an 32bit application with very large memory requirements.

I noticed that there is something called Address Windowing Extension.

However I haven't found much information in regards to how to use it and also what disadvantages and problems one might run into while using this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枯叶蝶 2024-12-09 15:41:41
  • 它不应该在 64 位 Windows 版本上运行(请阅读此处 http://msdn .microsoft.com/en-us/library/aa366778.aspx Intel和AMD的PAE规范确实支持x86-64架构,但微软的软件层PAE(API),称为 AWE,在 64 位版本的 Windows 上不受支持,因此 Windows Vista 64 位不能为 32 位应用程序分配超过 4 GiB 的 RAM。)。
  • 即使在 Windows 32 位上,可用内存量也有“许可证”限制(同一页面显示所有限制)。
  • 显然,编程很复杂:-) 就像在旧的 8086 上使用 EMS 一样。
  • It shouldn't work on versions of Windows at 64bits (read here http://msdn.microsoft.com/en-us/library/aa366778.aspx Intel and AMD's specification of PAE does support the x86-64 architecture but the software layer of Microsoft's PAE (the API), called AWE, is not supported on 64 bit editions of Windows, so Windows Vista 64 bit cannot attribute more than 4 GiB of RAM for a 32 bit application.).
  • Even on Windows 32 bits there is a "license" limit on the amount of memory usable (same page shows all the limits).
  • And clearly it's complex to program :-) It's like using EMS on the old 8086.
堇色安年 2024-12-09 15:41:41

事实上,您可以在 64 位 Windows 操作系统中运行的 32 位应用程序中使用 AWE,并且不需要 PAE。例如MS SQL Server(2012版本之前)可以配置为这种模式。

但除非您有非常具体的要求,否则移植到 64 位可能是更好的选择。

您有几个缺点:

  • 需要与具有 SeLockMemoryPrivilege 的用户一起运行
  • 内存不能与其他进程共享。它是在物理内存中分配的。为操作系统和其他应用程序留下更少的内存(使用AllocateUserPhysicalPages)。
  • 您需要一个虚拟地址才能访问此类内存。因此,您可以使用 LARGE_ADDRESS_AWARE 标志拥有 4GiB 的内存窗口。
  • 如果您想要访问超过 4GiB,则必须映射/取消映射这些物理页面(使用 MapUserPhysicalPages)。

这篇 1999 年的文章解释了如何使用此类 API。

Well the truth is that you can use AWE from a 32bits application running inside a Windows OS 64bit, and you don't need PAE. For example MS SQL Server (before 2012 version) can be configured in this mode.

But unless you have a very specific requirements, probably is far a better option to port to 64bits.

You have several disvantages:

  • Need to run with a user with SeLockMemoryPrivilege
  • The memory can not be shared with other process. It is allocated in physical memory. Leaving less memory to the OS and other applications (with AllocateUserPhysicalPages).
  • You need a virtual address in order to access such memory. So you can have a memory windows of 4GiB with LARGE_ADDRESS_AWARE flag.
  • If you want to access more thant 4GiB you have to map/unmap those physical pages (with MapUserPhysicalPages).

This article from 1999 explain how to use such API.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文