首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

谈delphi记录类型与vc中的结构转换解决思路

2012-03-08 
谈delphi记录类型与vc中的结构转换//delphiprocedureTForm1.Button1Click(Sender:TObject)typeTRecord1r

谈delphi记录类型与vc中的结构转换
//delphi    
procedure     TForm1.Button1Click(Sender:     TObject);    
type     TRecord1=record    
      a1:byte;    
      d1:Cardinal;    
end;    
type     TRecord2=packed     record    
      a1:byte;    
      d1:Cardinal;    
end;    
begin    
      showmessage(IntToStr(SizeOf(TRecord1)));//输出值为8    
      showmessage(IntToStr(SizeOf(TRecord2)));//输出值为5    
end;    
//vc    
typedef     struct     tagTStruct1    
{    
                      unsigned     char     a1;            
                      unsigned     int     d1;                                                            
 
}TStruct1,*LStruct1;    
void   Cdialog1::OnBnClickedOk()
{  
            int     value=0;    
            char     value1[100];    
            CString     value2;    
            value2= " ";    
            itoa(sizeof(TStruct1),value1,10);    
            value2.Format( "struct   is     %s ",value1);    
            AfxMessageBox(value2);   //输出值为8
}
以上代码均调试过了,想请问vc中为什么取出的占用大小也是8啊,这样起不是很占用资源吗?(对比与delphi   packed     record类型),本人对vc不太了解,也没用过,只是最近需要看些代码,才弄了下,只是本着相互学习的态度,请大家场所语言,分不够我会加的

[解决办法]
占用内存大小为8:
在DELPHI里,如果不是紧缩型(packed record)的记录类型,对记录类型的内存管理采用的是叫“字对齐”的模式。也就是说
type TRecord1=record
a1:byte; //A1域占用的字节长度,因“字对齐”管理模式,与D1域占用的内存大小一致;
d1:Cardinal; //D1域占用4字节内存;
end;

在VC中,内存管理模式不太清楚了。呵~~,要查查相关的资料才行。

热点排行