MSVC C++对象内存分配方式学习

来源:互联网 发布:一个域名对应多个网站 编辑:程序博客网 时间:2024/05/01 02:39

C++由于多继承、虚拟继承、虚函数等概念,导致对象的内存分配方式比较复杂。因此C++的对象内存分配也成为C++面试中经常被问到的一个知识点。

已经有很多篇文章讨论过C++的内存对象分配,比如:

        1. http://blog.sina.com.cn/s/blog_4a286b4e010125rk.html,这篇文章里提到的要点是GCC和VC的编译器在处理虚集成时的机制是不一样的,GCC始终共享虚表指针vfptr(指向虚函数表),而VC只有在非虚继承时才共享vfptr。

2. http://www.cnblogs.com/jerry19880126/p/3616999,这篇文章详细的介绍了各种情况下VC对对象内存的分配。

这里总结一下MSVC对象内存的分配:

1. 若祖先没有vfptr,当前类有vfptr,则vfptr放在最前方,其次是各个祖先的成员,然后是自己的成员,最后是虚继承的类的成员。

2. 若祖先有多个,有的祖先有vfptr,有的祖先没有vfptr,则有vfptr的祖先成员放在最前方,其次是其他祖先的成员,然后是自己的成员,最后是虚继承的类的成员。

3. 若使用虚继承,则vfptr不会被共享,若当前类override虚父类的函数,则更新虚父类的虚函数表;若当前类定义新的virtual函数,则为当前类新建一个虚函数表。

0 0
原创粉丝点击