数组占用的内存空间

Cal*_*ian 5 c memory arrays

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

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

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

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

一些例子:

(在我的系统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];
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Vla*_*cow 5

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

char array_nr1[40];

printf( "%zu\n", sizeof( array_nr1 ) );
Run Code Online (Sandbox Code Playgroud)

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

您可以为数组编写相同的内容

int array_nr1[10];
Run Code Online (Sandbox Code Playgroud)

但最好通过将其元素的sizeof乘以元素的numk来计算数组的大小.

所以这个记录

sizeof( array_nr1 )
Run Code Online (Sandbox Code Playgroud)

相当于

10 * sizeof( int )
Run Code Online (Sandbox Code Playgroud)

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

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

int array_nr1[10];
int array_nr2[10]; 
Run Code Online (Sandbox Code Playgroud)

占用2 * ( 10 * sizeof( int ) )=> 40个字节.它与数组占用的内存容量相同

char array_nr1[40];
Run Code Online (Sandbox Code Playgroud)

如果sizeof( int )等于4,则阵列占用不同的内存量.

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

char array_nr1[10];
int array_nr2[5];
float array_nr3[5];
Run Code Online (Sandbox Code Playgroud)

占用与数组相同的内存量

char array_nr1[40];
Run Code Online (Sandbox Code Playgroud)

因为

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