2016-12-30 12 views
-3

私はC++で作業しています。私はこの本を私の本で見ました。 この宣言によって占められるバイト数はいくつですか?この配列はメモリ内で何バイト占有していますか?

float** p[5][10][2]; 

そのマシンのメモリに関する追加情報はありませんか? これについて明示的に回答することは可能でしょうか?

+6

確か: 'sizeof(p)'。 –

+0

@DietmarKühlは特定のマシンに依存していますか?例えば200はおそらく答えかどうか? – Delsa

+2

それはマシンに依存し、実際に使用されているマシンでは '200'が答えになることはまずありません(過去のいくつかのマシンとカスタムCPUの答えかもしれません)。 32ビット版と64ビット版のどちらを使用するかにより、400または800の可能性が高くなります。 –

答えて

1

プラットフォームによって異なります。

x86プラットフォームでは、プラットフォーム内のポインタが4バイトを占めるため、x86プラットフォームでは5 * 10 * 2 * 4バイトを占有します。

したがって、x64プラットフォームでは5 * 10 * 2 * 8バイトを占めます。

3

実装に依存します。だから、あなたと知り合うだろう:

float** p[5][10][2]; 
std::cout << "sizeof(p) == " << sizeof(p) << '\n'; 
+0

それは別のマシンで異なる番号ですか? – Delsa

+0

はい、それは "実装に依存する"という意味です。 – stefaanv

2

ちょうど明確にする。ここでは、要素が何か/ floatへのポインタである3D行列を宣言しています。あなたは5x10x2 = 100のポインタを持ちポインタは4bまたは8bを占めているので、答えは400bまたは800bです。

行列の要素が浮動するので、100 * sizeof(float)でこれを混乱させないでください。

関連する問題