【发布时间】:2015-07-26 01:43:48
【问题描述】:
我使用一个工具来生成一个 111k 行长的 C++ 类实现。它生成的方法按应有的方式工作,但它们往往会在所使用的 API 中触发缓慢的路径。
有没有什么办法,在 Mac OS X 上使用 Clang,我可以在不同的源文件中手动实现一些最常用的方法,并告诉链接器(或任何其他相关程序)忽略工具生成的方法是否存在该方法的其他实现?
我可以完全控制工具的输出,但自动生成更好的代码非常困难。
【问题讨论】:
-
您使用哪个工具来生成长达 111k 行的 C++ 类实现?
-
这是我制作的一个工具,它是一个 LLVM IR 模块并将其转换为 C++ 代码,其中模块函数和 C++ 方法之间存在 1:1 映射。每种方法都会生成匹配函数的 IR,除了带有常数参数外,因此可以很容易地对代码进行专门化和优化,然后进行分析。它有一个非常特殊的用途。
-
这很脏,但如果该工具生成足够模块化的代码,那么相关“更高效”标头的
#include_next就可以轻松做到这一点。 -
@CodaFi,我不确定我是否理解您的解决方案。这个想法是我手动指定一个更有效的实现,而不是更有效的声明。
-
这个想法是,鉴于该工具和您可以生成 2 个不同的标头(或更多),您可以将函数的实现分解为不同的标头,并在您觉得特定实现更值得时使用 #include_next它在“高效”标题中,而不是“工具生成”标题中。是的,这不是链接时更改,而是 CPP 更改,但我宁愿拥有模块化而不是 DYLD。