【发布时间】:2018-05-01 20:15:18
【问题描述】:
假设您需要实现一个非常快速的算法来解决某些问题,它可能取决于您将从某个数据源获取到内存中的一组参数。假设这些参数一旦被解析就会像常量一样(但仍然取决于问题)。如果知道这些常量以源代码开头并显式编写,我希望编译器内联它们,假设这些参数在瓶颈附近经常被访问,这可能会带来很好的速度改进。但是,如果它们在编译后由程序从外部源解析,则它们通常不会被内联,即使您为对象分配最终变量也是如此。 我想一个技巧可能是为每组值保存一个有效对象的副本,其中每组值都明确地写在代码中。然后可以使用相关的对象。但这会耗费大量内存,并且代码会成倍增长。 另一个想法可能是在解析参数集之后动态编译代码。
我的问题是:有没有什么东西可以优雅地处理这个问题,更具体地说是在 Java/C++ 中。
【问题讨论】:
-
听起来您可能想使用 c++
template并实例化一堆可能的常量值。 -
但是如果我有十个布尔值,那已经是 2^10=1024 种可能性。现在可以有整数和双精度数,它呈指数增长。这些常量还可以控制代码流,因此内联可以帮助避免分支。目标是构建可定制且仍然快速的软件。
-
那我不知道你说的是什么意思“为每组值保存一份有效对象的副本,其中每组值都明确写在代码中。”我>
-
你明白我的意思,我只是不认为这是一个非常优雅的想法。我想知道是否有更好的方法。还是 c++ 模板在运行时内联常量?
-
这个问题在各种正则表达式实现和库中不断得到优化。解决这个问题的方法不止一种。如果您考虑一下,您甚至可以在程序中包含一个编译器,然后将编译后的代码作为共享库加载。
标签: java c++ performance programming-languages inline