Пользовательский Распределитель Памяти в c - PullRequest
1 голос
/ 21 марта 2019

Я нашел эту ссылку, которая описывает, как работает пользовательский распределитель памяти:

https://github.com/lovelaced/muhalloc/blob/master/mem.c

Почему Mem_Alloc() делится на 4 и увеличивает size до кратного 4?

Вот описание функции по этой ссылке:

/* Function for allocating 'size' bytes. */
/* Returns address of allocated block on success */
/* Returns NULL on failure */
/* Here is what this function should accomplish */
/* - Check for sanity of size - Return NULL when appropriate */
/* - Round up size to a multiple of 4 */
/* - Traverse the list of blocks and allocate the best free block which can accommodate the requested size */
/* -- Also, when allocating a block - split it into two blocks when possible */
/* Tips: Be careful with pointer arithmetic */
void* Mem_Alloc(int size)
    ...

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Это для выравнивания;и является довольно плохим примером того, как это сделать.Если вы посмотрите на пример языка программирования C на K & R, он представляет источник для переносчика, который является переносимым, эффективным и простым для понимания.C - тонкий язык, лучше всего сначала научиться читать хорошие программы.

1 голос
/ 21 марта 2019

выравнивание данных, для эффективности доступа к памяти

предположим, что процессор всегда выбирает 4 байта из памяти с адресом, который должен быть кратен 4. тогда значение может быть прочитано или записано с помощью одной операции памяти. в противном случае нам может потребоваться выполнить два обращения к памяти, поскольку объект может быть разделен на два 4-байтовых блока памяти.

...