c 对象内存模型是什么,c内存空间模型

1,c内存空间模型C#中数据类型分为两大类:值类型和引用类型;值类型包括有:整数类型(byte, short,int ,  long)、实数类型(float ,  double,decimal)、字符类型(char)、布尔类型(bool)、枚举类型(enum)、结构类型(struct);引用类型包括有:类(class)、接口(interface)、委托(delegate)、字符串(string);计算机的内存包括两个存储空间:栈和堆;值类型的值直接存储在栈上,而引用类型的值是存在堆上,但计算机在内存读取数据的时候 , 是直接读取栈上的内容,而在堆上得内容是通过栈上存储的堆上得地址来读取其内容的 。你这个类里面的变量没有初始化,所以,里面的两个变量都为null值,所以,他们在栈上的内容就是空的 。如果他们初始化了,那么他们会在栈上分配对于堆上的地址 , 而堆上这相应得分配其空间 。你需要的C#版的数据结构目前可能还没有,我们去年学习的时候,是学校的老师自己出的书 。栈和堆的资料可以从下面学习:托管代码一般是自动调用gc回收内存,不需要代码显式的释放,非托管代码需要手动释放资源,如何释放,网上代码很多,可以自己去看
2 , 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》通俗易懂,本人受宜非浅【c 对象内存模型是什么,c内存空间模型】

    推荐阅读