Arduino阵列内存使用情况

时间:2012-08-07 17:08:36

标签: c++ arrays string arduino

如果我在全局范围内声明一个数组,它会占用内存来存储它。但是,如果我在一个函数(例如setup())中声明一个数组(我使用两个类型,一个是char数组,而另一个是一个int数组),一旦数组进入,将自动释放内存超出范围?

我相信这会发生在某些变量上,例如int或byte。我只是想知道这是否也适用于数组。

另外,因为我读到包含大量字符串的程序,所以最好将它们存储在程序空间中,进行调用,例如

lcd.print("Hello")

在函数结束后仍然用尽“Hello”字符串的内存(假设print函数没有在其他地方存储它)?

2 个答案:

答案 0 :(得分:2)

第二个问题:

F()宏会在进程中存储字符串而不是使用RAM,因此您不再遇到此问题:

lcd.print(F("Hello"));

答案 1 :(得分:1)

关于你的第一个问题: 是。在函数内声明的所有变量仅在函数内部有效,然后自动释放。这有一些含义:

  1. 在变量超出范围后,您必须使用指向本地声明的变量的指针,例如,在函数返回后。 (不要从你的函数返回一个指向本地数组的指针!) - 然而,当从 中声明它时,将该指针传递给其他函数是完全合法的。块/功能。

  2. 本地变量存储在本地堆栈中,因此在调用函数时,需要有足够的空间让堆栈增加相应的字节数。

  3. 在编译时计算“使用过的”RAM
  4. 时,这些变量使用的内存量