11

カスタマイズされたメモリ プール システムに関連するレガシー コードを読んでいると、コードが _aligned_malloc を使用していることがわかりました。この機能は何なのか、いつ使用する必要があるのだろうか。


皆さんに感謝します。

私はMSDNを読みましたが、「特定のアライメントが必要な理由の例は、データを16の倍数にアライメントする必要があるx86でSSE命令セットを使用してデータを使用することです」のような答えでした。

それらのコードが何を意味するのか、ようやく理解できました。再度、感謝します。

4

3 に答える 3

12

この関数は、メモリ割り当ての調整が重要な場合に役立ちます。

アラインメントとは、返されるポインターの数値が特定の数で割り切れる必要があることを意味します。((unsigned int)ptr) % alignment0 に評価する必要があります。

特定の位置合わせが必要な理由の例としては、データを 16 の倍数に位置合わせする必要がある x86 で SSE 命令セットを使用してデータを使用することが挙げられます。

于 2008-09-24T06:31:05.557 に答える
7

これは、あなたが関連する可能性のあるユースケースです。_aligned_malloc()私の 17 年間の C/C++ 開発の中で、 (WinOS 実装) および(POSIX 実装) カーネル関数が必要になったのは一度だけmemalignで、それは低レベルのディスク I/O をコーディングするときでした。この理由は、OS I/O バッファを使用しない場合 (例: WinOSopenfile()FILE_FLAG_NO_BUFFERINGフラグを使用して呼び出す場合)、ディスクへの読み取り/書き込みを行う場合、OS はメモリ ブロックをディスク セクタ サイズに合わせる必要があるためです。ディスク セクター サイズが 512 バイトで、1234 バイトをディスクに書き込みたい場合、次のようにします。

_aligned_malloc(1234, 512);
于 2012-12-28T11:49:49.430 に答える
0

MSDN のドキュメントを確認しましたか? それぞれのエントリ はここにあります

于 2008-09-24T06:17:42.393 に答える