Delphi中的Type用C#怎么描述?
Delphi:TypeTmyType=(a,b,c,d);TUserInfo=packedRecordCode,LoginName:string[15];Name:str...
Delphi:
Type
TmyType =(a,b,c,d);
TUserInfo = packed Record
Code,
LoginName : string[15];
Name : string[20];
end;
以上格式用C#怎么描述? 展开
Type
TmyType =(a,b,c,d);
TUserInfo = packed Record
Code,
LoginName : string[15];
Name : string[20];
end;
以上格式用C#怎么描述? 展开
1个回答
2013-10-17
展开全部
第一个:
是记录类型的内存如何分配的,如果你把记录类型保存成文件,然后用流再读出的话,记录类型的Size是很重要的,DFW上讨论过几回了,发个文章吧:
//***
Packed Record和Record的不同之处!
问题:
type
MyRec=Record
var1:integer;
var2,var3,var4,var5,var6,var7,var8:shortint;
var9:integer;
var10:shortint;
var11:integer;
var12,var13:shortint;
end;
...
ShowMessage(intTostr(SizeOf(MyRec)));
结果显示为18,而按我想象应为16。请高手讲解一下Delphi5.0中变量内存空间分配机制,因为我有一个数组MyArray:Array[1..1000000] of MyRec;需要考虑节省内存问题,
另外不要说我懒不爱看书,我手头所有关于Delphi的书都没有提到这个问题。
回答:
显示的结果应该为28,而不是18!按道理应该是22。用Packed的结果就是22。
拟定义的数组比较大,应该用packed record!
原因如下:
在Windows中内存的分配一次是4个字节的。而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样就浪费了。按上面的例子来说:
var1:integer;//integer刚好4个字节!
var2-var5占用4个字节,Var6-Var8占用4个字节,浪费了一个字节。
var9:integer//占用4个字节;
var10:占用4个字节;浪费3个字节
var11:占用4个字节;
var12,var13占用4个字节;浪费2个字节
所以,如果不用packed的话,那么一共浪费6个字节!所以原来22个字节的记录需要28个字节的内存空间!
是记录类型的内存如何分配的,如果你把记录类型保存成文件,然后用流再读出的话,记录类型的Size是很重要的,DFW上讨论过几回了,发个文章吧:
//***
Packed Record和Record的不同之处!
问题:
type
MyRec=Record
var1:integer;
var2,var3,var4,var5,var6,var7,var8:shortint;
var9:integer;
var10:shortint;
var11:integer;
var12,var13:shortint;
end;
...
ShowMessage(intTostr(SizeOf(MyRec)));
结果显示为18,而按我想象应为16。请高手讲解一下Delphi5.0中变量内存空间分配机制,因为我有一个数组MyArray:Array[1..1000000] of MyRec;需要考虑节省内存问题,
另外不要说我懒不爱看书,我手头所有关于Delphi的书都没有提到这个问题。
回答:
显示的结果应该为28,而不是18!按道理应该是22。用Packed的结果就是22。
拟定义的数组比较大,应该用packed record!
原因如下:
在Windows中内存的分配一次是4个字节的。而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量没有4个字节宽的话也要占4个字节!这样就浪费了。按上面的例子来说:
var1:integer;//integer刚好4个字节!
var2-var5占用4个字节,Var6-Var8占用4个字节,浪费了一个字节。
var9:integer//占用4个字节;
var10:占用4个字节;浪费3个字节
var11:占用4个字节;
var12,var13占用4个字节;浪费2个字节
所以,如果不用packed的话,那么一共浪费6个字节!所以原来22个字节的记录需要28个字节的内存空间!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询