【发布时间】:2012-01-18 12:33:34
【问题描述】:
我已经使用 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 );
}
【问题讨论】:
-
我建议制作一个基本的测试程序,用一堆不同的参数运行这些程序多次,然后通过 Valgrind 运行它,看看是否会出现任何问题。
-
@Paul:仍然无法浏览所有不同的子论坛,从你提到的那个到 SO 的 ubuntu 论坛。您能否建议如何/在哪里获取它们的列表?
-
@gnometorule:点击左侧页面顶部右侧的 StackExchange 字样 - 这将弹出一个窗口 - 然后点击“所有站点”
标签: c linux memory-management x86 mmap