当前位置:  开发笔记 > 编程语言 > 正文

C内联函数和内存使用

如何解决《C内联函数和内存使用》经验,为你挑选了2个好方法。

如果我使用内联函数,内存使用量会增加吗?



1> Ben Combee..:

内联函数会影响两种内存使用情况:

代码大小 - 通常,内联代码会增加用于加载程序的内存量.这是因为在程序周围会分散生成的代码的多个副本.但是,并非总是如此 - 如果内联函数仅使用一次,则几乎没有变化,如果内联函数非常小,则可以通过删除函数调用开销来减少代码大小.此外,优化器可以减小函数的大小,该优化器能够删除特定内联调用中未使用的代码.

堆栈使用 - 如果内联函数有很多局部变量,那么您可以使用更多的堆栈空间.在C中,编译器通常在进入函数时为函数分配一个堆栈空间.这必须足够大以容纳未存储在寄存器中的所有局部变量.如果您在线外调用函数,则该函数的堆栈将一直使用,直到它再次释放为止.如果你内联函数,那么该堆栈空间将继续用于超级函数的整个生命周期.

内联不会影响堆使用,因为内联代码会发生与非内联版本相同的分配和解除分配.



2> Johannes Sch..:

还有一点需要考虑:

使用内联函数,编译器能够看到调用者的变量将被用作被调用者中的变量.编译器可以优化(通常这是很多可以省略的汇编器行.注意所谓的"别名问题")基于该知识的冗余代码.因此,你的"代码臃肿"通常不是那么大,特别是如果你有更小的功能,它甚至可以减少膨胀,如上面Jim所述.

有人提出了一个好处:更好地让编译器决定是否内联有问题的函数,因为它比以往更了解它生成的代码.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有