如何比较内联函数和普通函数的内存使用情况?

Posted

技术标签:

【中文标题】如何比较内联函数和普通函数的内存使用情况?【英文标题】:How do I compare memory usage of an inline function and an ordinary function? 【发布时间】:2012-12-04 11:28:32 【问题描述】:

我想知道一个函数在用作内联函数和普通函数时使用的内存量,以提高函数的使用效率。

我想计算这两种情况下的确切内存使用情况。

【问题讨论】:

看看你的可执行文件的大小。 ok..通过比较两个可执行文件...ryt?? ty..@DidierTrosset 好的..编译器总是足够聪明地选择合适的..明白了..ty 【参考方案1】:

您需要澄清您是否关心程序大小或运行时内存使用情况(堆栈与寄存器)。

此外,对于每个调用站点本身都需要做大量工作的任何函数,内联在程序大小方面的好处微乎其微。对于本质上需要使用大量内存的任何函数——对于一个大概的感觉数字来说说超过一百个字节——内联与否都不会产生任何影响。但是“固有地”编码了每个调用站点可能有不同的实际需求这一事实,因此如果编译时确定特定调用站点的需求允许重要的优化机会(例如 - 死代码消除),则内联可能会有所帮助。

内联函数在调用它们的每个点都会被有效地替换,然后进行优化 - 优化可能会改变它们使用的寄存器和内存 - 无论您是指用于机器代码指令(即程序)的内存,还是用于堆栈的内存与寄存器。诸如死代码消除之类的优化 - 以及该代码隐含的内存使用 - 可能对一个调用者但不是另一个调用者可能,但如果在调用外联函数时未执行该代码分支,则不太可能有很多无论如何,内存使用量的差异。针对这一点,根据函数的大小,内联后通常可以进行多少优化,有多少调用站点,以及在调用外联时需要多少代码来准备和传递参数,任何一种方法都可能产生或多或少的整体代码膨胀。使用 inling 存在更多代码过度膨胀的风险,但是当超出合理的阈值时,编译器通常会选择不遵守“内联”关键字提示。

与大多数优化选项一样,如果您关心,您应该使用真实的数据/事件负载来衡量您的特定应用程序。

【讨论】:

以上是关于如何比较内联函数和普通函数的内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda 表达式作为参数的函数定义为内联函数 | 内联函数本质 - 宏替换 )

c++:内联函数详解和普通函数的区别

内联宏与普通函数

内联函数

浅谈内联函数(C++)

宏函数普通函数内联函数的区别