Memory management 分配物理地址>;efi应用中的4GB?

Memory management 分配物理地址>;efi应用中的4GB?,memory-management,64-bit,efi,Memory Management,64 Bit,Efi,我想知道在efi应用程序中是否可以分配“物理地址”超过4GB的内存缓冲区 例如,PC上安装了6GB DRAM,efi应用程序分配4KB缓冲区,其物理内存地址为0x100000000(=4GB) 可以吗?在32位平台上,这是不可能的,即使地址扩展技术允许安装超过4GB的地址。这是因为要求所有RAM映射为1:1物理:虚拟地址 在64位平台上,只要没有愚蠢的特定于平台的固件错误,这应该可以正常工作 一些早期的x64 UEFI“BioSe”忘记实际映射RAM>4GB,这会导致访问冲突错误,但在除BIOS

我想知道在efi应用程序中是否可以分配“物理地址”超过4GB的内存缓冲区

例如,PC上安装了6GB DRAM,efi应用程序分配4KB缓冲区,其物理内存地址为0x100000000(=4GB)


可以吗?

在32位平台上,这是不可能的,即使地址扩展技术允许安装超过4GB的地址。这是因为要求所有RAM映射为1:1物理:虚拟地址

在64位平台上,只要没有愚蠢的特定于平台的固件错误,这应该可以正常工作


一些早期的x64 UEFI“BioSe”忘记实际映射RAM>4GB,这会导致访问冲突错误,但在除BIOS兼容模式(CSM)之外的任何其他模式下都可以正确验证的情况下,这将正常工作。

您尝试过吗?发生了什么事?我还没有试过,只是想知道这是否可行……我能说“64位平台”是指(64位CPU)+(安装了4GB DRAM)+(64位efi外壳/应用程序)吗?(我只想知道需求…THX)嗯,我会考虑任何在64位模式下执行UEFI的平台是一个64位的平台。当然,如果它没有4GB以上的内存,那么就很难分配4GB以上的内存:)是否有用于此目的的函数调用(分配内存并返回4GB以上的物理地址)?如果您能提供任何帮助,我将不胜感激……好吧,您可以使用AllocateAddress标志AllocatePages(),它允许您请求分配特定地址。