[英]Memory space occupied by an array
这是一个基本问题,但我找不到明确的答案。 希望有人能阐明一些问题。
我想知道一个数组占用多少 memory 空间。
不同类型但具有相同组合字节大小的多个 arrays 是否占用相同数量的 memory?
一个数组占用的空间是否与多个 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 个案例都占用相同数量的 memory(40 个字节)? 是否有任何其他数据存储在 memory 上(例如数组基地址)
谢谢你。
数组占用的内存可以通过使用sizeof运算符获得。 例如
char array_nr1[40];
printf( "%zu\n", sizeof( array_nr1 ) );
输出为40,因为sizeof( char )
等于数组元素的大小,保证等于1
您可以为数组编写相同的示例
int array_nr1[10];
但是最好通过将其元素的sizeof乘以元素数量来计算数组的大小。
所以这个记录
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个字节
来自 C 如何编程 p.297
要计算数组使用的 memory 的数量,请将元素数乘以每个元素占用的字节大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.