如何最小化嵌入式平台上的内存分配?

时间:2018-04-11 13:17:19

标签: c++ arduino

如何最小化C ++中的动态内存分配?

我正在为Arduino Mega写一些草图,有时它会挂起,我怀疑它是因为内存碎片而受到影响。但是,关于何时分配变量,我有点不清楚。

如果我有一个方法do_stuff的类,如:

class MyController{

public:
    MyController(){
        ...init...
    }

    void do_stuff(){
        int value = 123;
    }
};

我实例化MyController一次,然后多次执行do_stuff()。每次调用方法时程序是动态分配value还是在实例化类时只动态分配一次?

如果是前者,将方法变量更改为类变量会不会更好,所以它只分配一次,并且没有冒险分割堆的风险?

2 个答案:

答案 0 :(得分:2)

在典型的平台上,我不认为Arduino在这方面有所不同,int value可能不会记忆。它将在一个登记册中。 (小变量,本地)。如果没有,它将在CPU堆栈上,它不会碎片化,并且只要函数返回就会被回收。

答案 1 :(得分:0)

我不能说MyController将在何处实例化,但do_stuff的每次调用都会在堆栈上实例化value一次。只要剩下do_stuff,就会释放此内存,并且由于没有递归,因此不会同时出现多个value个实例。