用自定义说明替换每个乘法

Replacing every multiplication with a custom instruction

本文关键字:替换 自定义 说明      更新时间:2023-10-16

我有一些基本的C 代码(以下包括)。我希望能够用自定义说明替换发生的每个乘法(包括在Math.h中包含的COS函数中)。我能够在我的主体内直接调用自定义指令,但是" cos"仍将使用旧的乘法指令。

我考虑过操作员超载,但是我无法正确地使此功能正确。

#include <iostream>
#include <string>
#include <math.h>
int main()
{
  int a = 2;
  int b = 5;
  std::cout << "mult: " << a * b << std::endl;
  std::cout << "cos: " << cos(b) << std::endl;
  return 0;
}

以我想要的方式实施此自定义指令的最佳方法是什么?

有一种方法可以替代某些功能而不触摸您的代码。这取决于您如何构建代码。假设您正在使用Linux,则可以使用ld_preload注入功能。

这是如何做到这一点的一个很好的解释:

https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-usion-ld_preload-creload-to-cheat-cheat-cheat-features-features-and-investige-and-investigate-programs/

如果这不完全适用于您的情况,则可以抓住一些想法或简单地学习此很酷的功能。

std::cos仅为内置的浮点类型floatdoublelong double提供过载(也可以提供任何积分类型,但在内部将其施加到double)。您不能超载运算符内置类型。这意味着您无法做您要问的事情。

最好的是编写自己的数字类,以超载乘法运算符并使用您的替代乘法实现编写自己的三角函数。