在没有malloc的情况下创建内存缓冲区
我正在开发一个嵌入式系统(ARM Cortex M3),我无法访问任何类型的“标准库”。特别是,我无权访问malloc
。在没有malloc的情况下创建内存缓冲区
我有一个函数void doStuff(uint8_t *buffer)
,它接受指向512位缓冲区的指针。我试图做以下几点:
uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我没有得到预期的结果。难道我做错了什么?有其他方法吗?
doStuff(buffer)
应该没问题,因为buffer
已经是和uint8_t*
。
除此之外,在您的示例中&buffer
之后,您会关闭一个括号。
如果buffer
是大小可变的,你应该通过大小为doStuff
过,如果是固定大小的,我也想通过大小正好,你改变大小1天情况。
这是说,你应该这样做以下方式:
uint8_t buffer[64] = {0};
int len = 64;
doStuff(buffer, len);
一个simplemalloc():有一个char MEM [MAXMEM]和一个可以*结构的结构。然后编写你自己的simplemalloc(),它可以找到足够大的内存垃圾,并将偏移量返回给mem。 simplefree()然后会调整可释放的。
EDITH:
,如果你需要大量的malloc()S,你甚至可以devide您的静态MEM成不同的任务不同的块(一个块整整100byte allocs,一个堡垒自己喜欢的结构的大小等等),这将加速寻找空闲的mem。
如果你是短MEM的,你应该实现在simplemalloc一个bestmatch()(),这是一个坏sideeffect减慢执行下去。
,如果你有足够的内存,你可以实现一个debugversion,其中“分配”有点更多的内存和开始前和simplemalloc()的MEM结束后提出XXX。在免费()你可以检查,如果这个XXX是坏的,所以你知道你有一些缓冲区溢出或流量不足,你可以知道。
+1用于推荐自定义内存池的实现 – eckes 2012-04-19 09:40:15