码迷,mamicode.com
首页 > 编程语言 > 详细

C++面试常见问题——13结构体与共用体的sizeof

时间:2020-02-24 20:55:23      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:tips   大成   计算   存在   需要   char   填充   编译器   基本   

结构体与共用体的sizeof

结构体的sizeof

结构体变量占用的内存空间大小通常是其基本类型的大小,但是由例外(字节对齐机制)

struct S1{
    char c[5];
    int a;
    double d;
    char c2;
};
/*最大基本类型为8;也就是说字节对齐大小为8
c5 _ _ _
a _ _ _ _ 
d
c2 _ _ _ _ _ _ _
所以sizeof(S1)的大小为32
*/
struct S2{
    char c[5];
    int a;
    char c2;
    double d;
};
/*最大基本类型为8;也就是说字节对齐大小为8
c5 _ _ _
a c2 _ _ _ 
d
当c2与d调换位置,sizeof(S2)为24
*/

当存在结构体的嵌套时,将结构体打散,最大的基本类型的大小最为字节对齐数,再一次将数据放入,如果有需要编译器会在成员之间添加填充字节。

tips: sizeof和strlen:sizeof计算字符串容量,算’\0’,strlen计算字符串长度,到’\0’截止 。

共用体的sizeof

也要注意字节对齐数,但是返回的是最大成员的字节数

union U{
    char c[6];
    int  a;     
};
/*
同样先找字节对齐数,这里是4,c[]后面填充两个字节。
*/

C++面试常见问题——13结构体与共用体的sizeof

标签:tips   大成   计算   存在   需要   char   填充   编译器   基本   

原文地址:https://www.cnblogs.com/ziyuemeng/p/12358506.html

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