数组占用的内存空间

时间:2014-11-21 12:12:27

标签: c arrays memory

这是一个基本问题,但我找不到明确的答案。希望有人可以解释一下。

我想知道一个阵列占用多少内存空间。

不同类型但具有相同组合字节大小的多个数组是否占用相同的内存量?

阵列是否与具有相同大小的多个阵列占用相同的内存空间?

一些例子:

(在我的系统8051微控制器上,       char = 1 byte;       int = 2 bytes ;       float = 4 bytes;

//case 1
char array_nr1[40];

//case 2
char array_nr1[10];
char array_nr2[10]; 
char array_nr3[10]; 
char array_nr4[10]; 

//case 3 
int array_nr1[10];
int array_nr2[10]; 

//case 4
float array_nr1[10];

//case 5 
char array_nr1[10];
int array_nr2[5];
float array_nr3[5];

是否所有5个案例都占用相同数量的内存(40个字节)?是否有任何其他数据存储在内存中(例如阵列基地址)

谢谢。

1 个答案:

答案 0 :(得分:5)

使用sizeof运算符可以获得数组占用的内存。例如

char array_nr1[40];

printf( "%zu\n", sizeof( array_nr1 ) );

输出将为40,因为保证数组元素大小的sizeof( char )等于1

您可以为数组

编写相同的内容
int array_nr1[10];

但最好通过将元素的sizeof乘以元素的numkber来计算数组的大小。

所以这条记录

sizeof( array_nr1 )

相当于

10 * sizeof( int )

所以问题是int类型对象的大小是多少?这取决于实施。例如,sizeof(int)可以等于2或4或其他值。

所以在你的情况下如果sizeof( int )等于2那么这两个数组

int array_nr1[10];
int array_nr2[10]; 

占用2 * ( 10 * sizeof( int ) ) => 40个字节。它与数组

占用的内存量相同
char array_nr1[40];

如果sizeof( int )等于4,则数组占用不同的内存量。

同样的观察对float类型的数组有效。通常float类型的对象的大小(以字节为单位)等于4.因此,如果sizeof( int )等于2,那么这些数组

char array_nr1[10];
int array_nr2[5];
float array_nr3[5];

占用与数组相同的内存量

char array_nr1[40];

,因为

10 * sizeof(char)+ 5 * sizeof(int)+ 5 * sizeof(float)=> 10 * 1 + 5 * 2 + 5 * 4 => 40个字节。