长度为1的数组是否与同一类型的单个变量大小相同?

时间:2014-04-14 14:58:33

标签: c# arrays

相当基本的问题,想象一下

int a = 5;
int[] b = new int[1];
b[0] = 5;

ab同时占用内存中的相同空间吗?我假设b大于a,因为它必须在某处存储自己的长度,所以我认为它会IntPtr.Size更大,但我不确定。

我正在尝试编写在运行时确定数组长度的代码,并且可以是1或更大(< 10)。我不知道如果长度设置为1我是否应该创建一个数组,或者在代码中有一个特殊情况并且只使用底层类型为length == 1.

我知道a是值类型,而b是引用类型。

3 个答案:

答案 0 :(得分:2)

不,ab不会占用相同数量的内存。

数组容器本身就是一个对象。在某处,它必须存储与其包含的元素数量有关的数据。所以它的大小不会为零。

答案 1 :(得分:0)

不要担心。无论您使用单个元素数组和单个值类型获得什么都可以忽略不计。

对于您的问题:正如您所知,数组是一种引用类型,因此对于32位机器,它将需要4字节引用,对于64位机器,它将需要8个字节来存储引用。然后是数组中每个项目所需的额外内存。

所以

int a = 5; // 4 bytes

int[] array = new int[1]; //4 bytes or 8 bytes for reference (for 32 bit/64bit)
                          //4 bytes for `int` element.

答案 2 :(得分:0)

a是一个32位的int。它将占用32位。

b是一种引用类型,它将占用一个内存字。在32位系统上,它是32位。在64位系统上,64位。

当然,使用数组会导致内存在为b本身分配的空间之外消耗,即b变量引用的实际数组内存,但是< em>仅将ab作为不相关的变量进行比较。