Sau*_*ber 0 c memory embedded malloc ram
我可以在嵌入式C中使用malloc和delete函数吗?例如,我有一个函数,其中在函数malloc的结构上创建了指针.这个函数在ram中返回地址,我可以使用它.退出我的功能,在那里分配了内存,这个指针将被删除或者这个内存为此保留,而不是将函数删除终止?
Typedef struct {
Char varA;
Char varB
} myStruct ;
Void myfunc ( void)
{
myStruct * ptrStruct = ( myStruct *) malloc ( sizeof (myStruct)) ;
// Code here
//........
return ;
}
Run Code Online (Sandbox Code Playgroud)
Lun*_*din 11
通常,您不应该malloc
在嵌入式系统中使用,因为这样做没有任何意义 ,如此处所述.特别是,在裸机系统上使用它并没有任何意义.
使用动态内存分配的唯一有意义的地方是大型托管,多进程系统,其中多个进程共享相同的RAM.如果您对嵌入式系统的定义是Android智能手机或便携式PC,那么可以使用malloc.
如果你发现自己在其他任何地方使用它,它几乎肯定意味着你的程序设计存在根本缺陷,而且你不知道堆是如何工作的.
此外,几乎所有嵌入式系统编程标准都禁止动态内存分配.
嵌入式系统没有任何特定的东西阻止使用动态内存.
但是,您可能需要以多种方式为其提供支持,例如:
sbrk_r()
对malloc()
等才能正常工作.malloc()
/ free()
等将是不安全的,你应该编写外部声明锁的包装函数.但是,为什么您可能选择避免在嵌入式系统中使用动态内存(或至少是标准库实现的动态内存),有很多原因: