C++ Arduino阵列内存使用率

C++ Arduino阵列内存使用率,c++,arrays,string,arduino,C++,Arrays,String,Arduino,如果我在全局范围内声明一个数组,它将使用内存来存储它。但是,如果我在函数(例如setup())中声明一个数组(我使用两种类型,一种是char数组,另一种是int数组),那么一旦数组超出范围,内存是否会自动释放 我相信这会发生在一些变量上,比如int或byte。我只是想知道这是否也适用于数组 另外,因为我读到过,对于包含大量字符串的程序,最好将它们存储在程序空间中 lcd.print("Hello") 函数结束后,仍然会使用“Hello”字符串的内存(假设打印函数没有将其存储在其他地方)?到第二

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

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

另外,因为我读到过,对于包含大量字符串的程序,最好将它们存储在程序空间中

lcd.print("Hello")

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

到第二个问题:

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

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

关于第二个问题:

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

lcd.print(F("Hello"));
关于你的第一个问题: 对函数中声明的所有变量仅在函数返回并自动释放之前在函数中有效。这有一些影响:

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

  • 局部变量存储在局部堆栈上,因此在调用函数时,堆栈需要有足够的空间来增加相应的字节数

  • 在编译时计算“已用”RAM时,这些变量使用的内存量没有考虑在内
  • 关于你的第一个问题: 对函数中声明的所有变量仅在函数返回并自动释放之前在函数中有效。这有一些影响:

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

  • 局部变量存储在局部堆栈上,因此在调用函数时,堆栈需要有足够的空间来增加相应的字节数

  • 在编译时计算“已用”RAM时,这些变量使用的内存量没有考虑在内

  • 既然它是一个宏,我只需要添加F()就可以了?有几个后缀为_P的函数用于处理程序内存。如果你使用Arduino IDE,我认为这应该适用于你正在使用的任何字符串。试一试。既然它是一个宏,我可以添加F()就行了?有几个后缀为_P的函数用于处理程序内存。如果你使用Arduino IDE,我认为这应该适用于你正在使用的任何字符串。试一试。谢谢你提供了一个非常详细和翔实的答案。它比我想象的更详细地回答了我的问题。谢谢你提供了一个非常详细和信息丰富的答案。它比我想象的更详细地回答了我的问题。