我正在测试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;
}
我是否必须检查结构中的每个字段的大小?