[英]Dynamic memory allocation in embedded C
我可以在嵌入式C中使用函数malloc和delete吗? 例如,我有一个函数,在其中使用malloc函数在结构上创建了指针。 这个函数在ram中的返回地址,我可以使用this。 从分配了内存的函数退出后,该指针将被删除或为此保留的内存,而函数删除不会终止吗?
Typedef struct {
Char varA;
Char varB
} myStruct ;
Void myfunc ( void)
{
myStruct * ptrStruct = ( myStruct *) malloc ( sizeof (myStruct)) ;
// Code here
//........
return ;
}
通常,您不应在嵌入式系统中使用malloc
,因为这样做没有任何意义 ,如此处所述 。 特别是,在裸机系统上使用它毫无意义。
使用动态内存分配唯一有意义的地方是大型托管的多进程系统,其中多个进程共享同一RAM。 如果您将嵌入式系统定义为Android智能手机或便携式PC,那么可以使用malloc。
如果您发现自己在其他任何地方使用它,则几乎可以肯定意味着您的程序设计从根本上来说是有缺陷的,并且您也不知道堆是如何工作的。
另外,几乎每个嵌入式系统编程标准都禁止动态内存分配。
对于阻止使用动态内存的嵌入式系统,没有任何具体规定。
但是,您可能需要以多种方式为其提供支持,例如:
sbrk_r()
以便malloc()
等正常工作。 malloc()
/ free()
等将不安全,因此您应该编写在外部声明锁的包装函数。 但是,出于多种原因,您为什么可以选择避免在嵌入式系统中使用动态内存(或至少使用标准库实现的动态内存):
是的,您可以在嵌入式C中使用malloc。某些嵌入式系统具有其自己的封装内存分配API。 malloc()是C lib API。
内存是从堆分配的,堆是系统设计者定义的专用内存范围。 如果函数退出后您没有释放分配的内存,则分配的内存将被保留,其他进程将无法使用它。 通常,这是内存泄漏。 如果您释放分配的内存,但在此之后仍使用指针,则它是一个野指针,将导致未知的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.