0

グローバルスコープで配列を宣言すると、それを格納するためにメモリを使い果たします。ただし、関数(など)内で配列(2つの型を使用しています。1つはchar配列で、もう1つはint配列です)を宣言すると、setup()配列がスコープ外になると、メモリは自動的に解放されますか?

これは、intやbyteなどの一部の変数で発生すると思います。これが配列にも当てはまるかどうかを知りたかっただけです。

また、文字列がたくさん含まれているプログラムの場合は、プログラムスペースに格納するのが最適であると読んだので、次のような呼び出しを行います。

lcd.print("Hello")

関数が終了した後も「Hello」文字列のメモリを使い果たしますか(print関数が他の場所に保存していないと仮定します)?

4

2 に答える 2

2

2 番目の質問に:

マクロはRAMF()を使用する代わりにプログラムに文字列を保存するので、この問題はもうありません:

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

あなたの最初の質問について:はい。関数内で宣言されたすべての変数は、関数が返されて自動的に解放されるまで、内部でのみ有効です。これにはいくつかの意味があります。

  1. たとえば、関数が返された後など、変数がスコープ外になった後は、ローカルで宣言された変数へのポインターを使用しないでください。(関数からローカル配列へのポインターを返さないでください!) - ただし、宣言ブロック/関数から呼び出すときに、そのポインターを他の関数に渡すことは完全に合法です。

  2. ローカル変数はローカル スタックに格納されるため、関数が呼び出されたときに対応するバイト数だけスタックが大きくなるのに十分なスペースが残っている必要があります。

  3. これらの変数によって使用されるメモリの量は、コンパイル時の「使用済み」RAM の計算では考慮されません
于 2012-08-10T12:21:27.540 に答える