在C++中嵌入汇编程序是否可以接受?

use*_*112 5 c++ performance assembly

如果您正在编写一个非常延迟敏感的应用程序,那么在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);

}
Run Code Online (Sandbox Code Playgroud)

(以上功能来自我看到的另一个SO帖子)

你能像黑盒一样对待汇编内联函数吗?你可以轻松地从汇编程序中执行的计算中检索结果吗?是否有危险您不知道当前寄存器中的变量等?是否会导致问题多于解决问题,或者特定的小任务是否可以接受?

(假设你的架构将被修复,并且已知)

编辑我刚发现这个,这就是我所暗示的:

http://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-CC

EDIT2这更多的是针对Linux和x86-它只是一个普通的C++ /汇编程序问题(或者我认为).

Alm*_*lmo 1

如果有问题的汇编程序正在推送它在顶部使用的任何寄存器,然后将它们弹出到底部,我认为您不必担心它。

在您的示例中,这些是__asm push EAX__asm pop EAX说明。

我想,真正的答案是您需要足够了解 asm 的作用,以确保您可以将其视为黑匣子。:)