我最近开始制作一个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;
};
Run Code Online (Sandbox Code Playgroud)
虽然几乎不存在性能膨胀,启动时间和内存使用情况完全相同,但文件大小却急剧增加.一个C Gtk +样本窗口生成6.5 kb,而使用我的包装器的样本窗口生成22.5 kb.所以我需要一些建议.我应该继续使用内联函数吗?我希望我的应用程序高效,我可以在文件大小上稍微妥协,就像我可以接受它,即使使用我的包装器但不是更多的6.5 kb C GTK +程序生成像400-500 kb.我不希望我的包装器生成像wxWidgets或MFC那样的巨大EXES.那么使用内联函数还是值得使用普通函数呢?
注意:我的所有函数只占用一行或有时两行,并且不大,如示例中所示.
我强烈怀疑你是在把苹果与橘子比较.
您是否使用完全相同的编译器,相同的编译标志进行编译,并使应用程序具有完全相同的功能?
如果是这样,请反汇编可执行文件,并查看额外代码是什么.
我的猜测是,它是一些一次性的库代码,用于支持以前未使用的C++功能.
但一如既往,不要猜测,衡量.
你有一个数据点.这并没有告诉你太多.我们可以看到在所有情况下文件大小增加350%,或者我们可以看到固定的16kb开销.你需要找出它是什么.所以获得更多的数据点.扩展您的应用程序.使其打开十个窗口而不是一个,或以其他方式添加额外的功能.在这种情况下,"你的"版本是它的三倍吗?或者它大16kb?还是介于两者之间?获取更多数据点,您将能够看到文件大小如何缩放.
但最有可能的是,你担心什么都没有,原因如下:
大小差异更可能是由于为C++引入的库而不是在等效的C中,库的开销较少.
如果您的所有包装器代码都遵循上述内容,那么就膨胀而言几乎没有.
在我看来,您的解决方案是实现包装器的一个很好的价值.
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |