【常见面试题总结之C++中sizeof问题】
2017-04-26 19:40
627 查看
归纳一些常见面试题,C++中sizeof是经常被问到的一个概念,比如,下面的几个关于sizeof的面试题反复出现在各大IT公司的技术面试当中,我们有必要完全理解并掌握。
【HR】:定义一个空的类型,里面没有任何成员变量和成员函数,对该类型求sizeof得到结果是多少?
【acmer】:答案是1。
【HR】:为什么不是0?
【acmer】:空类型的实例中不包括任何信息,本来求sizeof得到0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则则无法使用这些实例,至于占用多少内存,由编译器决定,Visual Studio 中每个空类型的实例占用1字节的空间。
【HR】:如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得到结果又是多少?
【acmer】:和前面一样,还是1.调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的类型只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数在实例内添加任何额外的信息。
【HR】:那如果把析构函数标记为虚函数呢?
【acmer】:C++的编译器一旦发现一个类型中有虚拟函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针,在32位的机器上,一个指针占4字节的空间,因此求sizeof得到4;在64位机器上,一个指针占8字节的空间,因此求sizeof得到8。
参考代码:
结果:
摘自:《剑指offer》。
【HR】:定义一个空的类型,里面没有任何成员变量和成员函数,对该类型求sizeof得到结果是多少?
【acmer】:答案是1。
【HR】:为什么不是0?
【acmer】:空类型的实例中不包括任何信息,本来求sizeof得到0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则则无法使用这些实例,至于占用多少内存,由编译器决定,Visual Studio 中每个空类型的实例占用1字节的空间。
【HR】:如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得到结果又是多少?
【acmer】:和前面一样,还是1.调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的类型只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数在实例内添加任何额外的信息。
【HR】:那如果把析构函数标记为虚函数呢?
【acmer】:C++的编译器一旦发现一个类型中有虚拟函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针,在32位的机器上,一个指针占4字节的空间,因此求sizeof得到4;在64位机器上,一个指针占8字节的空间,因此求sizeof得到8。
参考代码:
#include <bits/stdc++.h> /*define a empty tyoe*/ struct null_type {}; /*define a Destructor and Constructor*/ struct type1{ type1() {} ~type1() {} int alert() {puts("type1");} }; /*define a Virtual function*/ struct type2{ type2() {} virtual ~type2(){} }; int main() { printf("sizeof(null_type)=%d\n",sizeof(null_type)); printf("sizeof(type1) =%d\n",sizeof(type1)); printf("sizeof(type2) =%d\n",sizeof(type2)); return 0; }
结果:
摘自:《剑指offer》。
相关文章推荐
- 常见C++面试问题总结2
- C/C++学习笔记33:面试题中常见的位操作问题
- C++面试中常被问的sizeof问题总结
- 常见C++面试题及基本知识点总结
- 常见C++面试题及基本知识点总结(一)
- 【C++程序设计常见面试题】说出字符常量和字符串常量的区别,并使用运算符sizeof计算有什么不用?(00)
- C++中常见的一些小问题总结(一)
- 常见C++面试题及基本知识点总结(一)
- C++面试题之结构体内存对齐计算问题总结大全
- 常见C++面试问题总结1
- 常见C++面试问题总结1
- C++面试常见问题总结
- c和c++面试常见问题总结
- 常见C++面试题及基本知识点总结(一)
- C++【常见面试题】String类的实现,以及深拷贝、浅拷贝问题
- C++常见面试题总结
- C++面试中关于sizeof问题总结
- 常见C++面试题及基本知识点总结(一)
- 面试题中常见的布局类问题总结
- C++面试常见问题总结(不断更新中......)