首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体变量占用空间大小的疑惑解决思路

2013-10-21 
结构体变量占用空间大小的疑惑如题,我定义了一个结构体,为什么结构体变量所占的空间跟他成员占用空间总和

结构体变量占用空间大小的疑惑
如题,我定义了一个结构体,为什么结构体变量所占的空间跟他成员占用空间总和不一样呢?

#include<stdio.h>
int main()
{
struct student
{
int no;
char num[10];
char a;
int b;
}stu;
printf("%d\n",sizeof(stu));//输出20
printf("%d\n",sizeof(stu.num));//输出10
printf("%d\n",sizeof(stu.no));//输出4
printf("%d\n",sizeof(stu.a));//输出1
printf("%d\n",sizeof(stu.b));//输出4
}

[解决办法]
google一下内存对齐
[解决办法]

 struct student
    {
        int no;
        char num[10]; //这里有个对齐的!
        char a; 
        char resver; //加上这个字节就对了 这里空余的一个字节不够放一个int字节的
        int b;
    }stu;

[解决办法]
4字节内存对齐,char a; 后补一个字节。


    struct student
    {
        int no;
        char num[10];
        char a;
        int b;
    }stu;
[解决办法]
第一点:结构中每个成员的对齐开始地址必须是自身的整数倍,不是的话就向后补齐
二:结构体的总大小必须是成员中最大对齐量的整数倍

你的例子:
no,4byte
num,10byte
a, 1byte
b,开始值15,不是自身4的倍数,向上取整16,加上4
总共4+10+1+(1)+4=20,
20是4(最大对齐量)的倍数,不用不齐了。完毕。

ps。这是google来的。。。。。。。。。。。。
[解决办法]
献丑了http://blog.csdn.net/zshuaiqin/article/details/8897430
[解决办法]
一般不会一样的
首先成员和内存,不对齐的成员会被调整到对齐的位置
其次,如何包含虚函数,会生成虚表入口指针

热点排行