【发布时间】:2017-06-26 19:43:43
【问题描述】:
我创建了一个简单的应用程序,它只创建和显示空的 50x50 窗口,但它已经消耗了 20MB 的内存。我的目标是低内存设备,所以每一兆字节都很重要。是什么导致 GTK 消耗所有内存?是否可以减少内存使用量?
这是程序的完整源代码:
#include <gtk/gtk.h>
int main(int argc, char* argv[]) {
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DOCK);
gtk_window_set_default_size(GTK_WINDOW(window), 50, 50);
gtk_window_move(GTK_WINDOW(window), 50, 50);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
这是我编译的:
gcc -std=gnu99 -Wall -o example main.c $(pkg-config --cflags --libs gtk+-3.0)
这是产生的内存使用情况:
$ ps -FC example
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
platon 4214 11052 7 84812 20996 1 16:13 pts/5 00:00:00 ./example
(ps 以 KB 为单位测量内存使用情况,即 20996KB 或 ~21MB)
我在 linux 4.11.6、x86_64 上使用 gtk3 版本 3.22.16。
问题背景:目标系统是内存相对较低的 PC(200-400 MB 内存)。应用程序是该 PC 上类似信息亭的界面,具有相对复杂的 GUI 结构(许多页面和可能的交互)。而且我宁愿避免手动重新实现所有 GUI 逻辑(在较低级别的库之上),所以我正在寻找更高级别的东西 - 似乎该空间中只有 GTK 和 Qt(Qt 是只能从 C++ 中使用,这很痛苦)。
【问题讨论】:
-
您在什么系统上测量它? (处理器和操作系统)
-
@BasileStarynkevitch - ArchLinux,x64,linux 4.11。
-
什么是x64(你的意思是x86-64还是amd64)?请编辑您的问题以改进它。
-
@BasileStarynkevitch - 完成。我的意思是 x86_64,当然(x86_64 和 amd64 之间有区别吗?我认为这是同一事物的两个名称)
-
确实 x86-64 和 amd64 几乎是一回事(对于用户端代码也完全相同)。但也有 x32(我从未听说过 x64)