ZeroDeviceMemory 函数

ZeroDeviceMemory 函数会在开发人员还需要确保访问设备内存时不会发生对齐错误的情况下,将缓冲区的内容设置为零,以免受到编译器优化干扰。

重要

一些信息与预发布产品相关,在商业发行之前可能会发生实质性修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。

参数

Param Destination [out]

指向内存块起始地址的指针,用零填充。

Param Length [in]

内存块的大小,用零填充,以字节为单位。

语法

volatile void*
  ZeroDeviceMemory (
    _Out_writes_bytes_all_(Length) volatile void* Destination,
    SIZE_T Length
  );

备注

此 API 是 FillDeviceMemory 的便利包装器。 有关详细信息,请参阅 FillDeviceMemory 的备注。

注意

此函数适用于所有版本的 Windows,而不仅仅是最新版本。 需要使用最新的 SDK 从 winbase.h 标头获取函数声明。 还需要最新 SDK 中的库 (volatileaccessu.lib)。 但是,生成的二进制文件将在较旧版本的 Windows 上运行。

示例

// In this scenario we are setting data on memory mapped
// as "device memory" (i.e. memory not backed by RAM) to the value zero. On
// some platforms like ARM64, device memory cannot tolerate
// memory accesses that are not naturally aligned (i.e. a 4-byte
// load must be 4-byte aligned). Functions like memset, FillMemory,
// and even FillVolatileMemory may perform unaligned memory accesses
// because it is typically faster to do this.
// To ensure only naturally aligned accesses happen, use FillDeviceMemory.
//
// ZeroDeviceMemory is an wrapper around FillDeviceMemory that sets the memory
// to zero.

ZeroDeviceMemory(DeviceMemoryBuffer, 100);

要求

支持的最低客户端:Windows 11 Insider 预览版(待定)

标头:winbase.h(包括 Winbase.h)

Kernel-mode 库: volatileaccessk.lib

User-mode 库: volatileaccessu.lib

另请参阅