创建没有malloc的内存缓冲区

创建没有malloc的内存缓冲区,c,C,我在一个嵌入式系统(ARM Cortex M3)上工作,在那里我无法访问任何类型的“标准库”。特别是,我无权访问malloc 我有一个函数void doStuff(uint8\u t*buffer),它接受指向512位缓冲区的指针。我尝试了以下几点: uint8_t buffer[64] = {0}; doStuff((uint8_t *) &buffer)); 但我没有得到预期的结果。我做错什么了吗?是否有其他方法?doStuff(buffer)应该可以,因为buffer已经是一个u

我在一个嵌入式系统(ARM Cortex M3)上工作,在那里我无法访问任何类型的“标准库”。特别是,我无权访问
malloc

我有一个函数
void doStuff(uint8\u t*buffer)
,它接受指向512位缓冲区的指针。我尝试了以下几点:

uint8_t buffer[64] = {0};
doStuff((uint8_t *) &buffer));
但我没有得到预期的结果。我做错什么了吗?是否有其他方法?

doStuff(buffer)
应该可以,因为
buffer
已经是一个
uint8.*

除此之外,在您的示例中,在
&buffer
之后关闭一个括号太多


如果
buffer
的大小可变,您也应该将大小传递到
doStuff
中,如果大小不变,我也会传递大小,以防有一天您更改大小

话虽如此,您应按以下方式进行:

uint8_t buffer[64] = {0};
int     len        = 64;
doStuff(buffer, len);
SimpleAlloc():有一个char mem[MAXMEM];和一个结构freetable。然后编写自己的SimpleAlloc(),在freetable中找到足够大的内存垃圾,并将偏移量返回mem。然后simplefree()将调整freetable

伊迪丝:

如果你需要大量的malloc(),你甚至可以为不同的任务将你的静态mem划分成不同的块(一个块正好代表100字节的alloc,一个块大小相当于你最喜欢的结构,等等),这将加快寻找免费mem的速度

如果缺少mem,应该在simpleAlloc()中实现一个bestmatch(),这会降低执行速度

如果有足够的内存,可以实现一个debugversion,它“分配”更多的内存,并将XXX放在simplemalloc()ed mem的开始和结束之前。在free()上,您可以检查这个XXX是否已损坏,这样您就知道在流上或流下有一些缓冲区,您可以知道这些缓冲区