0

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

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

另外,由于我读到了包含大量字符串的程序,因此最好将它们存储在程序空间中,进行诸如

lcd.print("Hello")

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

4

2 回答 2

2

对于第二个问题:

宏会将字符串存储在F()progmen 中,而不是使用RAM,因此您不再有此问题:

lcd.print(F("Hello"));
于 2012-08-07T17:11:59.110 回答
1

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

  1. 在变量超出范围之后,例如,在函数返回之后,您不能使用指向本地声明变量的指针。不要从您的函数返回指向本地数组的指针!) - 但是,从声明块/函数中调用其他函数时,将该指针传递给其他函数是完全合法

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

  3. 这些变量使用的内存量计入编译时“已用”RAM 的计算中。
于 2012-08-10T12:21:27.540 回答