我已经使用 mmap 实现了自己的 malloc 和 free。由于与 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 );
}