2016-07-29 5 views
0

限られたメモリ状況についての質問に対する回答のためにCコードを書いている間に、(長方形の)2次元配列の代わりにフラットな配列を使用してメモリ空間を節約できるかどうか疑問に思った。コンパイル時に知られている)。フラットアレイと2Dアレイは同じ量のメモリを使用しますか?

char a[200][100]は、char a[20000]より多くのメモリスペースを使用しますか?

(私はそれがいくつかの言語ではありません知っているが、これはCについて、具体的である)

+2

1-Dアレイと同じ量のメモリを占有するのは、そのアクセス方法だけです。 – ameyCU

答えて

1

[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]を使用します。これにより、コンパイラが計算を実行できます。

3

ので、例えばませんchar a[200][100]は、a[20000]よりも多くのメモリ空間を使用しますか?

いいえ、char a[200][100]char a[20000]として同じ量のメモリを使用します。

どちらも、20000charを保持できる連続したメモリが必要です。

関連する問題