c – 内联函数导致的大小增加多少?

前端之家收集整理的这篇文章主要介绍了c – 内联函数导致的大小增加多少?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近开始制作一个GTK的C包装器(没有什么特别的,只需将所有内容包装到C类中以便于开发,在内部使用)并且对已经很慢的Gtk造成最小的性能膨胀我几乎在任何地方使用内联函数.看看几个类函数……
class Widget : public Object
{
public: // A few sample functions. gwidget is the internal GTK+ widget.
    void Show(void) { gtk_widget_show(GTK_WIDGET(gwidget)); }
    void ShowNow(void) { gtk_widget_show_now(GTK_WIDGET(gwidget)); }
    void Hide(void) { gtk_widget_hide(GTK_WIDGET(gwidget)); }
    void ShowAll(void) { gtk_widget_show_all(GTK_WIDGET(gwidget)); }
public: // the internal Gtk+ widget.
    GtkWidget* gwidget;
};

虽然几乎不存在性能膨胀,启动时间和内存使用情况完全相同,但文件大小却急剧增加. C Gtk样本窗口生成6.5 kb,而使用我的包装器的样本窗口生成22.5 kb.所以我需要一些建议.我应该继续使用内联函数吗?我希望我的应用程序高效,我可以在文件大小上稍微妥协,就像我可以使用它,即使使用我的包装器但不是更多的6.5 kb C GTK程序生成像400-500 kb.我不希望我的包装器生成像wxWidgets或MFC那样的巨大EXES.那么使用内联函数还是值得使用普通函数呢?

注意:我的所有函数只占用一行或有时两行,并且不大,如示例中所示.

解决方法

我强烈怀疑你是在把苹果与橘子比较.

您是否使用完全相同的编译器,相同的编译标志进行编译,并使应用程序具有完全相同的功能

如果是这样,请反汇编可执行文件,并查看额外代码是什么.

我的猜测是,它是一些一次性的库代码,用于支持以前未使用过的C功能.

但一如既往,不要猜测,衡量.

你有一个数据点.这并没有告诉你太多.
我们可以看到在所有情况下文件大小增加350%,或者我们可以看到固定的16kb开销.你需要找出它是什么.
所以获得更多的数据点.扩展您的应用程序.使其打开十个窗口而不是一个,或以其他方式添加额外的功能.在这种情况下,“你的”版本是它的三倍吗?或者它大16kb?还是介于两者之间?获取更多数据点,您将能够看到文件大小如何缩放.

但最有可能的是,你担心什么都没有,原因如下:

> C编译器将内联视为提示.您正在使编译器很容易内联函数,但决策依赖于编译器本身,并尝试使应用程序快速运行.如果文件大小开始失控,那将会降低代码速度,因此编译器会尝试针对较小的文件大小进行优化.>你正在看几千字节.在一个TB级的硬盘时代.如果这有可能成为问题,那么您应该能够在测试用例中激发该问题.如果你不能写一个导致文件大小增加超过16kb的测试,那么就不值得担心了.>如果文件大小确实成为问题,编译器通常具有“优化大小”标志.>大型可执行文件通常会获得它们的大小,因为它们包含大量数据和资源.代码本身很少出现问题(除非你完全使用模板元编程进行疯狂)

猜你在找的C&C++相关文章