2016-07-22 4 views
-3

私が知っているように、C++は、2D配列値をメモリブロック(連続仮想メモリ?)に格納することによって配列を格納します。C#/ Javaは2D配列をどのように格納するのですか?C++とは違いますか?

「2D配列を格納するためにネストされた配列を使用するとC/C++では効率的ですが、Javaやその他のメモリ管理言語で効率的ですが、実際には配列要素は列の配列への参照です。これは、あなたが望むようにメモリに優しくない可能性があります。

「列の配列への参照」は、メモリ上の多数の小さなブロックに実際に格納されていることを意味しますか?

更新

申し訳ありませんが、私の質問は、「多くの小さなブロックでJavaストア2次元配列した場合、どのようにこれは 『メモリ管理』のは簡単です」すべきですか?

+2

これを書いた人は、実際には配列の配列である 'int [] []'を考えているでしょう。それだけでJavaにはありますが、C#には長方形の配列である 'int [、]'もあります。これは連続したメモリの単一のチャンクです。 –

+0

"列の配列への参照"は実際にはメモリ上の多数の小さなブロックに格納されていることを意味しますか? - **はい**(Javaで)しかし、ここで長所と短所は何ですか? - あなたの質問を洗練してください。それは、特定の指示なしに意見を求めているだけなので、SOには適していません。 –

+0

いいえ、Javaに「実際の」2次元配列がないことを意味します(C#も同様です)。代わりにJavaでは配列の配列を持つことができます。配列1(行)の各インデックスは配列そのもの(列)です。つまり、列がギザギザになることもあります。 – Tom

答えて

1

MxN行列では、N個の配列に対してM個の参照があります。そしてそれは、Cで関数の引数として配列を渡したいときに2次元を伝えなければならないという理由です。Javaではそれをする必要はありません。

+0

あなたの得点を得ました。ありがとう! – milanow

関連する問題