通过函数调用分配内存给buffer
Allocate memory to buffer through function call
我有一个函数 f(q15_t *x, inst *z)
它有一个输入 x
和一个实例 z
:
typedef struct {
q15_t * pbuff;
}inst;
inst z;
我想要一个能够分配内存 space 并将其地址放置到 z.pbuff
的初始化函数,例如(我的努力):
instance_initiator(inst *instance,uint16_t buffSize)
{
q15_t a[buffSize];
instance->pbuff=a;
}
我正在寻找正确的方法来做到这一点,因为我认为在启动器函数完成后,分配的缓冲区 spaces 将会消失,而且我们似乎需要全局变量,而这不可能发生可能是通过使 a
静态化?我希望能够做到这一点。
请注意,初始化将 运行 一次,函数将被调用多次。
正如来自莫斯科的 Vlad 所说 malloc
很好,但我担心这是否会减慢算法?也许一种方法是通过宏设置静态数组的大小a
。
我找到了一个解决方案,但我不知道是否有人为这个解决方案命名:
#define SIZEOFBUF 500
typedef struct {
q15_t * pbuff;
}inst;
typedef struct {
q15_t buff[SIZEOFBUF];
}instScratch;
inst_initiator(instScratch* scr,inst* z)
{
inst->pbuff =instScratch->buff
}
void main(void)
{
static instScratch scr;
inst z;
inst_initiator(&inst,&scr);
loop
{
f(x, &z);
}
}
这个解决方案是可行的,因为假定静态变量的大小在编译时已知,如果不是,并且缓冲区的大小仅在 运行 时确定,EZ 解决方案是使用 malloc但是(正如 Lundin 所说)嵌入式禁止动态分配,您可以使用 Lundin 的静态内存池解决方案。
使用 malloc()
分配。测试成功。
// Return error flag
bool instance_initiator(inst *instance, uint16_t buffSize) {
if (instance == NULL) {
return true;
}
instance->pbuff = malloc(sizeof instance->pbuff[0] * buffSize);
return instance->pbuff == NULL && buffSize == 0;
}
malloc is good but I feel fear if that is slowing algorithm?
不要害怕。评论 Is premature optimization really the root of all evil?.
如果您仍然觉得 malloc()
很慢,post 代码可以证明这一点。
我有一个函数 f(q15_t *x, inst *z)
它有一个输入 x
和一个实例 z
:
typedef struct {
q15_t * pbuff;
}inst;
inst z;
我想要一个能够分配内存 space 并将其地址放置到 z.pbuff
的初始化函数,例如(我的努力):
instance_initiator(inst *instance,uint16_t buffSize)
{
q15_t a[buffSize];
instance->pbuff=a;
}
我正在寻找正确的方法来做到这一点,因为我认为在启动器函数完成后,分配的缓冲区 spaces 将会消失,而且我们似乎需要全局变量,而这不可能发生可能是通过使 a
静态化?我希望能够做到这一点。
请注意,初始化将 运行 一次,函数将被调用多次。
正如来自莫斯科的 Vlad 所说 malloc
很好,但我担心这是否会减慢算法?也许一种方法是通过宏设置静态数组的大小a
。
我找到了一个解决方案,但我不知道是否有人为这个解决方案命名:
#define SIZEOFBUF 500
typedef struct {
q15_t * pbuff;
}inst;
typedef struct {
q15_t buff[SIZEOFBUF];
}instScratch;
inst_initiator(instScratch* scr,inst* z)
{
inst->pbuff =instScratch->buff
}
void main(void)
{
static instScratch scr;
inst z;
inst_initiator(&inst,&scr);
loop
{
f(x, &z);
}
}
这个解决方案是可行的,因为假定静态变量的大小在编译时已知,如果不是,并且缓冲区的大小仅在 运行 时确定,EZ 解决方案是使用 malloc但是(正如 Lundin 所说)嵌入式禁止动态分配,您可以使用 Lundin 的静态内存池解决方案。
使用 malloc()
分配。测试成功。
// Return error flag
bool instance_initiator(inst *instance, uint16_t buffSize) {
if (instance == NULL) {
return true;
}
instance->pbuff = malloc(sizeof instance->pbuff[0] * buffSize);
return instance->pbuff == NULL && buffSize == 0;
}
malloc is good but I feel fear if that is slowing algorithm?
不要害怕。评论 Is premature optimization really the root of all evil?.
如果您仍然觉得 malloc()
很慢,post 代码可以证明这一点。