前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文读懂sizeof的用法

一文读懂sizeof的用法

原创
作者头像
fieldli
发布2019-09-29 12:32:14
5650
发布2019-09-29 12:32:14
举报
文章被收录于专栏:大块小屋-技术

sizeof

首先是一个操作符,是内置的,不是函数。主要用来求所占用对象锁占用的字节数。具体使用方式:

sizeof express 或者 sizeof(type) .

以32位为例:

sizeof 基本类型

代码语言:txt
复制
cout<<  sizeof(int) << endl; // 输出 4
cout<<  sizeof(char) << endl; //输出  1
cout<<  sizeof(short) << endl; //输出  2

sizeof 数组与指针

代码语言:txt
复制
char chArr[10] = "123";
cout<< sizeof(chArr) << endl; //输出 10 字节 整个数组长度是10个字节
cout<< sizeof(chArr[0]) << endl; // 输出1 ,char型 1
const char* chPoint  = "123";
cout<< sizeof(chPoint) << endl;//输出4 指针的字节数 4
int * p;
cout<< sizeof(p) << endl;//输出4 指针的字节数 4
 

sizeof struct

关键要注意区分字节对齐,

对齐的两个原则:

1.占用空间最大成员变量的字节数作为对齐方式

2.内存按照成员的先后顺序来排列。不够对齐的,补齐字节即进行padding。

代码语言:txt
复制
//以结构体内最大的字节类型对齐 注意区分下面两种情况:
struct St1
{
    char a;// 1 + padding 3
    int b; // 4 + padding 0
    short c; // 2 + padding 2
}; // total: 4+4+4 = 12

struct St2
{
    int a; // 4 + padding 0
    char b; // 1 + padding 0
    short c; // 2 + padding 1
}; //total:4+1+2 = 8.

sizeof union

代码语言:txt
复制
union UN{
    int a;
    char b;
};

cout<<"UN:" <<  sizeof(UN) << endl;//输出4 按照最长的对齐

sizeof class

sizeof对class的时候,用来表示class中所有字段类型占用的字节数,对于空类,默认结果是1.

虚继承和虚函数都分别占有一个指针。子类的字节数包含父类。

代码语言:txt
复制
//空类
class A{} ;//sizeof(A):1
//继承
class A1{public : int a ;} ///sizeof A1: 4
class A2 :public A1 {} //sizof A2:4 继承了A1 的int型字节数

//带有static对象的类型
class A3{static int a;} ;//sizeof(A3):1 static存储在静态存储区,不计算在class对象的字节数内

//虚函数
class B
{
public:
    virtual void f(){};
}; //sizeof  B : 4 .虚函数里保存一个指向虚表的指针,所以是4.

//虚继承
class D : public virtual  B //虚函数 虚继承 两个指针 占有两个int 字节  8
{

};//sizof D : 8字节
class E: public virtual  B  //虚函数 虚继承 两个指针 占有两个int 字节  8
{
    //virtual void f(){};
};//sizof F : 8字节

class F :public  D ,E
{
    //void f(){};
}; //sizof F : 16字节 继承自 D 和E的字节数

pack语句

使用prama pack 可以设定字节的对齐长度。如:

代码语言:txt
复制
#pragma   pack(4)//设定为4字节对齐  

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sizeof
    • sizeof 基本类型
      • sizeof 数组与指针
        • sizeof struct
          • sizeof union
            • sizeof class
              • pack语句
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档