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++ /汇编程序问题(或者我认为).
如果有问题的汇编程序正在推送它在顶部使用的任何寄存器,然后将它们弹出到底部,我认为您不必担心它。
在您的示例中,这些是__asm push EAX和__asm pop EAX说明。
我想,真正的答案是您需要足够了解 asm 的作用,以确保您可以将其视为黑匣子。:)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |