glib源码阅读
文章平均质量分 64
zero_lee
这个作者很懒,什么都没留下…
展开
-
glib中线程池的实现学习
Glib实现了线程池,定义在文件GThreadPool.h/c文件中,用来提供并行计算任务的能力。原创 2012-08-14 13:45:20 · 1683 阅读 · 0 评论 -
glib中GTrashStack小计
GTrashStack中只有一个成员,是一个指针,也是一个指向stack前一片内存的指针。 struct GTrashStack { GTrashStack *next; }; 在回收内存时,这样的结构不会带来额外的内存开销,因为可以将next指针记录在回收的内存中。 G_INLINE_FUNC void g_trash_stack_push (GTrashStack **sta原创 2012-08-14 13:37:01 · 916 阅读 · 0 评论 -
glib中的GQueue结构体
glib库的GQueue的实现,是依托在GList的基础上: 内部保存有哪个双向队列的头和尾,故可以提供一些双向队列的接口,例如push_head, push_tail, pop_head, pop_tail。 有一个印象深刻的函数实现: GList * g_queue_peek_nth_link (GQueue *queue, guint n) {原创 2012-08-14 13:32:45 · 2367 阅读 · 0 评论 -
glib中单双向链表的归并排序
在glib库中,双向链表的排序是采用合并排序的方法,但它并不是两两的合并,而是迭代的合并,如下图: 代码如下: GList * g_list_sort (GList *list, GCompareFunc compare_func) { return g_list_sort_real (list, (GFunc) compare_func, NU原创 2012-08-14 13:31:34 · 1945 阅读 · 0 评论 -
[Happy GLIB] glib的slab算法实现学习
slab提出来是为了解决内部内存碎片的问题,在linux内核中与buddy system一起来解决内核内存管理。但是要看懂slab在linux内核中的实现当前有些困难,我们不如拿些容易阅读的代码来了解slab算法的运作过程。GLIB库实现非常clear,可以做为slab算法的实现学习的入门。 slab在GLIB中的实现相关文件是gslice.h/c,但是在这个实现文件中,有更复杂的,支持多线程更原创 2012-08-14 13:44:06 · 3670 阅读 · 0 评论 -
[Effective DSA] 链表的反转
这里的链表为单向链表和双向链表: 单向链表的反转 单向链表的反转,只需要维护1个节点指针,每次只能反转一个节点指向。GLIB的代码如下:(充分利用传入进来的list) GSList* g_slist_reverse (GSList *list) { GSList *prev = NULL; while (list) { GSList *next = lis原创 2012-08-14 13:28:25 · 657 阅读 · 0 评论