如何最小化C ++中的动态内存分配?
我正在为Arduino Mega写一些草图,有时它会挂起,我怀疑它是因为内存碎片而受到影响。但是,关于何时分配变量,我有点不清楚。
如果我有一个方法do_stuff
的类,如:
class MyController{
public:
MyController(){
...init...
}
void do_stuff(){
int value = 123;
}
};
我实例化MyController
一次,然后多次执行do_stuff()
。每次调用方法时程序是动态分配value
还是在实例化类时只动态分配一次?
如果是前者,将方法变量更改为类变量会不会更好,所以它只分配一次,并且没有冒险分割堆的风险?
答案 0 :(得分:2)
在典型的平台上,我不认为Arduino在这方面有所不同,int value
可能不会记忆。它将在一个登记册中。 (小变量,本地)。如果没有,它将在CPU堆栈上,它不会碎片化,并且只要函数返回就会被回收。
答案 1 :(得分:0)
我不能说MyController
将在何处实例化,但do_stuff
的每次调用都会在堆栈上实例化value
一次。只要剩下do_stuff
,就会释放此内存,并且由于没有递归,因此不会同时出现多个value
个实例。