0

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

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

4

1 回答 1

0

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

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

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

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

于 2012-12-04T12:43:00.563 回答