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

本文关键字:类型 单个 变量 数组 | 更新日期: 2023-09-27 17:58:11

相当基本的问题,想象

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

ab在内存中占用的空间是否相同?我假设ba大,因为它必须将自己的长度存储在某个地方,所以我认为它会比IntPtr.Size大,但我不确定。

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

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

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

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

数组容器本身就是一个对象。在某个地方,它必须存储与它所包含的元素数量相关的数据。所以它的大小将为非零。

不用担心。拥有一个由单个元素和单个值类型组成的数组所带来的好处可以忽略不计。

对于您的问题:正如您已经知道的,数组是一种引用类型,因此对于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.

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

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

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