Windows 中的持久内存编程 - NVML 集成

永久性内存 (PM) 技术提供对非易失介质的字节级访问,同时显著降低存储或检索数据的延迟。 它会在系统的内存与传统存储之间创建一个新层。 任何依赖于 或 缩放且快速写入持久性媒体的程序都可以受益于 PM。

本文的目的是概述如何将非易失性内存库 (NVML) 集成到 Visual Studio 项目中以便于使用。

注意

持久性内存有时也称为存储类内存 (SCM) 。

 

PM 和 NVML

Windows Server 2016 中首次引入了对持久内存的支持,Windows 10周年更新 (1607) 。 有关快速概述,检查以下两个 Channel9 视频:

为了帮助开发人员利用永久性内存提供的优势,Microsoft 还为将非易失性内存库 (NVML) 引入 Windows 做出了贡献。 此库提供各种工具,使应用程序感知持久内存。 例如,它包含的代码使你能够轻松创建 PM 感知键值存储,以便进行极快的查找和存储。 可以在 NVM 库中找到有关 NVML(包括示例)的详细信息。

将 NVML 集成到 Visual Studio 项目中

  1. 下载 NVML 库文件和标头
  1. 将库文件和标头放在所选的目录中,例如:“C:\NVML\lib”和“C:\NVML\inc”。

  2. 按如下所示配置项目:

  • 打开 Visual Studio 项目,然后在“解决方案资源管理器”中右键单击项目的名称。
  • 在生成的弹出窗口底部打开项目的设置窗格。
  • 导航到“配置属性 -> C/C++”,将存储标头 (C:\NVML\inc) 的文件夹添加到“其他包含目录”字段。
  • 接下来,导航到“配置属性 -> 链接器”,并将存储库的文件夹 (C:\NVML\lib) 添加到“其他库目录”字段
  1. 接下来,请确保针对 Windows Server 2016 或 Windows 10 周年更新以项目为目标:
  • 导航到“配置属性 -> 常规”,并将“目标平台版本”字段设置为“10.0.14393.0”和
  • 导航到“配置属性 -> C/C++”,并将“NTDDI_VERSION=NTDDI_WIN10_RS1;”添加到“预处理器”字段。
  1. 在代码中包含标头并链接到所需的库
  • 此时,可以像任何其他头文件一样,将想要在代码中使用的头文件包含在代码中。 例如,使用 libpmem:
    • 添加“#include <libpmem.h>”和
    • 将“libpmem.lib”添加到“配置属性 -> 链接器 -> 输入 -> 其他依赖项”

此时,可以直接在代码中调用库的函数并利用它们。