C++ 中的内联模式
Inline patterns in C++
在 c++ 中使用内联代码更有效的方法是什么。
我应该用它来支付运营商附加费吗?
inline const Composant & Composant::operator=(const Composant &c)
{
if (this != &c)
{
free(_description);
_description = strdup(c.getDescription());
}
为了性能最好...不想用太多
谢谢
我忽略 "style" 作为 inlining/not 内联代码的原因。这在现实中当然是很重要的一部分。
您的 operator=
示例非常好,我会内联。它只添加了一点代码:
比较 this
和 c
的地址、分支、对 free
的调用和对 strdup
的调用(并存储 return 价值)。
但是,如果您的 operator=
变为 10-15 行,对 free
或 delete
等的调用更多,那么制作非内联也许是个好主意。
与很多事情一样,它是一种判断(或者给它起一个花哨的名字 "engineering decision",但大多数时候这些只是 "I know this will work OK"),并且真正知道哪个是更好的是,您需要测量和分析您的代码,以了解它在哪里花费时间和 "how do I make that less"。
最重要的函数是那些在循环内部使用的函数,尤其是那些具有大量迭代的函数。大多数程序都有一个或六个这样的循环 "where most of the time is spent"。优化其他代码是毫无意义的,因为它可能在整个程序执行中执行十几次,而主循环执行一百万次。使 "a dozen times" 代码 运行 每次调用快 12 个时钟周期并不重要。让你的百万次循环的内部部分每个循环快 12 个时钟周期可能会有所不同,因为现在它快了 1200 万个周期。如果你的中央循环中有 30 个函数调用,你让每个函数调用平均快 12 个周期,现在我们谈论的是数亿个周期,所以现在我们在现代处理器上只需要十分之一秒.
在 c++ 中使用内联代码更有效的方法是什么。
我应该用它来支付运营商附加费吗?
inline const Composant & Composant::operator=(const Composant &c)
{
if (this != &c)
{
free(_description);
_description = strdup(c.getDescription());
}
为了性能最好...不想用太多
谢谢
我忽略 "style" 作为 inlining/not 内联代码的原因。这在现实中当然是很重要的一部分。
您的 operator=
示例非常好,我会内联。它只添加了一点代码:
比较 this
和 c
的地址、分支、对 free
的调用和对 strdup
的调用(并存储 return 价值)。
但是,如果您的 operator=
变为 10-15 行,对 free
或 delete
等的调用更多,那么制作非内联也许是个好主意。
与很多事情一样,它是一种判断(或者给它起一个花哨的名字 "engineering decision",但大多数时候这些只是 "I know this will work OK"),并且真正知道哪个是更好的是,您需要测量和分析您的代码,以了解它在哪里花费时间和 "how do I make that less"。
最重要的函数是那些在循环内部使用的函数,尤其是那些具有大量迭代的函数。大多数程序都有一个或六个这样的循环 "where most of the time is spent"。优化其他代码是毫无意义的,因为它可能在整个程序执行中执行十几次,而主循环执行一百万次。使 "a dozen times" 代码 运行 每次调用快 12 个时钟周期并不重要。让你的百万次循环的内部部分每个循环快 12 个时钟周期可能会有所不同,因为现在它快了 1200 万个周期。如果你的中央循环中有 30 个函数调用,你让每个函数调用平均快 12 个周期,现在我们谈论的是数亿个周期,所以现在我们在现代处理器上只需要十分之一秒.