C#如何存储在存储器阵列(C# How are arrays stored in memory)

2019-09-18 14:28发布

我想我的主要问题是,这将永远只要我不重新初始化(新字节[#])的这是作为参数传递的数组工作?

static unsafe decimal GetDecimal(byte[] ba)
{
    decimal* decimal_PTR;
    fixed (byte* byte_PTR = &ba[0])
    {
        decimal_PTR = ((decimal*)byte_PTR);
    }
    return *decimal_PTR;
}

我不知道C#如何处理数组在内存中。 我甚至不知道他们的托管类型,直到大约一个小时前。 我只是想知道,如果我在一个十进制通过为一个byte [],将它总是返回正确的值? 您可以提供的任何其他信息表示赞赏。

Answer 1:

之后@ MJLaukala的澄清过评论:

  1. 在.net数组是邻接存储器就像任何其他语言的一个块。 但是,与C / C ++这个块不仅存储的数组元素,还包括其他“信息”包括秩和阵列的长度。 话虽如此,与BA [0]将返回指向数组的第一个元素,你可以放心地递增指针去,直到最后一个元素。 ba.Length将提供数组中元素的数目。

  2. 现在,如果你是肯定的字节数组表示十进制正是你的代码将正常工作。

十进制(128位)的存储器布局:

前2个字节是0

第三字节包含0和28之间的值,表示10的幂来划分96位整数部分通过,以产生十进制值

第四字节:第一7位均为零,第八位表示十进制的符号(1个含义负)

接下来的12个字节:十进制的整数部分。



文章来源: C# How are arrays stored in memory