class A
{
int a;
short b;
int c;
char d;
};
class B
{
double a;
short b;
int c;
char d;
};
在32位机器上用gcc编译以上代码,求sizeof(A),sizeof(B)分别是多少。

其实不同编译器答案是不一样的。

linux下double的对齐方式是4字节,而windows默认是8字节。。。

linux可以通过如下方式控制对齐方式

class B

{

double a;

short b;

int c;

char d;

}__attribute__((aligned(8)));

而WINDOWS是通过#pragma pack(n) 来控制编译器按照n个字节对齐。

但是如果按照大家比较能够理解的说法:

根据以下条件进行计算:
1、  结构体的大小等于结构体内最大成员大小的整数倍
2、  结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址偏移量应该是8的倍数。
3、  为了满足规则1和2编译器会在结构体成员之后进行字节填充!

那么答案就是:windows下编译答案是C, gcc下编译答案是D

最新文章

  1. GTest Google的一种白盒单元测试框架 开源项目
  2. mybatis中的#和$的区别(转)
  3. 在Django中进行注册用户的邮件确认
  4. Parse the main function arguments
  5. ecshop 重置后台密码 MD5+salt
  6. css整理-05 边框,背景和浮动,定位
  7. win10离线安装.net framework 3.5
  8. QQ登入(5)获取空间相册,新建相册,上传图片到空间相册
  9. ES6 入门系列 - let 和 const 命令
  10. 开发板ip设置
  11. linux编程进阶书推荐APUE,UNP
  12. Android初级教程启动定时器详解
  13. iOS中 加强日志输出 开发技术总结
  14. [Android] Android 卡片式控件CardView的优雅使用
  15. [USACO18DEC]Cowpatibility
  16. loadrunner 运行场景-场景运行原理
  17. fastdfs+nginx集群高可用搭建的一些坑!!记录一下
  18. MySQL中的IFNULL,IF,NULLIF函数
  19. nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
  20. Android网络请求库RetrofitUtils

热门文章

  1. Oracle12c开启scott账户
  2. 混合app开发--js和webview之间的交互总结
  3. C#编程思想(持续更新)
  4. C++使用libcurl
  5. Lua Doc生成工具
  6. Spring 快速开始 启动Spring
  7. 如何解决无法成功git commit 和git push
  8. pyqtgraph
  9. 使用Python批量修改文件名
  10. JQuery基本过滤器