int数组中的内存是如何分配的

Posted

技术标签:

【中文标题】int数组中的内存是如何分配的【英文标题】:How is memory allocated in int array 【发布时间】:2013-10-03 16:00:21 【问题描述】:

一个int数组占用多少空间?或者一个 int 数组消耗多少空间(以字节为单位),看起来像这样:

 int[] SampleArray=new int[]1,2,3,4;

内存分配语言是特定的吗?

谢谢大家

【问题讨论】:

你忘记了Cphtyon标签。 这是非常特定于语言的。先选择一种语言。 在java中,有一个可以是固定大小的标题部分和一个可变的对齐添加,因此对于64位系统/os/jvm,它必须大于elementNumber*4+8。跨度> 【参考方案1】:

由于您添加了很多语言标签,我想为 C# 编写。在 C# 中,这取决于操作系统。

对于 32 位,每个 int 为 4 字节,4 字节也用于引用对象,即 4 * 4 + 4 = 20 字节

对于 64 位,每个 int 为 4 字节,8 字节也用于引用对象,即 4 * 4 + 8 = 24 字节

来自第 22 页中的C# 5.0 in a Nutshell;

对对象的每个引用都需要额外的四个或八个字节, 取决于 .NET 运行时是在 32 位还是 64 位上运行 平台。

【讨论】:

所以它是 80 字节,因为我使用的是 32 位操作系统......你也可以解释一下字节以供参考,这是我卡住的地方 还有 12 字节的数组对象本身的开销(对于 32 位代码) @MatthewWatson 那 12 个字节是干什么用的?【参考方案2】:

在 C++ 中,new int[4]1, 2, 3, 4 实际分配的内存量是实现定义的,但数组的大小将是 sizeof(int)*4

【讨论】:

当我写这个答案时,这个问题有 c++ 标签。 语法不是C++,所以去掉了标签。【参考方案3】:

问题是:内存分配语言是特定的吗? 是的,内存分配是特定于语言的..它因语言而异.. 对于经验: sizeof(int)*4

在 java 中 int 大小为 4byte,因此内存消耗为:4*4=16bytes

【讨论】:

【参考方案4】:

这既取决于语言,也取决于操作系统。

你需要 4 个整数。通常一个整数是 2 或 4 个字节(在大多数系统上大多为​​ 4),但要确保检查 sizeof(int)。

(同时请记住,值可能因操作系统而异),例如 MSB 优先或 LSB 优先(或在使用 4 个字节的情况下混合使用)。

【讨论】:

【参考方案5】:

在 Java 中,int[] 数组是一个对象,它在内存中由标头(x86 为 8 个字节)和 int 长度字段(4 个字节)表示,然后是 int 数组(arrayLength * 4)。

   approxSize = 8 + 4 + 4 * arraylength 

在这里查看更多http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

【讨论】:

以上是关于int数组中的内存是如何分配的的主要内容,如果未能解决你的问题,请参考以下文章

如何确保二维数组在内存中连续分配

在 C++ 中的 2D 动态内存分配数组中释放分配的内存

C语言申请内存?

java中创建数组时怎么分配内存?

int 数组的内存分配,在方法中设置

JAVA里String数组在内存分配中分配的空间每个占几个字节?