我有一些相当复杂且高度模板化的代码(C++,但这可能不是很相关),我想知道在执行时添加、subs、muls、divs 和 sqrts 的数量。是否有自动获取此信息的方法(编译器可以轻松解决)?我试图在生成的汇编代码中自己计算它,但与jp
,jmp
和call
s 混淆了。
问问题
805 次
2 回答
1
我建议覆盖+
, -
, *
,/
运算符和sqrt
一些类似浮点类型的函数,您可以在其中计算它们的使用。
像这样的东西:
struct Double {
double val;
Double(double v): val(v) {}
static unsigned add_count = 0;
Double operator+(Double other) {
++add_count;
return Double(val + other.val);
}
};
do_your_stuff<Double>();
于 2013-09-13T14:15:07.627 回答
0
是的,你可以,但方法有点复杂:
尝试将二进制文件中的“add”、“sub”、“mul”、“div”、“sqrt”更改为一些无效的操作码。不要忘记定义一个无效的操作码错误处理程序来恢复操作码。当你程序运行时,cpu 会在“add”、“sub”、“mul”、“div”、“sqrt”发生变化时触发无效操作码错误。通过计算触发无效操作码错误的次数,你可以得到你想要的。
于 2013-09-10T18:59:51.593 回答