程序员面试题精选(41):编译器对内存填充长度之误解
来源:互联网 发布:淘宝李宁官方折扣店 编辑:程序博客网 时间:2024/05/22 03:15
看了《C++ 对像模型》的人,往往会误以为编译器填充是按照计算机字长填充的,如下:
class A
{
double a;
char b;
};sizeof(A) == ?
不了解填充的人会以为是9,看了c++对象模型的(像我)往往会以为是12,昨晚看《程序员面试宝典》一道类似题,开始以为答案给错了。。今天一试才知道,原来我错了。。上题答案(在编译器默认情况下)是 16,VC6.0、MinGW、VS.net均如此。。
《程序员面试宝典》上如是说:CPU的优化原则大致是这样的:对于n字节的元素(n=2、4、8……)它的首地址能被n整除,才能获得最好的性能。设计编译器的时候可以遵循这个原则。也就是说,默认情况下,编译器往往以最大的变量的长度为填充长度,而不是按字节长度。当然也可以通过 #pragma pack(n) 指定编译器的填充长度。这时候应该不是cpu的效率最高的情况了。
另外有个网友讨论说道如果一个类中含有另一个类对象,是否按照包含类的长度填充呢?试验了一下,不是这样,而是按照语言中的基本类型的最大长度填充。没想到,面试题中也会考到这么bt的题目,长见识了。
- 程序员面试题精选(41):编译器对内存填充长度之误解
- 程序员面试题精选
- 对称子字符串的最大长度(程序员面试题精选100题)
- 程序员面试题精选(转载)
- 程序员面试题精选 (转载)
- 程序员面试题精选--前言
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度[算法]
- 程序员面试题精选100题:41-50解题报告
- 程序员面试题精选(8):求1+2+...+n
- 程序员面试题精选(19):反转链表
- 程序员面试题精选(20):最长公共子串
- 程序员面试题精选(21):左旋转字符串
- 程序员面试题精选(23):跳台阶问题
- 程序员面试题精选(27):二元树的深度
- 程序员面试题精选(39):一道autodesk笔试题求解
- java继承中的初始化循序
- 程序员面试题精选(40):一道SPSS笔试题求解
- 使用VMware将Linux装在物理硬盘上,开机即可进入Linux
- Introduction to COM Part II - Behind the Scenes of a COM Server
- 程序员面试题精选(41):编译器对内存填充长度之误解
- java容器框架图
- DirectX SDK所有版本微软官方的下载页面
- [转]JDOM操作XML文件
- Ajax无刷新实现图片切换特效(AjaxPro)
- 2007-10-14 我的数据库出现了问题,使我头大.
- [总结]PPT高手的思路
- 数据结构复习:几种排序算法的C++实现和二叉树的相关算法实现
- 双施瓦希黑洞