c 对象的内存模型,如何用cl看c代码的对象的内存模型

1,如何用cl看c代码的对象的内存模型cl [source.cpp] /d1reportSingleClassLayout[classname] 编译选项示例:cl Test.cpp /d1reportSingleClassLayoutDerived注意, 是斜线, 再不行就配置一下 VC++ 的路径...gttdvgfse再看看别人怎么说的 。【c 对象的内存模型,如何用cl看c代码的对象的内存模型】
2 , c对象的内存分配1)程序在内存中映像包含5个部分:栈、堆、全局静态区、文本常量区和代码区 。2)对象实例化后,确切地说是实例中的数据成员保留在推中;实例的方法(代码)保存在代码段区中 , 实例的代码和数据成员肯定是分开存放 。回到你的问题:1)成员变量 int 存放在堆中,不是栈中2)void Add()肯定在代码区 。在代码区的void Add()通过this找到堆中的实例 。
3,求人讲解一下面向对象的内存模型什么什么样的为什么隐藏和重写如果楼主学过C的话我就很容易描述了首先,打个比喻吧,对象内存模型就像堆积木,积木的大小不一,经过精心设计最后会堆成想要的模型变量在内存中是会占用一定空间的,每种数据类型点用的空间大小不同,有的大一点有的小一点,然而要同时使用不同大小的变量在内存中表示一样东西就要更大的一样东西来表示,这就是内存模型在C中有结构体,但结构体并不是面向对象的内存模型,但它描述比较形象然而在面向对象语言中,对象模型中封装性是它的一大特性
4,c内存空间模型C#中数据类型分为两大类:值类型和引用类型;值类型包括有:整数类型(byte ,  short, int,long)、实数类型(float,double, decimal)、字符类型(char)、布尔类型(bool)、枚举类型(enum)、结构类型(struct);引用类型包括有:类(class)、接口(interface)、委托(delegate)、字符串(string);计算机的内存包括两个存储空间:栈和堆;值类型的值直接存储在栈上,而引用类型的值是存在堆上 , 但计算机在内存读取数据的时候,是直接读取栈上的内容,而在堆上得内容是通过栈上存储的堆上得地址来读取其内容的 。你这个类里面的变量没有初始化,所以,里面的两个变量都为null值,所以,他们在栈上的内容就是空的 。如果他们初始化了,那么他们会在栈上分配对于堆上的地址,而堆上这相应得分配其空间 。你需要的C#版的数据结构目前可能还没有 , 我们去年学习的时候,是学校的老师自己出的书 。栈和堆的资料可以从下面学习:托管代码一般是自动调用gc回收内存,不需要代码显式的释放,非托管代码需要手动释放资源,如何释放 , 网上代码很多,可以自己去看5 , c 关于内存模型的问题这种问题有必要回一下A a=new B();内存分配过程分为4个阶段1.clr在堆里面计算并开辟一段内存空间,将B对象的实例的各个字段的默认值分配到该空间上;2.除此之外外 , clr需要为该对象分配额外的2个字节:syncblockindex和指向方法表的指针,分别用于标记该对象的同步状态和虚方法地址 。3.调用B对象的构造函数 。注意构造函数是根据继承树逐级调用的(即object()->A()->B()) 。4.在堆栈上为A引用(指针)开辟一段4字节空间,并使其指向堆中的B对象 。参考《.net框架程序设计》一个类是分成两部分的 , 一部分存数据一类的东西,比如说类里的field , 另一部分存逻辑,比如method 。数据的那一部分 , 是每一个实例有一份,逻辑的部分 , 每一个类只有一份 。A a = new B();里面,B()的返回值是你真正建立的实例 , a只不过是为了你可以在以后描述它而起的名字,这种关系在C\C++里叫pointer,在C#、Java里叫reference,在python里叫name binding,都是相似的 。所以,在A a=new B()里面实际上是不存在像int32转换成int64那样真正的conversion的,只不过是用A类的名字指向一个B类的实例而已 。允许这样操作的原因是因为B继承A,所以A的内容是B的子集,A有的东西B一定都有 。b0sus说得不错 , 我也不想多说了 。介绍几本书吧(要学好C#有些书是一定要看的) 。首先是学.net一定要看的《.net框架程序设计》,看完对.net框架尤其是CLR和CTS有比较直观的理解.另外《.net 2.0面向对象编程揭秘》也非常好,个人认为是国内最好的讲.net 2.0的书 。我推荐一本《你必须知道的.net》通俗易懂,本人受宜非浅

    推荐阅读