回 帖 发 新 帖 刷新版面

主题:请高手给我指点一下sizeof()的原理

我定义了两个结构体,成员都一样,但是顺序不一样。用sizeof()函数看一下他们的大小,竟然发现不一样,一个是32,一个是28!!

struct s1 { 
        int ra;
        int dec;
        
        bool tag;
        char catalog;
        
        short rmag;
        short bmag;
        short jmag;
        short hmag;
        short kmag;
        
        long pm_ra; 
        long pm_dec;
        
        
    };

struct s2 { 
        int ra;
        int dec;        
        
        short rmag;
        short bmag;
        short jmag;
        short hmag;
        short kmag;
        
        long pm_ra; 
        long pm_dec;

        bool tag
        char catalog;
        
        
    };


    int n1 = sizeof(s1);
    int n2 = sizeof(s2);

结果是: n1 = 28;
         n2 = 32;

为什么啊?能不能给我解释一下啊?
    

回复列表 (共6个回复)

沙发

你这跟sizeof函数无关,主要是结构字段内存对齐的问题

板凳

http://www.programfan.com/club/showbbs.asp?id=230394

3 楼

编译器中为结构体分配内存时,是以4字节为最小分配单位(在VC中,其他平台不清楚)
即:
struct s1
变量    已分配    实际分配位
4    4    4
4    8    8
1    12    9
1    12    10
2    12    12
2    16    14
2    16    16
2    20    18
2    20    20
4    24    24
4    28    28

struct s2
变量    已分配    实际分配位
4    4    4
4    8    8
2    12    10
2    12    12
2    16    14
2    16    16
2    20    18
4    24    24    // 剩余的2位不足分配long,故从20开始分配
4    28    28
1    32    29
1    32    28

4 楼

这个有点帮助!

http://www.programfan.com/club/

5 楼

老问题,发帖前查一下

6 楼


3楼的回答得很不错,表扬一下

我来回复

您尚未登录,请登录后再回复。点此登录或注册