说说sizeof体验

     一直都sizeof有点恐惧,老是被折磨的七荤八素的,感觉最近脑袋有点浆糊了。再次狠下心来,花了一个下午研究了一下sizeof的用法。sizeof那些基本用法就不啰唆了,网上一搜一大把,单纯讲讲自己的学习心得。

     首先讲一下sizeof(对象)吧,大家都知道sizeof一个空对象(没有任何成员)结果是1,但有没有想过假如这个对象没有成员变量,但有成员函数呢?这样的对象sizeof出来结果又是什么呢?假如你不知道或者不肯定就赶快弄个例子测试一下吧。下面我定义一个例子:

 class test

{

    void output()

    {}

};

上面这个类sizeof出来是多少呢?结果仍是1。先别骂我,还有下文。我再定义一个例子:

class test

{

     virtual void output()

    {}

};

这个类sizeof出来的结果是多少呢?答案是4.为什么呢?因为这个类多了一个指向虚函数表的指针,也就是说它多了一个指针,但因为不能明眼看到。这个也是sizeof的一个陷阱,也说明学习要注意细节。

      接下来说说sizeof的对齐问题吧,这也是sizeof的一个难点,再来这里我栽了几次跟头。先看看下面这个结构体吧:

struct s1

{

    int  i;

    double j;

    char c;

    int k;

};//sizeof(s1)=?

答案是24,这个结果相信不用细说,大家都算出来了。那么接下来这个这个结构体呢:

struct s2

{

  int i;

  char c;

  double j;

  int k;

};//sizeof(s2) = ?

答案依然是24。有点疑问吧?其实也没什么,因为人家要跟最大变量对齐,仅此而已,所以就算后面四个用不上,人家也要占个位。接下来这个这个结构体:

struct s3

{

  char c1;

  char c2;

  double j;

  int n;

};//sizeof(s3) =?

答案还是24,也是上面那个原因。再来看看这个下面这个结构体:

struct s4

{

   double j;

   char c1;

   char c2;

   int n;

};//sizeof(s4) = ?

这个答案不再是24了,而是16,为什么呢?因为double的对齐方式8,char的对齐方式是1,int的对齐方式是4,现在明白了吗?

  以上是今天下午研究sizeof所得体会。如若不足或者不对的地方,还望各位拍拍砖。

转载于:https://www.cnblogs.com/jack_zjz/archive/2010/10/31/1865640.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值