作者spider391 (小乖)
看板C_Sharp
标题[问题] C# sizeof 函式取得 struct(内含复杂型别) 大小
时间Tue Mar 24 11:07:19 2009
我问的问题跟 4889 篇类似,不过想请教高手建议 C# 中 struct 的用法
之前使用C的结构 struct
============== C =======================
struct
{
unsigned char SlaveAddress;
unsigned char RegisterCount;
unsigned short Clock;
unsigned short line_per_frame;
unsigned short pixel_per_line;
unsigned char dummy[8];
char name[16];
} sensor_para;
int inlen = sizeof( sensor_para );
========================================
可以得到此 struct 的大小 1+1+2+2+2+8+16 = 32
但我用C#时
=================C#=====================
public struct SensorP
{
public byte SlaveAddress;
public byte RegisterCount;
public short Clock;
public short line_per_frame;
public short pixel_per_line;
public static char[] dummy =new char[8];
public static char[] name = new char[16];
};
inlen = sizeof(SensorP);
========================================
此时得到的大小为 1+1+2+2+2 = 8; (若是将 static 修饰字拿掉会有 compiler error)
原本我以为至少会有 dummy , name 的参考值大小 8+4+4 = 20
可是 sizeof 的结果只有计算简单型别的大小
在C语言中,对struct的运算常常会有像
============== C =======================
memset(sensor_para,0,sizof(sensor_para));
========================================
memory reset 的动作。
那请问一下 C# 高手是如何做到上述的功能或是对於 struct 的使用有什麽建议
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.97.179
1F:→ fphoenix923:我使用C# struct的感想是,没把握就使用class。 03/24 22:13
2F:推 hatasum:同上.... 03/25 00:11
3F:推 tomex:C#的struct有很多修饰语,可以指定size及记忆体排放的顺序 03/25 07:56
4F:推 tomex:倘若你是要应用在c++等互通上,肯定要学习这方面的用法 03/25 07:56
5F:→ spider391:谢谢 我会去查查 struct 修饰字的用法 03/25 08:57
6F:推 horngsh:MSDN上可以查查Interop下的各类别的用法 03/25 10:44
7F:推 saitoh:sizeof只会算valued type的大小... 03/25 11:16