Реализация вашего собственного malloc / free с помощью mmap и munmap

Я реализовал собственные 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 );
}
8
задан MetallicPriest 12 December 2011 в 03:17
поделиться