为什么低碎片堆 (LFH) 机制可能会禁用某些正在运行 Windows Server 2003,Windows XP 或 Windows 2000 的计算机上

简介

一些在计算机上运行的 Microsoft Windows Server 2003,Microsoft Windows XP,或者 Microsoft Windows 2000,可能禁用了低碎片堆 (LFH) 机制。本文介绍了导致这种现象的原因。它还介绍了如何防止出现此行为。

详细信息

堆碎片

在基于堆的内存分配,从大的未使用内存池分配内存。该池称为堆。

当可用内存划分为小的、 非连续的块时,这被称为堆碎片。堆碎片时,内存分配将失败,即使没有足够的内存堆中要满足该请求。发生此问题是因为没有一个块的内存足以满足分配请求。对于需要低内存的程序,标准堆就足够了。通常,堆碎片不会导致分配失败。但是,如果程序频繁,分配内存和程序使用各种分配大小,内存分配可能失败由于堆碎片。

低碎片整理堆

在 Windows 2000 中,引入了低碎片堆机制 (LFH),它是包含在 Windows XP 和 Windows Server 2003。尽管这一机制基于现有堆,它成功地减少了堆内存的碎片。
有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

Windows XP 低碎片堆算法功能是为 Windows 2000

如果程序分配大量内存而且分配大小迥异,那么采用 LFH则是最好的选择。LFH 分配了最大为 16 字节 (KB) 的内存块。对于大于 16 KB 的内存块,LFH 使用标准堆。有关详细信息,请访问下面的 Microsoft 网站:

LFH 算法减少了堆碎片。此外,LFH 算法提高了 Win32 堆分配性能。此算法的执行过程将可变长度的内存块进行分配或取消分配可变长度的内存块。此算法还可以在多处理器计算机上很好地扩展。

为什么您不能启用 LFH

如果您正在使用与堆某些全局标志 (用 gflags),不能启用 LFH。您可以设置这些 gflags 通过用 Gflags 工具许多版本的 Windows 中包含,而且还包含在 Windows 调试工具。有关这些调试工具的详细信息,请访问下面的 Microsoft 网站︰

有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

如何使用 Gflags.exe 工具将 GlobalFlag 注册表值设置

可以禁用 LFH 的全局标志

尽管在调试中使用全局标志,您可以使用它们时无意中禁用 LFH。用 Gflags 工具可用于启用对程序的不同全局标志。您可以从命令行运行 Gflags 工具或您可以使用图形用户界面 (GUI) 对话框中运行 Gflags 工具。使用 GUI 对话框中时,必须用 Gflags 工具中设置图像文件选项卡上的不同的全局标记选项。有关命令行选项的详细信息,请访问下面的 Microsoft TechNet Web 站点︰

例如,可以在命令提示符处使用以下命令来安装全局标志或卸载记事本程序的全局标志︰

gflags /i notepad.exe +hpc
用 gflags /i notepad.exe – hpc
第一个命令安装全局标志,并第二个命令卸载的全局标志。这些命令,在"hpc"意味着"启用堆参数检查"。启用全局标志时,您将创建程序的以下注册表子项下的子项的十六进制值︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image 文件执行选项例如,设置全局标志的程序时,创建一个类似于下面的注册表项︰

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image 文件执行按 < Myprogram.exe >

名称︰ GlobalFlag
值类型︰ 双字节
值数据︰ 0x00000040用 Gflags 工具中,可以设置图像文件选项卡上的下列选项。

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×