谈delphi记录类型与vc中的结构转换

dd_zhouqian 2007-04-17 02:56:25
//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不太了解,也没用过,只是最近需要看些代码,才弄了下,只是本着相互学习的态度,请大家场所语言,分不够我会加的
...全文
298 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小呆之家 2007-04-18
  • 打赏
  • 举报
回复
占用内存大小为8:
在DELPHI里,如果不是紧缩型(packed record)的记录类型,对记录类型的内存管理采用的是叫“字对齐”的模式。也就是说
type TRecord1=record
a1:byte; //A1域占用的字节长度,因“字对齐”管理模式,与D1域占用的内存大小一致;
d1:Cardinal; //D1域占用4字节内存;
end;

在VC中,内存管理模式不太清楚了。呵~~,要查查相关的资料才行。
winxp系统结构5课(注册表)->1认识注册表 作者:netcicala 来源:www.netcicala.com 发布时间:2007-7-4 19:56:01 减小字体 增大字体 一.计算机原理2课(硬件)->二.计算机脚本技术25课(DOS命令/批处理/VBS脚本)->三.winxp系统结构5课(注册表)->四.计算机病毒原理5课(VBS/VC语言实现)->五.网络安全及其网络软件应用10课->六.VB6.0程序设计入门10课->七.C语言程序设计入门10课->时间:每周一,二,四8:00~9:00。UC房间:黑客家族网络安全本人UC号:38378943 83034769winxp系统结构5课(注册表)->1认识注册表时间:6月28日晚20点30-22点地点:UC聊天室-> 黑客家族网络安全讲义地址:http://www.netcicala.com/article/sort015/info-251.html大概内容:FSO 对象主讲:网蝉。WINXP的系统结构:==============================================================windows启动过程:1,windows的启动过程:一,winxp首先加载NTLDR文件。 此文件位于:C:根目录下。二,初始化:NTLDR加载后会将处理器从实模式转化为32位保护模式。三,读取boot.ini文件,c:\下的boot.ini和bootsect.dos配合来完成多操作系统的管理。四,加载NtDetect.com文件:此文件的作用是检测计算机硬件,如并口,显示适配器等设备, 并将收集到的信息的硬件列表返回NTLDR用于以后的注册表注册保存。五,选择硬件配置文件,一般WINxp会按照默认形式加载,如要修改,可直接到设备管理器进行修改。六,装在内核:NtOsKrNl.exe 此文件位于windows\system32目录下。七,HAL加载:HAL=硬件抽象层,系统会采用HAL来隐藏特定平台的硬件接口细节。 为操作系统提供虚拟硬件平台,使其具有硬件无关性。八,内核初始化,NTLDR将控制权交给NtOsKrNl.exe,九,开始装并初始化设备驱动程序,启动win32子系统和winxp的各项服务系统。十,win32子系统启动winlogon.exe,并启动LSASS.EXE显示登陆对话框,同时windows也会配置网络设备/用户环境, 个性化设置等信息。 =====================================================windows注册表注册表的用途:用来记录windows系统配置信息和软件配置情况的数据库。什么是系统配置情况? 例如你把显示器分辨率变成800*600的了,下次启动的时候将会是800*600。又如windows开机会自动运行哪些程序。什么叫软件配置情况?例如我们设置uctools里面的自动留言功能,则在uctools.ini里面就有你设置自动回复的文字项在里面。为什么很多安装软件都要去改写注册表?1,在系统注册。2,在注册表保存软件配置信息。为什么某些软件你对他的使用情况配置了一下, 下次启动之后这个软件的配置就会保留?1,注册表记录。2,程序自身或程序的数据库文件内记录。例子1:在数据文件配置我们的软件。Set fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists("password.txt") Then set objTextFile = fso.OpenTextFile("password.txt",1) k= objTextFile.Readline l= objTextFile.Readline objTextFile.Close End IfSet f = fso.CreateTextFile("password.txt", True)i=InputBox("输入用户名","用户信息确认",k)j=InputBox("输入密码","用户信息确认",l)f.WriteLine(i)f.WriteLine(j)f.CloseSet fso=Nothing上面脚本执行第一次的时候,我们输入一个信息到程序。 当地二次运行后,你会发现他所显示的是我们上一次打开这个程序的时候输入的内容。注册表是用来记录WINDOWS系统配置信息的。 道理同我们上例的password.txt文件一样,是一个数据库文件。例子2:在注册表配置我们的软件。on error resume nextSet WshShell = WScript.CreateObject("WScript.Shell")readreg = WshShell.RegRead("HKCU\Software\aaa\")If readreg="" ThenMsgBox("软件没有配置过")ElseMsgBox("配置信息为:"&readreg)End Ifaa=InputBox("输入/更改我们的软件配置信息")WshShell.RegWrite"HKCU\Software\aaa\",aa, "REG_SZ"set WshShell=Nothing为什么双击exe文件会直接运行,而双击txt文本打开的却是记事本?===================================================== 名称---〉数据类型--〉描述二进制值 REG_BINARY 原始二进制数据。大多数硬件组件信息作为二进制数据存储,以十六进制的格式显示在注册表编辑器。=====================================================DWORD 值REG_DWORD由 4 字节长(32 位整数)的数字表示的数据。设备驱动程序和服务的许多参数都是此类型,以二进制、十六进制或十进制格式显示在注册表编辑器。与之有关的值是 DWORD_LITTLE_ENDIAN(最不重要的字节在最低位地址)和 REG_DWORD_BIG_ENDIAN(最不重要的字节在最高位地址)。=====================================================可扩展字符串值 REG_EXPAND_SZ 长度可变的数据字符串。这种数据类型包括程序或服务使用该数据时解析的变量。=====================================================多字符串值 REG_MULTI_SZ 多字符串。包含用户可以阅读的列表或多个值的值通常就是这种类型。各条目之间用空格、逗号或其他标记分隔。=====================================================字符串值 REG_SZ 长度固定的文本字符串。=====================================================二进制值 REG_RESOURCE_LIST一系列嵌套的数组,用于存储硬件设备驱动程序或它控制的某个物理设备所使用的资源列表。此数据由系统检测并写入 \ResourceMap 树,作为二进制值以十六进制的格式显示在注册表编辑器。=====================================================二进制值 REG_RESOURCE_REQUIREMENTS_LIST 一系列嵌套的数组,用于存储一个设备驱动程序(或其控制的某个物理设备)可以使用的硬件资源列表。系统将此列表的子集写入 \ResourceMap 树。此数据由系统检测,作为二进制值以十六进制的格式显示在注册表编辑器。=====================================================二进制值 REG_FULL_RESOURCE_DESCRIPTOR 一系列嵌套的数组,用于存储物理硬件设备使用的资源列表。此数据由系统检测并写入 \HardwareDescription 树,作为二进制值以十六进制的格式显示在注册表编辑器。=====================================================无 REG_NONE 没有具体类型的数据。此数据由系统或应用程序写到注册表,作为二进制值以十六进制的格式显示在注册表编辑器。=====================================================链接 REG_LINK 一个 Unicode 字符串,它命名一个符号链接。=====================================================QWORD 值 REG_QWORD 由 64 位整数数字表示的数据。此数据作为二进制值显示在注册表编辑器,最初用在 Windows 2000 。=====================================================注册表配置单元是注册表的一组项、子项和值,它有一组支持文件,这些文件包含其数据的备份。在 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003 ,除 HKEY_CURRENT_USER 之外,所有其他配置单元的支持文件都位于 Systemroot\System32\Config 文件夹;HKEY_CURRENT_USER 的支持文件位于C:\Documents and Settings\用户名\NTUSER.DAT文件夹。注册表配置单元 支持文件HKEY_LOCAL_MACHINE\SAM Sam、Sam.log、Sam.savHKEY_LOCAL_MACHINE\Security Security、Security.log、Security.savHKEY_LOCAL_MACHINE\Software Software、Software.log、Software.savHKEY_LOCAL_MACHINE\System System、System.alt、System.log、System.savHKEY_CURRENT_CONFIG System、System.alt、System.log、System.sav、Ntuser.dat、Ntuser.dat.logHKEY_USERS\DEFAULT Default、Default.log、Default.sav注册表的修改方法:1,REGEDIT2,INF文件3,REG命令4,VBS5,编程改写(如VB/VC/DELPHI等)6,程序改写,如WINDOWS优化大师等软件。

16,743

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