如何在C++中最小化动态内存分配?
我正在为Arduino Mega写一些草图,有时它会挂起来,我怀疑它正在遭受内存碎片的困扰。但是,我有点不清楚何时分配变量。
如果我有一个带有方法的类do_stuff
:
class MyController{
public:
MyController(){
...init...
}
void do_stuff(){
int value = 123;
}
};
我实例化MyController
一次,然后多次执行do_stuff()
。程序是在我每次调用该方法时动态分配value
,还是在我实例化类时只动态分配一次?
如果是前者,是否最好将方法变量更改为类变量,以便它只分配一次,并且不会有碎片堆的风险?
在典型的平台上,我不相信Arduino在这方面有什么不同,int value
可能不会占用内存。它将在登记册中。(小变量,局部(。如果没有,它将位于 CPU 堆栈上,该堆栈不会碎片化,并且每当函数返回时都会回收。
我不能说MyController
在哪里实例化,但是每次调用do_stuff
都会在堆栈上实例化一次value
。一旦do_stuff
离开,此内存将被释放,并且由于没有递归,因此不会同时出现多个value
实例。