首页
社区
课程
招聘
[脚印]2011年25周(6.24) C++内存结构
发表于: 2011-6-23 21:36 10810

[脚印]2011年25周(6.24) C++内存结构

2011-6-23 21:36
10810

声明: 内容都是书上的,自己重写下,加深下印象,如有不妥请指出。
参数书籍信息:
<<高质量C/C++>> 第三版 第12章C++面向对象程序设计 电子工业出版社
<<深度探索C++对象模型>> 第1章关于对象 华中科技大学出版社

先看下简单类的代码和数据放置的位置

int CAnimal::m_snType = 0x12345678;

int _tmain(int argc, _TCHAR* argv[])
{    
    CAnimal AnimalObj;
    CAnimal *lpObj = &AnimalObj;
    printf("%d,%s", lpObj->m_snType, lpObj->m_szName);

    return 0;
}
class CAnimal
{
public:
    CAnimal()
    { 
        strncpy(m_szName, "Test!", sizeof(m_szName));
01322453  mov         esi,esp 
01322455  push        0Ah  
01322457  push        offset string "Test!" (13279B0h) 
0132245C  mov         eax,dword ptr [this] 
0132245F  push        eax  
01322460  call        dword ptr [__imp__strncpy (132B3B4h)] }
     ~CAnimal()
    {
        _asm NOP 
00AD210C  nop              
    printf("%d,%s", lpObj->m_snType, lpObj->m_szName);
013248E6  mov         esi,esp 
013248E8  mov         eax,dword ptr [ebp-20h]   //指针保存的就是类的首址(这里也就字符串的地址)
013248EB  push        eax  
013248EC  mov         ecx,dword ptr [CAnimal::m_snType (132A00Ch)] //(常量区)至少不再栈中
013248F2  push        ecx  
013248F3  push        offset string "%d,%s" (132783Ch) 
013248F8  call        dword ptr [__imp__printf (132B3ACh)]
    virtual ~CAnimal()
    virtual bool isCanSay(){}
    static bool isCanFly(){}
main函数中,这次不用指针在保存对象
    CAnimal AnimalObj;
    AnimalObj.isCanSay();
    AnimalObj.isCanFly();
    printf("class大小:%d ,%d,%s", sizeof(AnimalObj), AnimalObj.m_snType, AnimalObj.m_szName);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 191
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
我继承下,改写之
2011-6-23 21:37
0
雪    币: 7157
活跃值: (1165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习下!
2011-6-23 23:14
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
C++ 的类机制是在逻辑上封装 编译上独立
2011-6-24 17:52
0
雪    币: 191
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
感谢关注,不过说的比抽象类还抽象,青蛙跳水啊
2011-6-24 23:33
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
不懂这些,太乱啦。
2011-6-25 13:47
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
提供pdf就好了
2011-6-25 22:53
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
声明: 内容都是书上的,自己重写下,加深下印象

lz看的是哪本书?
2011-6-26 05:17
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
9
mark~~~,对于C++的逆向比较有意思~~~
2011-6-26 11:38
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
思路是很不错的 支持下
2011-6-26 11:43
0
雪    币: 191
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
书籍为:
<<高质量C/C++>> 第三版 第12章C++面向对象程序设计 电子工业出版社
<<深度探索C++对象模型>> 第1章关于对象 华中科技大学出版社
发现对象模型的第三章好像也讲Data的,计划下个周再看3章,估计有东西要更新,这里占个坑先,文档到时也会附上。也希望过来人能多指点一二。
2011-6-26 13:09
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
刚好昨天晚上翻了下C++ 的虚拟继承和多重继承,今天就再次看到了...巧啊!~~
2011-6-26 13:24
0
雪    币: 397
活跃值: (387)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
13
顶一下,记得effective c++ 还有这个很类似的例子。
2011-6-27 10:03
0
雪    币: 8848
活跃值: (3088)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
NISY 是术业有专攻
2011-6-28 14:51
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
15
图文并茂,不错,顶!!
2011-6-28 17:36
0
雪    币: 322
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
支持共享!!!
2011-6-29 17:53
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
深入浅出MFC第三章!
2011-7-1 22:25
0
游客
登录 | 注册 方可回帖
返回
//