struct 字节对齐问题(不包含struct嵌套的讨论以及修改机器的对齐方式的时候),更详细的请参考收藏

    字节对齐掌握4个原则:

            1 与首地址的偏移量必须是变量长度的整数倍

            2 变量按定义的顺序存放

            3 整个结构体的长度必须是最长成员变量长度的整数倍

            4 如果有struct嵌套,则子struct中的变量必须在整个struct符合以上三个原则,但是子struct自身各个变量之间的存储位置不会变。

e.g.

          struct NSSB{
           long a;
           short b;
           char c;
           short d;
           char ch[3];
          }obj,*p;

 cout<<"sizeof long "<<sizeof(long)<<endl;
 cout<<"sizeof double "<<sizeof(double)<<endl;
 cout<<"sizeof float "<<sizeof(float)<<endl;
 cout<<"sizeof int "<<sizeof(int)<<endl;
 cout<<"sizeof short "<<sizeof(short)<<endl;
 cout<<"sizeof char "<<sizeof(char)<<endl;
 cout<<"sizeof p "<<sizeof(p)<<endl;
 cout<<"sizeof *p "<<sizeof(*p)<<endl;

 p=(struct NSSB *)0x1000000;
// cout<<"next struct is "<<(p + 0x1)<<endl;
 //obj.c = 'C';
 cout<<"a "<<&obj.a<<endl;
 cout<<"b "<<&obj.b<<endl;
 cout<<"c "<<&obj.c<<endl;
 cout<<"d "<<&obj.d<<endl;
 cout<<"ch "<<&obj.ch<<endl; 

 

运行结果:

[root@127 test]# ./test.x
sizeof long 4
sizeof double 8
sizeof float 4
sizeof int 4
sizeof short 2
sizeof char 1
sizeof p 4
sizeof *p 16
a 0xbfcee3c0
b 0xbfcee3c4
c d��ο
d 0xbfcee3c8
ch 0xbfcee3ca

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值