限られたメモリ状況についての質問に対する回答のためにCコードを書いている間に、(長方形の)2次元配列の代わりにフラットな配列を使用してメモリ空間を節約できるかどうか疑問に思った。コンパイル時に知られている)。フラットアレイと2Dアレイは同じ量のメモリを使用しますか?
char a[200][100]
は、char a[20000]
より多くのメモリスペースを使用しますか?
(私はそれがいくつかの言語ではありません知っているが、これはCについて、具体的である)
限られたメモリ状況についての質問に対する回答のためにCコードを書いている間に、(長方形の)2次元配列の代わりにフラットな配列を使用してメモリ空間を節約できるかどうか疑問に思った。コンパイル時に知られている)。フラットアレイと2Dアレイは同じ量のメモリを使用しますか?
char a[200][100]
は、char a[20000]
より多くのメモリスペースを使用しますか?
(私はそれがいくつかの言語ではありません知っているが、これはCについて、具体的である)
[200] [100]と[20000]の間に違いはありません。 a [200] [100] Cはオフセットを計算するために列の数を使用し、aはchar型のメモリへのポインタにすぎません。あなたが[20] [5]を望むなら、Cは[20] [5] = *(a + 20 * 100 + 5)を計算します。私はCが行のメジャーである(または計算で最初に行を使用する)ことを言及する必要があります。
あなたの配列の寸法を知っていれば、[20000]で同じ計算を行うことができます。
ソフトウェア通信の観点から見ると、静的であれば、構造は200行×100列の通信としてchar [200] [100]を使用します。これにより、コンパイラが計算を実行できます。
ので、例えばません
char a[200][100]
は、a[20000]
よりも多くのメモリ空間を使用しますか?
いいえ、char a[200][100]
はchar a[20000]
として同じ量のメモリを使用します。
どちらも、20000
char
を保持できる連続したメモリが必要です。
1-Dアレイと同じ量のメモリを占有するのは、そのアクセス方法だけです。 – ameyCU