Элементы fd
и bk
- это прямой и обратный указатели в двусвязном списке.
Другими словами, fd
- это указатель next
, а bk
- это указатель previous
, как показано в следующем списке из трех элементов:
forward links -->
_(fd)_ _(fd)_
/ \ / \ _(fd)-> NULL
/ V / V /
head ---> item1 item2 item3
/ ^ / ^ /
NULL <-(bk)_/ \_(bk)_/ \_(bk)_/
<-- backward links
Примечание что этот конкретный пример имеет голову и хвост, с конечным элементом, указывающим на NULL. Вероятно, это , а не в случае с круговым списком, поддерживаемым glibc
(поскольку это циклический список), он просто используется, чтобы показать один метод реализации.
Фактически, ссылка, которую вы указали в своем вопросе, недвусмысленно утверждает это, начиная с пятидесяти с лишним строк после определения структуры (слегка перефразировано):
Free chunks are stored in circular
doubly-linked lists, and look
like this:
+------------------------------------------+
| Size of previous chunk, if unallocated | <- mchunk_prev_size
+------------------------------------------+
| Size of chunk, in bytes (and some flags) | <- mchunk_size
+------------------------------------------+
| Forward pointer to next chunk in list | <- fd
+------------------------------------------+
| Back pointer to previous chunk in list | <- bk
+------------------------------------------+
: <other stuff> :