Я изучаю эту функцию таНос и я мог бы использовать некоторую помощь:таНос и Пустота Указатели
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
Я знаю, что таНос FUNC выделяет память для любого типа, если имеется достаточно памяти, но линии я не понимаю:
p = (void *)malloc_ptr;
malloc_ptr += size;
Как он может указывать на любой тип данных? Я просто не могу понять этот указатель void или его местоположение.
Примечание: malloc_ptr является неподписанной долгим
Этот код содержит предположение о том, что указатель на 'беззнаковое long' (т.е.' malloc_ptr') может также указать к любому другому объекту, с точки зрения выравнивания. Это предположение не всегда верно (например, в некоторых системах оно не может указывать на объекты «long double»). –
Код предполагает, что ни один тип не имеет более строгие требования к выравниванию, чем 4-байтовое выравнивание. Код не показывает, как инициализируются 'free_mem_ptr' и' free_mem_end_ptr'. Он не возвращает NULL, когда пространства больше нет. Если функция 'error()' возвращается, то все ад разрывается. –