【发布时间】:2014-11-21 12:12:26
【问题描述】:
这是一个基本问题,但我找不到明确的答案。希望有人可以阐明。
我想知道一个数组占用多少内存空间。
多个不同类型但具有相同组合字节大小的数组是否占用相同数量的内存?
一个数组是否与多个相同大小的数组合并后占用相同的内存空间?
一些例子:
(在我的系统 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 字节)?是否有任何其他数据存储在内存中(例如数组基地址)
谢谢。
【问题讨论】:
-
没有
padding、optimization和packing,理论上是可以的。 -
“一案”“取内存”是什么意思?每个对象都需要内存,如果它有存储空间,但是否需要任何内存取决于你做什么。如果从不引用该对象,编译器可能会选择不为其分配任何存储空间。您可以询问的唯一明智的事情是每个对象的 size。
-
您确定您的计算正确吗? int 通常占用 4 字节空间,因此每个 10 int 的两个数组将占用 80 字节,而不是 40
-
@SouravGhosh:
sizeof(int)在所有平台上不一定都是 4 个字节。 -
@barakmanos 我指的是 OP 提供的
char = 1 byte ; int = 2 bytes ; float = 4 bytes。