我有一些相当复杂且高度模板化的代码(C++,但这可能不是很相关),我想知道执行时的添加,子,muls,div和sqrt的数量。有没有一种自动获取此信息的方法(编译器可以轻松解决)?我试图在生成的汇编代码中自己计算它,但与 jp
、jmp
和 call
s 混淆了。
我建议覆盖+
、-
、*
、/
运算符和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>();
是的,你可以,但方法有点复杂:
尝试将二进制文件中的"add","sub","mul","div","sqrt"更改为一些无效的操作码。不要忘记定义无效的操作码错误处理程序来恢复操作码。当您的程序运行时,CPU 将在那些更改的"添加"、"子"、"mul"、"div"、"sqrt"处触发无效操作码错误。通过计算触发无效操作码错误的次数,您可以准确地获得所需的内容。