在获取正确的数据大小时遇到​​问题(结构)

时间:2015-10-09 08:28:52

标签: c# performance unsafe value-type

我正在测试struct vs class vs Tuple<int,char[]> 在托管与unsafe并行和正常执行中 因此,为了获得在每种情况下处理的数据大小,我在获取valueType

的正确大小时遇到​​问题
public struct Schar
{
    public int V;
    public char[] ChrArr;
}
Schar tSchr = new Schar()//set value: V=1,ChrArr= 'a','b','c','d','e'...

现在当我设置tSchr时,无论ChrArr的大小如何,我都会得到相同的结果 (8 @ I386和16 @ AMD64

我已尝试sizeOf / Marshal

    unsafe int GetDataSizeOf(System.ValueType TestedSchar)//could be any Structure not specifically 'Schar'
    {
        int rt=Marshal.SizeOf(TestedSchar);
            //return sizeof(TestedSchar);
    }

我可以将Length参数添加到GetDataSizeOf并加倍,但只有当我通过Schar类型的struct而不是其他任何类型时,它才会正常。 如果另一个结构将有2个char[]字段或其他形式的其他变体,那么计算长度就不合适了......

如何在非托管中实现大小的正确方法?

更新

下一个结构是blittbale 我通过GetDataSizeOf()

测试时确实获得了正确的尺寸
public unsafe struct chars32A
{
    public int V1;
    public int V2;
}

如果我用以下结构制作另一个结构如下,

public unsafe struct chars32
{
    public chars32A Fld1;
    public chars32A Fld2;
}

我是否必须检查结构中的每个字段的大小?

0 个答案:

没有答案