读书人

一个例证测试你对内存对齐认识是否

发布时间: 2012-09-07 10:38:15 作者: rapoo

一个例子,测试你对内存对齐,认识是否正确。
先不调试,根据你自己以往的认识,把下面sizeof(SByte2),计算出来,然后,贴上来,看看有多少个人能做对的?



C/C++ code
struct SS {    char a;    double b;    int c;};struct SByte2  {            char d;    SS e;    int f[3];        char g[5];    };   


[解决办法]
五 十 六 !
[解决办法]
这个问题,LZ你没说以多少字节对齐
万一人家有个
#pragma pack(1)
?
或者人家是64位机?
[解决办法]
GCC 默认 #pragma pack(4) 16,40
VS 默认 #pragma pack(8) 24,56

看了小米面试贴中大大给的教程http://blog.csdn.net/hairetz/article/details/4084088
获益良多!
[解决办法]
假定 sizeof(double) == 8 并且 pack指定为8[或者比8大]
结果是 56

[解决办法]
gcc和vs是不一样的
32位系统,gcc默认4,vs默认8

gcc是16,40,vs是24,56

读书人网 >C++

热点推荐