2016-12-30 38 views
-3

我正在使用C++,我在我的书中看到了这个问题。 这个声明将占用多少字节?该阵列在内存中占用多少字节?

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

并且没有关于该机器的内存的额外信息? 是否可以告诉明确的答案?

+6

当然:'sizeof(p)'。 –

+0

@DietmarKühl是依赖于特定的机器?例如200可能回答与否? – Delsa

+2

它取决于机器,'200'不太可能成为任何实际使用的机器的答案(它可能是过去一些机器和一些定制CPU的答案)。它更可能是400或800,具体取决于你是32位还是64位版本。 –

回答

1

这取决于平台。

在x86平台上,它占用5 * 10 * 2 * 4个字节,因为任何指针在平台中占用4个字节。

因此,它在x64平台中占用5 * 10 * 2 * 8个字节。

3

它取决于实现。所以你会发现:

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

它在不同的机器上有不同的数字吗? – Delsa

+0

是的,这就是“依赖于实现”的意思。 – stefaanv

2

只是为了澄清。在这里,你正在声明一个3D矩阵,其中的元素是指向某些东西/浮点的指针。既然你有5x10x2 = 100个指针,指针占据4b或8b,答案可以是400b或800b。

不要把它与100 * sizeof(float)混淆,因为矩阵的元素不是浮动的。