繁体   English   中英

Memory 一个数组占用的空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM