c用于自定义内存区域的malloc功能

时间:2016-01-29 10:24:17

标签: c memory-management shared-memory gnu mmap

是否有任何malloc / realloc / free类似的实现,我可以指定一个内存区域来管理内存分配?

我的意思是普通的malloc(等)函数只管理堆内存区域。 如果我需要在共享内存段或内存映射文件中分配一些空间怎么办?

4 个答案:

答案 0 :(得分:1)

不是100%,根据您的问题,您希望维护自己的内存区域。所以你需要自己去my_mallocmy_reallocmy_free

  

实施自己的my_malloc可能会对您有所帮助

void* my_malloc(int size)    
{
    char* ptr = malloc(size+sizeof(int));
    memcpy(ptr, &size, sizeof(int));
    return ptr+sizeof(int); 
}
     

这只是一个小小的想法,全面实施将带您到   答案。

Refer this question

使用相同的方法来实现my_reallocmy_free

答案 1 :(得分:1)

我最近也问自己这个问题,因为我想为我的安全程序实现malloc实现,它可以在退出之前安全地清除静态内存区域(包含加密密钥,密码和其他此类数据等敏感数据)。 / p>

首先,我找到this。我认为这对我的目的来说非常好,但我真的无法完全理解它的代码。许可证状态也不清楚,因为它对我的一个项目也非常重要。

我最后写了my own。 我自己的实现同时支持多个堆,使用池描述符结构对它们进行操作,释放块的自动内存清零,未定义的行为和OOM处理程序,获得分配对象的确切可用大小以及测试仍然分配指针,这是非常充分的为了我。它不是很快,而且是教育级别而不是专业级别,但我急需一个。

请注意,它(尚未)知道对齐要求,但至少它返回一个适合存储32位整数的地址。

答案 2 :(得分:0)

Iam使用Tasking,我可以将数据存储在特定的内存空间中。例如,我可以使用:

testVar _at(0x200000);

我不确定这是否是您正在寻找的,但是例如我正在使用它将数据存储到外部RAM。但据我所知,它只适用于全局变量。

答案 3 :(得分:0)

实现自己的my_allocmy_free并使用首选内存范围并不是很难。它是一个简单的链:块大小,无标记/正在使用,以及块数据加上最终块标记(例如块大小= 0)。一开始你有一个大的空闲块并知道它的地址。请注意,my_alloc返回块数据的地址,块大小/标志是之前的几个字节。