c++中类中成员在内存中的布局
来源:互联网 发布:种植牙 知乎 疼 编辑:程序博客网 时间:2024/04/19 18:52
本篇博客来分析C++中类成员的内存布局情况。首先我们来分析下成员函数的内存布局,然后分析下类中成员变量的内存布局。
1. 类中成员函数布局
c++类中的成员函数包括有虚函数和普通成员函数。首先我们先来讨论下没有虚函数的类中成员函数是如何布局的。
(1)只含有普通成员函数的类
一个类也相当于一个作用域。对于不含虚函数的类而言,成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里。也就是说类中普通成员函数对类内存大小没有影响。
那么问题来了:通过一个类对象调用成员函数,如果确定这个成员函数属于这个类呢?
对象调用成员函数时,在编译期,编译器就可以确定这些函数的地址,并通过传入this指针和其他参数,完成函数的调用,所以类中就没有必要存储成员函数的信息。
(2)含有虚函数的类
如果一个类中含有虚函数的话,在类内存中一开始就会有一个vptr(虚指针)。这个虚指针指向一个虚表,虚表是由类中指向虚函数的指针构成的数组。vptr是在类的constructor中被初始化,这是由系统决定的,我们无法改变。
类中的虚函数只能通过vptr调用。
2.类中成员变量的布局
(1)成员变量在类中内存的先后顺序与其在类中被声明的先后顺序一致,也就是说先声明的变量在内存的前边。
(2)类中成员变量初始化的先后顺序与其声明先后顺序一致,与constructor中被初始化先后顺序无关。
(3)如果类中含有虚函数,那么类中第一个位置的变量是vptr。
(4)类大小的是在编译期间就被确定了,所以sizeof可以作用与一个类名。
阅读全文
0 0
- c++中类中成员在内存中的布局
- C程序在内存中的布局
- [c/c++]class/struct数据在内存中的布局
- 程序在内存中的布局
- 程序在内存中的布局
- C语言结构体在内存中的布局(直接对齐)
- C 程序在内存中的布局 [李园7舍_404]
- 类成员在内存中的位置
- 程序中的数据在内存中的布局
- 可执行文件中的段在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- 一个进程在内存中的布局
- sax解析中事件处理器要注意的问题
- AndroidStudio下的JNI
- 关于cocoapods出错的注意事项
- Quick-Cocos2dx-3.X版本player黑屏不出welcome界面解决办法
- Eclipse Windows环境配置
- c++中类中成员在内存中的布局
- Spring学习之使用factorybean获取bean实例
- spring的事务
- 你竟敢说你懂Spring框架?有可能你是没看到这些...(上)
- thread16
- 【代码积累-4】cal MD5
- Python语法第4讲:字符串及常用函数
- tensorflow的基本用法(一)
- leetCode刷题归纳-Dynamic Programming(120. Triangle)