非常にレイテンシーの影響を受けやすいアプリケーションを作成している場合、C++ 関数内にアセンブラーを埋め込むこと (および C++ 関数呼び出しを通常どおり使用すること) の制限は次のようになります。
inline __int64 GetCpuClocks()
{
// Counter
struct { int32 low, high; } counter;
// Use RDTSC instruction to get clocks count
__asm push EAX
__asm push EDX
__asm __emit 0fh __asm __emit 031h // RDTSC
__asm mov counter.low, EAX
__asm mov counter.high, EDX
__asm pop EDX
__asm pop EAX
// Return result
return *(__int64 *)(&counter);
}
(上記の関数は、私が見た別のSO投稿からのものです)
アセンブラでインライン化された関数をブラック ボックスのように扱えますか? アセンブラで実行した計算の結果を簡単に取得できますか? レジスタなどに現在どの変数が入っているかわからない危険性はありますか? それは解決するよりも多くの問題を引き起こしますか、それとも特定の小さなタスクには受け入れられますか?
(アーキテクチャが修正され、既知であると仮定します)
編集私はこれを見つけました、これは私がほのめかしているものです:
http://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-CC
EDIT2 これは、Linux と x86 を対象としたものです。一般的な C++/アセンブラーの質問です (または、そう思いました)。