在VC6.0中sizeof结果是16.我电脑上装了个linux虚拟机,在虚拟机上GCC中结果是12,
恩不同编译器默认对齐数值不一样。 VC 默认为 8 gcc 默认为 4 有个编译参数控制对齐。 #pragma pack(4) 加上这个,对齐应该一样了。
VC和GCC默认的都是4字节对齐,编程中可以使用#pragma pack(n)指定对齐模数。出现以上差异的原因在于,VC和GCC中对于double类型的对齐方式不同。    Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则: 任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。     Linux下的GCC奉行的是另外一套规则:任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2,而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度。 struct{char a;double b;}         在VC中,因为结构中存在double和char,按照最长数据类型对齐,char只占1B,但是加上后面的double所占空间超过8B,所以char独占8B;而double占8B,一共16Byte。     在GCC中,double长度超过4字节,按照4字节对齐,原理同上,不过char占4字节,double占两个4字节,一共12Byte。http://zhidao.baidu.com/link?url=iWrBy6yXFRy-vXDmtX3HWVJF7GYVFciWUZHNywJJlUeCGBsBSr32nc5OY2B22mCArHml49fUk-dKxqfAtustVa

原帖由 scutan 于 2007-6-28 14:04 发表
[CODE]
#include<stdio.h>

struct A
{
double l;
int i;
int b;
char c;
};

