2

コンパイラの最適化設定で組み込み関数を有効にしていますが、InterlockedExchangeの結果のコードは、インラインアセンブリを生成するのではなく、kernel32.dllへの呼び出しを生成しています。この機能はVistaより前のバージョンのWindowsでは使用できないため、これは特に問題があります。

MSDNのドキュメントには、「この関数は、可能な場合は組み込みのコンパイラを使用して実装されます」と記載されています。コンパイラにInterlockedExchangeの実際の組み込みコードを使用させることは可能ですか?

4

1 に答える 1

3

インターロックされた組み込み関数にはアンダースコア プレフィックス (または#pragma intrinsic) が必要なので、 を使用したい_InterlockedExchange場合は、以下も含める必要があります。intrin.h

また、引用を完全に読んだ場合、次のように書かれています。

この関数は、可能な限りコンパイラ組み込みを使用して実装されます。詳細については、Winbase.h ヘッダー ファイルと _InterlockedExchangeを参照してください。

于 2012-01-25T10:57:18.510 に答える