C++ 每次访问映射值或将值分配给变量。它实际上是如何影响内存/功耗的?

C++ 每次访问映射值或将值分配给变量。它实际上是如何影响内存/功耗的?,c++,esp32,C++,Esp32,我正在使用ESP32进行一个个人项目 从维基百科上看,ESP32有这么多的内存 内存:520千字节SRAM (来自一个存储容量超过GB的系统,这听起来很可怕) 下面是我开始思考的问题,关于内存/功耗,我应该如何在ESP32中编程。(我对c++非常陌生) 如果我将一个对象分配给一个全局变量,只要它处于打开状态(增加永久内存消耗),内存大小就会从总量中获取,但我总是可以在需要时访问该对象 例如,如果我在每次需要时生成对象,它会使用CPU电源,因此会增加功耗(但它只使用临时内存) 您如何在ESP32编

我正在使用ESP32进行一个个人项目

从维基百科上看,ESP32有这么多的内存

内存:520千字节SRAM

(来自一个存储容量超过GB的系统,这听起来很可怕)

下面是我开始思考的问题,关于内存/功耗,我应该如何在ESP32中编程。(我对c++非常陌生)

  • 如果我将一个对象分配给一个全局变量,只要它处于打开状态(增加永久内存消耗),内存大小就会从总量中获取,但我总是可以在需要时访问该对象
  • 例如,如果我在每次需要时生成对象,它会使用CPU电源,因此会增加功耗(但它只使用临时内存)

  • 您如何在ESP32编程中管理这一点?由于内存大小和功耗(如果使用电池)非常关键,或者您通常不会对此考虑太多?

    分配对象所涉及的功耗是最小的—只需几条指令。在最小化功耗方面,这几乎是您最不担心的事情。没有人的电源管理设计能达到这一点。内存管理更为重要,但由于可用RAM的数量很少,并且可能存在堆碎片问题,因此不分配和释放太多内存也同样重要。谷歌“esp32堆碎片”获取更多信息。此外,尽管许多esp32程序员(尤其是使用Arduino内核的人)故意不使用全局变量,但它们通常是一种糟糕的编程实践,不应该过度使用。至少使用静态变量来避免污染全局名称空间,但最好在可以的时候构造代码以避免它们。您还可以使用局部变量,这些局部变量会占用堆栈空间,直到它们所在的作用域退出。一些对象(特别是
    String
    std::String
    )将根据需要从堆中分配空间。你关心少量的RAM是对的:)我想这是关于碎片的?