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;
内存分配语言是特定的吗?
谢谢大家
【问题讨论】:
你忘记了C
和phtyon
标签。
这是非常特定于语言的。先选择一种语言。
在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数组中的内存是如何分配的的主要内容,如果未能解决你的问题,请参考以下文章