int main()
{
        struct A m[2];
        printf("%d\n", sizeof(struct A));
        pri ...

http://bbs.chinaunix.net/thread-955085-1-1.html

每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。在lz的程序中,n默认是4。在这个前提下分析lz得到的结果:

4字节对齐(#pragma pack(4))sizeof(m[0]) = 20;分析过程:1)成员数据对齐struct A {  double l;        /* 长度8 > 4 按4对齐;起始offset=0 0%4=0;存放位置区间[0,7] */  int i;            /* 长度4 = 4 按4对齐;起始offset=8 8%4=0;存放位置区间[8,11] */  int b;           /* 长度4 = 4 按4对齐;起始offset=12 12%4=0;存放位置区间[12,15] */  char c;         /* 长度 1 = 4 按1对齐;起始offset=16 16%1=0;存放位置区间[16] */};成员总大小为17,整体对齐系数=min(max (double, int, char), 4) = 4;整个结构体的大小=20,为什么不是上面算出来的17呢?这里涉及到一个叫做“圆整”的概念。什么叫“圆整”?比如在这个例子,从17开始,看看那个位置可以被“整体对齐系数(4)”整除,17,18,19都不合适,所以到20,圆整结束。这也解释了为什么第二个结构体开始的位置不能被8整除,其实只要个能被4整除就可以了。

http://blog.csdn.net/ehui928/article/details/546391

转载于:https://www.cnblogs.com/xuhj001/p/3504218.html

sizeof,真正终结版GCC与VC相关推荐

  1. 【你好,windows】Windows Embedded Standard 7 X86X64纯净终结版2020.1.27

    1.WES7(Windows Embedded Standard 7)是微软在2010年5月13日发布的基于X86平台的组件化的Windows 7嵌入式操作系统(俗称瘦客户端).升级IE11.0,主页 ...

  2. coursera_poj_魔兽世界终结版

    五个下午的时间!!!!终于过了!! 有史以来做的最复杂的一个题 这是我迄今为止做的最复杂也最具有挑战的一个oj作业.虽然之前做过比这个规模一些作业项目,但是往往有简单的模块框架,模块之前的关系也只是有 ...

  3. html div位于居中元素右边,如何居中一个元素(终结版)

    原标题:如何居中一个元素(终结版) 作者:前端工匠公号 / 浪里行舟 (本文来自作者投稿)前言 本文主要介绍水平居中,垂直居中,还有水平垂直居中各种办法,思维导图如下: 一.水平居中 1.行内元素水平 ...

  4. 强迫症终结版 - 蹩脚梨视频下载器(很菜勿喷)

    强迫症终结版 - 蹩脚梨视频下载器 支持功能: 自己选择要下载的视频分类 视频个数(12的倍数,最新的...个)(不要怪不能高度自定义啦~) 重复文件自动跳过 菜单会被控制台打印顶掉,大家见谅(才疏学 ...

  5. 【你好,windows】Windows 10 X64 19H2 18363.1556 终结版2021.5.16

    1.采用蓝点网提供Windows 10 Version 1909 (19H2) 官方原版镜像,提取专业工作站版本制作,原版下载地址:https://www.landiannews.com/archiv ...

  6. 强烈建议三星S7edge刷番茄花园V14终结版

    之前刷了极光的ROM,但是有个严重的问题,前置摄像头拍不了照片.所以尝试刷了番茄花园的ROM,感觉特别好. 番茄花园S7edge几个重要版本: 番茄花园 S7 EDGE G9350 v1.0 http ...

  7. 蜻蜓特派员 Windows XP SP3 纯净终结版

    蜻蜓特派员Windows XP SP3 纯净安装版 终结版,系统纯净无广告.无插件,网卡等驱动和运行库齐全,安全更新补丁全网最新!微软停止了 Windows XP 的支持之后还是偶尔为 WinXP 提 ...

  8. 我心如水_Win8_PE_x64_x86_无忧启动终结版

    兼容32位.支持网络.支持UEFI与EFI启动. 支持量产.刻盘.U+不隐藏.普通隐藏.高端隐藏...安装. ISO也能放入UD启动. 最新x64.x86 的实用程序.维护计算机足够. "管 ...

  9. Windows Vista Ultimate OEM 21in1 简体中文版(终结版)

    终结版总结: 包含19种OEM版本:,分别是Lenovo(联想),IBM(IBM),HP(惠普),Compaq(康柏),DELL(戴尔),ASUS(华硕),Acer(宏碁),BenQ(明基),Fuji ...

  10. 修复大师 v3.0 终结版 怎么用

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

最新文章

  1. 复习04统计学习方法(朴素贝叶斯算法Naive Bayes)---图片版
  2. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
  3. Windows与Linux(服务器)之间大文件传输
  4. 第 10 章 对象的实例化内存布局与访问定位
  5. SQLServer 2000中,存储过程和用户自定义函数具体的区别??
  6. html打开软件连接的代码,《前端开发从零学起》Lesson.7 HTML中超链接的使用方法...
  7. 强制更改wifi名前缀CMCC
  8. nginx代理百度地图,实现内网展示百度地图
  9. 服务器架设无限流量,云服务器架设无限流量
  10. 高效C++ Effective C++
  11. JS数组常用的方法shift,unshift,splice,split,slice
  12. 巧萌易携之ROS2Go的不完全教研攻略
  13. 微信预览wx.previewImage黑屏
  14. CGB 2107 2021.8.18 笔记
  15. text-align 和 align的区别
  16. 3D美术人员Technical Artist(TA技术美术)的学习之旅(2)
  17. 媒体文件格式分析FMP4
  18. 前端js下载本地模板
  19. 关于OAI-PMH协议
  20. LCD液晶显示屏常见类型和接口

热门文章

  1. crontab实现以秒执行,很好很强大
  2. IOS恢复备份使用帮助
  3. 使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件
  4. 解决在ubuntu 12.10安装vmware-tools实现文件共享问题
  5. 解决问题--Maven,IDEA项目External Libraries下只有jdk没有maven依赖
  6. 老板放过我吧!我Java8还没用呢,又让我学习Java14
  7. 想进入互联网公司,怎能不知道互联网的技术架构!
  8. 冒着被开除的风险也要给大家看看看这份Spring Cloud 总结
  9. 改变计算技术的9个伟大算法
  10. 如何在Linux系统列出systemd下所有正在运行的服务