malloc.c 中的“bk”成员是什么缩写?

Hal*_*chi 2 c malloc glibc

我的问题是关于 glibc。bk成员的名字是什么的缩写malloc_chunk

struct malloc_chunk {
  INTERNAL_SIZE_T      mchunk_prev_size;  /* Size of previous chunk (if free).  */
  INTERNAL_SIZE_T      mchunk_size;       /* Size in bytes, including overhead. */
  struct malloc_chunk* fd;         /* double links -- used only if free. */
  struct malloc_chunk* bk;
  /* Only used for large blocks: pointer to next larger size.  */
  struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
  struct malloc_chunk* bk_nextsize;
};
Run Code Online (Sandbox Code Playgroud)

参考:https : //code.woboq.org/userspace/glibc/malloc/malloc.c.html#malloc_chunk

pax*_*blo 6

fdbk成员是在双向链表向前和向后的指针。

换句话说,fdnext指针,bkprevious指针,如下面的三元素列表所示:

forward links -->
                       _(fd)_        _(fd)_
                      /      \      /      \      _(fd)-> NULL
                     /        V    /        V    /
      head ---> item1         item2         item3
               /    ^        /    ^        /
  NULL <-(bk)_/      \_(bk)_/      \_(bk)_/

<-- backward links
Run Code Online (Sandbox Code Playgroud)

请注意,此特定示例具有头部和尾部,结束元素指向 NULL。由(因为它是一个循环列表)维护的循环列表可能不是这种情况,它只是用来展示一种实现方法。glibc


事实上,您在问题中提供的链接毫不含糊地说明了这一点,从结构定义之外的五十多行开始(稍微解释一下):

forward links -->
                       _(fd)_        _(fd)_
                      /      \      /      \      _(fd)-> NULL
                     /        V    /        V    /
      head ---> item1         item2         item3
               /    ^        /    ^        /
  NULL <-(bk)_/      \_(bk)_/      \_(bk)_/

<-- backward links
Run Code Online (Sandbox Code Playgroud)

  • @Halkichi:你如何推断​​出“bk”不是“后向指针”的缩写,而“fd”不是“前向指针”的缩写?文档说这就是它们的用途——为什么你不相信像 glibc 这样完善和可靠的项目的文档呢? (2认同)