码迷,mamicode.com
首页 > 其他好文 > 详细

编译器对内存填充长度之误解

时间:2014-10-02 21:36:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   strong   sp   art   c   on   log   

http://blog.csdn.net/yysdsyl/article/details/1885795

看了《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的效率最高的情况了。

    另外有个网友讨论说道如果一个类中含有另一个类对象,是否按照包含类的长度填充呢?试验了一下,不是这样,而是按照语言中的基本类型的最大长度填充

编译器对内存填充长度之误解

标签:blog   http   ar   strong   sp   art   c   on   log   

原文地址:http://www.cnblogs.com/notlate/p/4004422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!