Gnome 的 gslist 比 std::forward_list 有什么优势?
Any advantages to Gnome's gslist over std::forward_list?
我正在更新一些 1990 年代的 C 代码并将其转换为 C++。原始代码严重依赖 Gnome's gslist
(单链表)。我发现 gslist
集成到我的面向对象代码中非常麻烦,所以我真的很想将所有这些列表转换为 C++ 标准模板库的 std::list
或 std::forward_list
.
有什么好的理由(性能、可移植性等)不迁移到 STL 而坚持使用 Gnome?
我会避免将 gslist
替换为 std::list
,因为那样会将单向链表更改为双向链表。但是,我想 std::forward_list
会执行类似的操作,但是根据存储在 gslist
中的对象的大小,您可能也会看到轻微的性能差异。这是因为 glib 使用切片分配器而不是 std::forward_list
.
的标准分配器
如果您还没有使用 C++,从可移植性的角度来看,您可能不想使用 C++ 解决方案,因为并非所有平台都有 C++ 编译器。但是,如果您可以为平台编译 Gnome,我想它也会附带一个像样的 C++ 编译器。
我能想到的另一件事是添加 STL 依赖项可能会增加可执行文件的大小,如果您还没有使用 STL。您可能还会看到编译时间略有增加。
唯一真正了解的方法是进行一些分析。
我正在更新一些 1990 年代的 C 代码并将其转换为 C++。原始代码严重依赖 Gnome's gslist
(单链表)。我发现 gslist
集成到我的面向对象代码中非常麻烦,所以我真的很想将所有这些列表转换为 C++ 标准模板库的 std::list
或 std::forward_list
.
有什么好的理由(性能、可移植性等)不迁移到 STL 而坚持使用 Gnome?
我会避免将 gslist
替换为 std::list
,因为那样会将单向链表更改为双向链表。但是,我想 std::forward_list
会执行类似的操作,但是根据存储在 gslist
中的对象的大小,您可能也会看到轻微的性能差异。这是因为 glib 使用切片分配器而不是 std::forward_list
.
如果您还没有使用 C++,从可移植性的角度来看,您可能不想使用 C++ 解决方案,因为并非所有平台都有 C++ 编译器。但是,如果您可以为平台编译 Gnome,我想它也会附带一个像样的 C++ 编译器。
我能想到的另一件事是添加 STL 依赖项可能会增加可执行文件的大小,如果您还没有使用 STL。您可能还会看到编译时间略有增加。
唯一真正了解的方法是进行一些分析。