在C语言中,如果我有以下结构体
Data
:struct __attribute__((__packed__)) Data
{
double x;
int y;
};
然后创建一个名为val
的该结构体的数组:
Data val[3];
val
中存储的所有值(即 val[0].x
, val[0].y
, val[1].x
, val[1].y
, val[2].x
和 val[2].y
)在内存中是连续的。
现在,在 C# 中有以下结构体:
[StructLayout(LayoutKind.Sequential, Pack=0)]
struct Data
{
public double x;
public int y;
}
然后创建一个名为val
的结构体数组:
Data val[3];
我期望存储在val
中的所有值都是连续存储在内存中的,但实际上它们并不是(基于我的测试结果)。具体来说,val[0].x
和val[0].y
是连续存储的,但它们与val[1]
不是连续的(而且val[1]
也不与val[2]
连续)。
我的问题是:在C#中,我如何创建一个特定结构的变量(它是一个数组),使其所有元素和成员都在内存中连续存储?
fixed
指针固定到&val[0]
上吗? - JclPack=0
意味着“默认填充”,而你正在查看的是最少可能的填充。在C#中,这将是Pack=1
。 - JclPack=1
可能会导致问题(速度和/或稳定性)。你是出于托管/本机互操作的原因还是其他原因在这样做? - Flydog57