Я реализовал собственные malloc и free с использованием mmap . Теперь, в отличие от free , munmap также принимает длину в качестве параметра, поэтому я помещаю длину в качестве дополнительной информации в отображенную память.
Код для моих malloc и free показан ниже. Я хочу спросить, хорош ли этот код, или я все еще что-то упускаю или что-то делаю неправильно.
void * malloc ( size_t size )
{
int *plen;
int len = size + sizeof( size ); // Add sizeof( size ) for holding length.
plen = mmap( 0, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
*plen = len; // First 4 bytes contain length.
return (void*)(&plen[1]); // Memory that is after length variable.
}
void free ( void * ptr )
{
int *plen = (int*)ptr;
int len;
plen--; // Reach top of memory
len = *plen; // Read length
munmap( (void*)plen, len );
}