【问题标题】:array used the same memory space?数组使用相同的内存空间?
【发布时间】:2012-10-25 18:24:53
【问题描述】:

我在主程序中有一个这样的数组:(我正在使用 C# 在 asp.net 中编程)

double[][] example= new double[][];

对于这个例子,让我们想象一个 10*2 的数组。

所以接下来我要做的就是将此数组发送到另一个函数,如下所示:

usedarray(example);
public double[][] usedarray(double[][]examplearray)
{

}

我知道每个空间中的双精度数组只有 64 位浮点数,因此该数组将有一个 1280 位用于此示例的内存,但何时发送到使用相同内存空间的函数?还是它使用了一套全新的内存空间?

【问题讨论】:

    标签: c# asp.net memory


    【解决方案1】:

    数组是引用类型,而不是值类型。这意味着变量 examplearray 实际上并不包含 1280 位数据,它仅包含对存储在其他地方的实际数据的引用(有时也称为指针)(出于本文的目的, “其他地方”实际上在哪里并不重要)。正如您在那里所做的那样,将该变量传递给一个方法,只是复制该引用(32 位或 64 位,具体取决于系统),而不是底层的 1280 位数据。

    【讨论】:

    • 它不知道谢谢你的回答,现在的问题是我怎样才能知道这个数组使用了多少内存,我印象深刻,因为双精度数是 64 位因此每个空间中的数组将具有相同的 64 位
    • @JUAN 好吧,你拥有的是一个数组数组,而不仅仅是一个数组,所以example 指向一个结构,其中包含对其他数组的许多其他引用。引用的大小是 32 或 64 位。一旦您创建了许多其他数组(您还没有这样做),那么这些引用中的每一个都将指向另一个包含一些标头信息的数据结构,然后还有 X * 64 位,其中 X 是该数组的大小.这就是实际数据所在的位置。
    • @Servi 是的,我没有写数组的创建,所以接下来要做的是在 for 'example[N]=new double[2]' 中,所以我将拥有:'example [N][0], example[N][1]' 这将意味着他们每个人只有64位,总共64*N?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多