ZeroDeviceMemory 関数
ZeroDeviceMemory 関数は、開発者がデバイス メモリへのアクセス時にアライメント エラーが生成されないようにする必要がある場合、コンパイラの最適化の干渉を受けることなく、バッファーの内容をゼロで埋めます。
重要
一部の情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
パラメーター
パラメーター Destination [out]
ゼロで埋められるメモリ ブロックの開始アドレスへのポインター。
パラメーター Length [in]
ゼロで埋められるメモリ ブロックのサイズ (バイト単位)。
構文
volatile void*
ZeroDeviceMemory (
_Out_writes_bytes_all_(Length) volatile void* Destination,
SIZE_T Length
);
解説
この API は、FillDeviceMemory の便利なラッパーです。 詳細については、FillDeviceMemory の解説を参照してください。
Note
この関数は、最新バージョンだけではなく、すべてのバージョンの Windows で動作します。 winbase.h
ヘッダーから関数宣言を取得するには、最新の SDK を使う必要があります。 また、最新の 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 Preview ビルド TBD
ヘッダー: winbase.h (Winbase.h を含む)
カーネル モード ライブラリ: volatileaccessk.lib
ユーザー モード ライブラリ: volatileaccessu.lib