【发布时间】:2012-11-22 08:35:41
【问题描述】:
我看到了this question,但它只是说明了我想要做什么,而不是解释如何去做。
我有一个C 库,它将在支持动态内存分配的系统以及不支持动态内存分配的系统上运行。我想通过编写自己的malloc 函数来简化系统之间的转换,该函数在堆不可用时从静态数组分配内存。
我不是在寻找一个完全充实的解决方案来解决我的问题,但是带有示例的博客文章会有所帮助。确定何时以及何时不使用malloc 很容易。但是我花了一些时间来弄清楚如何从静态数组中分配内存。
static char my_memory[10000] = { 0 };
static void *my_malloc(size_t size) {
// Here, I want to allocate 'size' in 'my_memory'.
return NULL;
}
static void *my_free(void* memory) {
// Here, I want to free 'memory' from 'my_memory'.
}
编辑:
我的需求很简单,在这里,以这种方式分配的内存很少(而且很少释放)。 Steve Jessop 的简单解决方案非常适合。
【问题讨论】:
-
这听起来是个坏主意。几乎总是,不“支持动态内存分配”的系统出于肯定的原因这样做,因为他们不希望暴露于不正确的内存管理可能导致的错误。复制一个动态内存管理器(恕我直言,尤其是如果你还不知道怎么做的话!)如何满足这个要求?
-
@AndyRoss -- 如果我给它一个外部 RAM 模块并配置它的堆,我的系统会很乐意暴露可能由不正确的内存管理导致的错误。但我没有给它,也没有这样做的计划。我不知道如何复制动态内存管理器,因为这是我第一次尝试。我怀疑,如果一个人从不做任何他不知道该怎么做的事情,他将一事无成。
-
所以这个问题更像是“malloc 是如何实现的?”
-
我们在谈论什么系统?几乎所有微控制器工具链都带有一个实现简单 malloc() 的 C 库。
标签: c memory-management static malloc