C语言 何时必须释放分配的内存?



我是微控制器和指针的新手,我不确定在哪里释放分配的内存以及此示例是否可以正常工作:

示例 1:

char * function(void)
{
char *help;
help = malloc(sizeof(char));
//...
return help;
}
void main(void)
{
char *pointer = function();
//do something with pointer
//do I have to free(pointer); here?
}

是否可以为函数中的帮助分配内存并返回地址,而无需在函数结束时释放内存?

  • 如果是:使用后我是否必须释放主内存?
  • 如果不是:以下示例是否正常工作?

示例 2:

void function(char **pointer)
{
*pointer = malloc(sizeof(char));
//...
}
void main(void)
{
char *pointer;
function(&pointer);
//do something with pointer
free(pointer);
}

作为一般规则 - 不要在非常有限的资源 uC 环境中使用 malloc 样式的动态内存分配。许多行业标准完全禁止它。

uC编程与大型机器明显不同。

如果您忽略此建议并决定使用 malloc - 经验法则是 - 尽可能长时间地保留内存。拥有 0x200 字节的堆并频繁地错误分配和释放内存将很快导致堆碎片和程序崩溃。

如果你正在为微控制器编写裸机代码,通常它们必须是一个超级循环,让你的应用程序保持运行。 因此,考虑到上述陈述,应该在使用内存后始终释放内存,因为由于这个超级循环,程序将导致内存溢出,您的应用程序将崩溃。

您的上述代码非常适合在操作系统上运行,因为一旦程序退出,操作系统将释放内存。 但是,一旦不再使用内存,立即释放内存始终是一种很好的做法。

最新更新