20170607_sizeof() 运算符的概念
来源:互联网 发布:人民网舆情监测室 知乎 编辑:程序博客网 时间:2024/05/16 12:03
20170607_sizeof() 运算符的概念
剑指offer——P22
1、定义一个空的类,里面没有任何函数成员和数据成员。对该类的对象求sizeof(),结果是多少?
class A{};A object;
答:sizeof(object)=1,占据1个字节,而不是0个字节。
对于空的类A 所生成的对象object,本来对它求sizeof() 应该是得到0个字节。但是,当我们生成这个对象的时候,编译器会在栈内存中给它保留一份儿空间,用来标识这个对象是属于这个类A 的,而不是属于其他的类B 的。
至于占用多大内存,这和具体的编译器有关,VS2012保留的1个字节空间。
2、如果在类A 中添加了一个构造函数和析构函数,那么再对它使用sizeof() 运算符,得到什么?
答:还是1个字节。每个类都会有默认的构造函数和析构函数,从这一点也说明了原因(和上题一样)。
另外,调用构造函数和析构函数只需要知道它们的函数地址就行了,而这些函数地址只和类型相关,和类的对象无关,编译器也不会因为这两个函数而给对象添加额外的内存,所有还是1个字节。
3、那如果把析构函数标识为虚函数呢?
答:C++编译器一旦发现类中含有虚函数(virtual function),便立即会给该类生成一个虚函数表(virtual table),并且对这个类的所有的对象都分别生成一个指向该虚函数表的虚函数指针(virtual function pointer)。
此外,这个虚函数表里面装的是指针,而这些指针是依次指向该类的所有虚函数的(一个指针对应一个虚函数,并且按照虚函数在类中定义的顺序)。
因此,如果把析构函数标识为虚函数,那么就会给该类的对象生成一个虚函数表指针,该指针大小就是这个空类的对象的大小。
32位机器上是4字节,64位机器上是8字节。
- 20170607_sizeof() 运算符的概念
- C_语法概念_sizeof()功能:计算数据空间的字节数以及字节对齐问题
- 参数大小_sizeof()的问题
- _sizeof和_countof的区别
- 运算符重载的概念
- C_语法概念_sizeof 使用规则及陷阱分析
- 42_sizeof 的使用简单举例
- 导数的概念及运算
- 导数的概念及运算
- C/C++_sizeof的本质与使用注意事项
- 黑马程序员--c语言运算符的概念与分类
- 四十五、态性:运算符重载的概念和规则
- 关于C++运算符重载和友元的概念
- C++运算符重载的概念和语法
- JAVA运算符优先级概念
- 自学:运算符优先级概念、 for 循环的使用、数组的概念
- 矩阵运算的概念和代码实现
- 【Java概念】运算符(3)
- java 栈的压入、弹出序列
- Vue开源项目库汇总
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
- 测试开发从入门到放弃之前端01_HTML5_DTD文档及Head标签内容
- JavaSE学习--HTML
- 20170607_sizeof() 运算符的概念
- acm1002大数加法
- redis五种数据类型的增删改查语法
- ios11 下载地址
- Spark2.x 快速入门教程 1
- CentOS-6.9 开启SSH远程连接
- 【整理】Python 单元测试框架
- nfs
- leetcode 416. Partition Equal Subset Sum