Итак, я думал о создании собственного сборщика мусора на языке Си, и я наткнулся на этот учебник, который начинается с реализации функции malloc с нуля.
Идея учебника состоит в том, чтобы иметь связанный список свободных блоков памяти, и всякий раз, когда вы используете malloc, он проверяет этот список и дает вам память, которую вы хотите:
typedef struct header {
unsigned int size;
struct header *next;
} header_t;
{
size_t num_units;
header_t *p, *prevp;
num_units = (alloc_size + sizeof(header_t) - 1) / sizeof(header_t) + 1;
.....
}
Переменная alloc_size - это блоки памяти, которые мы хотим выделить;
переменная num_units - это количество «узлов» списков, которые у вас будут. Моя проблема с формулой, которую они использовали, я понял идею (alloc_size) / sizeof (header_t), но почему они добавили sizeof (header_t) - 1 & +1.