Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组占用的内存空间_C_Arrays_Memory - Fatal编程技术网

C 数组占用的内存空间

C 数组占用的内存空间,c,arrays,memory,C,Arrays,Memory,这是一个基本问题,但我找不到确切的答案。希望有人能给我们一些启示 我想知道一个数组占用多少内存空间 不同类型但组合字节大小相同的多个数组是否占用相同的内存量 一个阵列占用的内存空间是否与多个大小相同的阵列占用的内存空间相同 一些例子: (在我的系统8051微控制器上, char=1字节; int=2字节; float=4字节;) 是否所有5个案例占用相同的内存量(40字节)?内存中是否存储了任何其他数据(例如阵列基址) 谢谢。数组占用的内存可以通过使用sizeof运算符获得。比如说 char a

这是一个基本问题,但我找不到确切的答案。希望有人能给我们一些启示

我想知道一个数组占用多少内存空间

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

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

一些例子:

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

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


谢谢。

数组占用的内存可以通过使用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字节。

没有任何
填充
优化
打包
,从理论上讲,是的。“案例”占用内存意味着什么?每个对象都需要内存(如果它有存储),但是否需要内存取决于您的操作。如果对象从未被引用,编译器可能会选择不为其分配任何存储。你能问的唯一明智的事情是每个物体的大小。你确定你计算的正确吗?int通常占用4字节的空间,因此每个10 int的两个数组占用80字节,而不是1字节40@SouravGhosh:
sizeof(int)
在所有平台上不一定都是4字节。@barakmanos我指的是
char=1字节;int=2字节;浮点=4字节
由OP提供。
char array_nr1[40];