gpt4 book ai didi

c++ - 编译器能内联这个方法吗?

转载 作者:行者123 更新时间:2023-11-30 01:08:23 25 4
gpt4 key购买 nike

当前数据结构

我有一个代码,其中数据结构由两个类 vector 表示 A1A2分别。

vector<A1> v1;
vector<A2> v2;

我的代码中较慢的部分(大约占总运行时间的 80%)在于遍历这些 vector 并应用方法 funA1关于 v1 的元素和 funA2关于 v2 的元素.

double result = 0;
for (int i = 0 ; i < v1.size() ; i++)
{
results *= v1[i].funA1();
}
for (int i = 0 ; i < v2.size() ; i++)
{
results *= v2[i].funA2();
}

reshape 数据结构

虽然数据结构使用这两个 vector ,但直觉宁愿使用混合数据类型 A1 的单个 vector 。和 A2 .使用两个不同的 vector 会导致代码其他地方的可读性和维护性下降。

我想我可以将它们合并成一个 vector 。这个想法是制作A1A2父类的 sibling 类 A并使用 vector<A> v作为单个 vector 。我会定义一个虚拟的 fun在类里面A并在 A1 中覆盖它和 A2这样我就可以做

double result = 0;
for (int i = 0 ; i < v.size() ; i++)
{
results *= v[i].fun();
}

问题

在第一种情况下,方法 funA1funA2可以由编译器内联(实际上我自己内联了它们,因为它们是非常简单的函数)。

在第二种情况下,恐怕内联是不可能的。它是否正确?

编译器会设法内联方法吗 fun ?

当然,性能损失可能可以忽略不计,我应该对其进行测试,但我想知道在尝试进行所有修改之前它是否值得先验。

最佳答案

答案是肯定的“也许”。判断您的编译器是否确实内联调用的唯一方法是编译它,然后查看汇编列表。这完全取决于 fun 的复杂性(其中“复杂性”是一个非常特定于编译器的指标)。

就个人而言,除非这是您应用程序中时间最关键的部分,否则我不会担心它。函数调用并不那么昂贵。与往常一样,编写代码时要确保清晰性和可读性,然后再进行优化。

关于c++ - 编译器能内联这个方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42920629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com