【发布时间】:2013-07-13 04:34:37
【问题描述】:
#include <Arduino.h>
#include "include/MainComponent.h"
/*
Turns on an LED on for one second, then off for one second, repeatedly.
*/
MainComponent* mainComponent;
void setup()
{
mainComponent = new MainComponent();
mainComponent->beginComponent();
}
void loop()
{
mainComponent->runComponent();
}
在 Arduino 中是否有释放内存的回调?(例如调用 delete mainComponent)
或者这会在循环结束时自动发生?
确保释放在该代码 sn-p 中分配的内存的策略是什么?
场景:“我想在这两种方法中访问该对象,因此该对象在全局范围内声明,然后在设置时实例化。”
loop() 终止时会发生什么? mainComponent 还会保留在内存中吗?
如果它在 OS NO 中,进程将终止,然后资源将被释放。
那么在 Arduino 中,我如何通过确保在控制器关闭时释放内存来实现上述场景?
【问题讨论】:
-
在 AVR 上,您没有操作系统,只有原始硬件。重新设置芯片(切断电源,按“RESET”等),所有内存将被“释放”。
-
那么在 Arduino 中不需要像在基于操作系统的系统中那样仔细的内存管理?
-
更需要更仔细的内存管理,但这基本上包括不分配太多的 2kB(左右)RAM。如果您需要一个对象在程序的整个生命周期内都保持活动状态,那么您不需要释放它。
-
@H2CO3 这很有意义。您是否有任何资源可以更好地了解微控制器中的内存处理?
-
嗯...我不知道。诚实地。你必须要小心。应用一般的内存管理规则,记住你只有 2k 个。读取编译器生成的汇编器和/或 avr-libc 中
malloc()的源代码。
标签: arduino