Мне очень важно понять, будет ли размер структуры изменен, если я ее допустим определили ее так:
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 12324)]
public unsafe struct GammaControl
{
public Rgb Scale;
public Rgb Offset;
public Rgb[] GammaCurve
{
get
{
Rgb* realDataPtr = GammaCurvePtr;
Rgb[] arrayResult = new Rgb[1025];
for (int i = 0; i < 1025; i++)
{
arrayResult[i] = *(realDataPtr + i);
}
return arrayResult;
}
}
public Rgb* GammaCurvePtr
{
get
{
fixed (GammaControl* thisPtr = &this)
{
return (Rgb*) IntPtr.Add((IntPtr) thisPtr, 24);
}
}
}
}
И не затрутся ли GammaCurvePtr и GammaCurve если я передам указатель на структуру в неуправляемый код, где после Offset определен массив Rgb[1025] в который записываются данные?
И не затрутся ли GammaCurvePtr и GammaCurve если я передам указатель на структуру в неуправляемый код, где после Offset определен массив Rgb[1025] в который записываются данные?
Ответ - не затрутся. По крайней мере потому, что атрибут StructLayoutAttribute, согласно документации, задает взаимное расположение и размер полей (данных) структуры. А ваши GammaCurvePtr и GammaCurve в конечном счете являются методами структуры.
UPD.
Где хранятся методы?
Сами методы структуры хранятся в секции кода сборки, и оттуда они загружаются при первом запуске сборки. Методы являются частью типа, а не экземпляра типа. А память под переменные метода уже выделяется либо на стеке, либо в куче. Они не будут затирать память, выделенную под вашу структуру.
Продвижение своими сайтами как стратегия роста и независимости