相当基本的问题,想象一下
int a = 5;
int[] b = new int[1];
b[0] = 5;
a
和b
同时占用内存中的相同空间吗?我假设b
大于a
,因为它必须在某处存储自己的长度,所以我认为它会IntPtr.Size
更大,但我不确定。
我正在尝试编写在运行时确定数组长度的代码,并且可以是1或更大(< 10)。我不知道如果长度设置为1我是否应该创建一个数组,或者在代码中有一个特殊情况并且只使用底层类型为length == 1.
我知道a
是值类型,而b
是引用类型。
答案 0 :(得分:2)
不,a
和b
不会占用相同数量的内存。
数组容器本身就是一个对象。在某处,它必须存储与其包含的元素数量有关的数据。所以它的大小不会为零。
答案 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>仅将a
和b
作为不相关的变量进行比较。