例如,在VB.NET中:
Dim strArray(5) As String
据我了解,因为这是一个数组,计算机将为5个元素中的每一个分配连续的内存位置。但是为这五个元素中的每一个分配了多少空间?如果我决定在阵列的第2位放置一个5MB的文本块怎么办?
值类型是否不同(例如,Int32数组)?我认为如果必须为单个元素调整内存块,则必须创建一个全新的数组以保留连续的内存功能。
答案 0 :(得分:4)
如果你创建一个引用类型的数组,我认为只有引用保存在变量中。那就是:
Dim strArray(5) As String
实际上只有6个引用大,每个引用有4个字节(不确定)。
实际数据将(可能)存储在堆上。
这并不意味着更改字符串的长度是微不足道的 - 每次更改时仍必须重新分配它们。
答案 1 :(得分:3)
在.NET中:
stackalloc
之类的东西)所以在你的情况下,数组对象本身将是
normal object overhead
+ 4 bytes for the length (IIRC)
+ (4 or 8 bytes per element) * 6 elements
数组中的引用可以引用内存中任何位置的任何字符串,或Nothing
。
对于值类型,数组直接保存值 - 因此Int32
的数组将占用:
normal object overhead
+ 4 bytes for the length
+ 4 bytes per element
Int64
的数组将采用:
normal object overhead
+ 4 bytes for the length
+ 8 bytes per element
(等)。尽管逻辑上只是一个位,但布尔值每个元素占用一个字节。