设为首页 加入收藏

TOP

编译器对内存填充长度之误解
2014-11-20 04:02:42 】 浏览:371
Tags:编译器 内存 填充 长度 误解

看了《C++ 对像模型》的人,往往会误以为编译器填充是按照计算机字长填充的,如下:


class A


{


double a;


char b;


};考试大-全国最大教育类网站(www.Examda。com)


sizeof(A) ==


不了解填充的人会以为是9,看了c++对象模型的(像我)往往会以为是12,昨晚看《程序员面试宝典》一道类似题,开始以为答案给错了。。今天一试才知道,原来我错了。。上题答案(在编译器默认情况下)是 16,VC6.0、MinGW、VS.net均如此。。


《程序员面试宝典》上如是说:CPU的优化原则大致是这样的:对于n字节的元素(n=2、4、8……)它的首地址能被n整除,才能获得最好的性能。设计编译器的时候可以遵循这个原则。也就是说,默认情况下,编译器往往以最大的变量的长度为填充长度,而不是按字节长度。当然也可以通过 #pragma pack(n) 指定编译器的填充长度。这时候应该不是cpu的效率最高的情况了。


另外有个网友讨论说道如果一个类中含有另一个类对象,是否按照包含类的长度填充呢?试验了一下,不是这样,而是按照语言中的基本类型的最大长度填充。没想到,面试题中也会考到这么bt的题目,长见识了。


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++辅导:VisualC++ADO数据库编程.. 下一篇C++中const与static在面向过程代..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目