【发布时间】:2014-05-08 05:49:16
【问题描述】:
我有一个从非常大的文本字符串中提取数据的类。
在这个类中,我有很多非常简单的字符匹配。尽管有缩进、间距和 cmets,但这变得相当难以阅读。
因此,我想将这些小代码块移动到单独的函数中,这将大大提高可读性。
现在我的问题是我是否可以期望现代编译器像这样内联 5 行:
void f(page& p, size_t& index) // variable 'data' is class member
{
p.id = 0;
while(data[++index] != '<') {
p.id *= 10;
p.id += static_cast<uint>(data[index]) - 48;
}
index += 23;
}
父函数将运行数百万次,因此如果调用这些“sn-p”函数中的 ~7 个会增加可衡量的开销,我想确保它们被内联。
inline 关键字仍然被认为是好的做法吗?
inline void f(page& p, size_t& index);
我应该相信编译器的无限智慧吗?
【问题讨论】:
-
您应该信任但要验证。如果您懒得验证,那么担心它并不重要。如果您因为缺乏知识而无法验证,那么您也没有足够的知识来担心。
-
请记住,在编程时,在证明需要更高速度之前不要过多担心优化问题,这一点很重要。函数调用开销,即使完成“数百万次”,最终也只会增加非常小的几分之一秒。您的系统是否如此重要以至于几分之一秒很重要?
-
inline不是(只是)对编译器的提示,它具有真正的意义。 -
@marcglisse 但这个意思与
inlineing 关系不大。