你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
解析VC6.0中为类对象申请内存的过程(七)
 

00401E79   mov         [g_Number (00416900)],eax

00401E7E   mov         ecx,dword ptr [g_Number (00416900)]

00401E84   push        ecx

00401E85   push        offset string "Construct CMemoryItem Nember[%d]"... (004153f0)

00401E8A   mov         edx,dword ptr [ebp-10h]

00401E8D   push        edx

00401E8E   call        CString::Format (00402316)

00401E93   add         esp,0Ch

225:          OutputDebugString(m_info);

00401E96   mov         ecx,dword ptr [ebp-10h]

00401E99   call        CString::operator char const * (0040229e)

00401E9E   mov         esi,esp

00401EA0   push        eax

00401EA1   call        dword ptr [__imp__OutputDebugStringA@4 (004173ec)]

00401EA7   cmp         esi,esp

00401EA9   call        _chkesp (00402328)

00401EAE   mov         dword ptr [ebp-4],0FFFFFFFFh

00401EB5   mov         eax,dword ptr [ebp-10h]

00401EB8   mov         ecx,dword ptr [ebp-0Ch]

00401EBB   mov         dword ptr fs:[0],ecx

00401EC2   pop         edi

00401EC3   pop         esi

00401EC4   pop         ebx

00401EC5   add         esp,50h

00401EC8   cmp         ebp,esp

00401ECA   call        _chkesp (00402328)

00401ECF   mov         esp,ebp

00401ED1   pop         ebp

00401ED2   ret

这部分汇编代码与上节的相比较看一下有什么不同?和上面的一样,这部分汇编代码也是函数初始化代码、类初始化代码、函数体代码3部分。首先看一下第一部分显然没有什么不同;接下来看看类初始代码部分开始是对成员变量的构造,但是少了虚函数表的初始化,从这里可以发现没有虚函数的类会比有虚函数的类少4个字节,这也能解释上节的类是8个字节而这里是4个字节了;最后看看剩下的汇编代码也差不多一样。

   从这里可以总结出没有虚函数的类会比有虚函数的类少4个字节,在类的构造代码中也不会有对虚函数表的初始化。这点很重要将影响它们在释放内存时一些流程的不同。下面讲delete操作时再详细讨论。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089