// 对齐原则:每一成员需对齐为后一成员类型的倍数

// 补齐原则:最终大小补齐为成员类型最大值的倍数
struct A
{
 int a;     // 4
 short b;   // (4) + 2 = 6 下一元素为 int,需对齐为 4 的倍数, 6 + (2) = 8
 int c;     // (8) + 4 = (12)
 char d;    // (12) + 1 = 13, 需补齐为 4 的倍数,13 + (3) = 16
};
struct B
{
 int a;     // 4
 short b;   // (4) + 2 = 6,下一成员为 char 类型,不考虑对齐
 char c;    // (6) + 1 = 7,下一成员为 int 类型,需对其为 4 的倍数,7 + (1) = 8
 int d;     // (8) + 4 = 12,已是 4 的倍数
}
所以sizeof(A)=16,sizeof(B)=12
 
2。不同的数据类型在32位和64位下所占字节的区别

32位编译器:

char :1个字节
       char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
      short int : 2个字节
      int: 4个字节
      unsigned int : 4个字节
      float: 4个字节
      double: 8个字节
      long: 4个字节
      long long: 8个字节
      unsigned long: 4个字节

64位编译器:

char :1个字节
      char*(即指针变量): 8个字节
      short int : 2个字节
     int: 4个字节
      unsigned int : 4个字节
      float: 4个字节
      double: 8个字节
      long: 8个字节
      long long: 8个字节

      unsigned long: 8个字节
 
类的大小只与成员变量(非static数据成员变量)和虚函数指针有关,还要考虑到对齐.

struct 对齐和补齐原则的更多相关文章

  1. C语言对齐、补齐

    加快CPU读取数据的速度 aligned(n) 让所作用的结构成员对齐在n字节自然边界上.如果结构中有成员的长度大于n,则按照最大成员的长度来对齐 struct s { char c; int i; ...

  2. 数据结构《16》----自动补齐实现《一》----Trie 树

    1. 简述 Trie 树是一种高效的字符串查找的数据结构.可用于搜索引擎中词频统计,自动补齐等. 在一个Trie 树中插入.查找某个单词的时间复杂度是 O(len), len是单词的长度. 如果采用平 ...

  3. auto semicolon insertion 自动分号补齐的坑

    今天发现js自动分号补齐的坑,来看如下两段代码: function Hello(){ return { name: ’JavaScript’ }; } alert(Hello()); //输出unde ...

  4. js获取系统时间时自动补齐日期带零

    最近在开发中发现有日期不规范的问题,正常规则应该是yy-mm-dd,而在输出时候却变成yy-mm-d,这是js的date()方法在作怪 解决思路是若在10号前,则自动给它补齐一个0,下面给出解决方法, ...

  5. CocoaPods 导入第三方库头文件自动补齐

    使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...

  6. 为Debian/Ubuntu的apt-get install添加自动补齐/完成功能

    Debian/Ubuntu的apt-get太常用了,不过偶尔可能也会碰到不太熟悉,想不起来的包的名称,除了去debian packages去查找,另外的方法就是给Debian/Ubuntu添加自动补齐 ...

  7. Delphi中字符串补齐方法

    函数功能:当Str不满Len长度时,在Str前自动填充PadStr以补足长度,例子如下: Str:原字符串 Len:补多长 PadStr:用什么补齐,比如‘0’ function PadString( ...

  8. jquery.autocomplete自动补齐和自定义格式

    1.简单的下拉自动补齐,可以使用本地或远程数据源 <input name="autoTag" id="autoTag" /> var source ...

  9. HTML5的数据自动补齐功能

    使用datalist元素,HTML5允许使用一组数据来生成自动补齐功能,现在你不需要使用第三方js代码或者类库啦! <input name="frameworks" list ...

随机推荐

  1. Jmeter 非 GUI 命令行执行脚本文件

    https://www.cnblogs.com/yebaofang/p/9803273.html

  2. git配置代理

    1.查看当前代理 git config --global http.proxy 2.配置git走代理,可走http代理也可以走socks5代理,可根据自己的代理协议而定 #http代理 git con ...

  3. jquery 禁止回车事件响应

    $(this).keydown( function(e) { var key = window.event?e.keyCode:e.which; if(key.toString() == " ...

  4. 利用树莓派来安装opencv从而来调动摄像头工作(没有坑,超超自己试过)

    超超最近参加了学校里一位特别厉害的老师讲的课(两天,我就从一个小白然后了解了树莓派以及Arduino这些我之前都没有了解过的东西,由于结课的需要,我们需要自己设计一个创意以及完成作品)所以才有了这篇文 ...

  5. VM安装centos7

    镜像:笔者采用的是CentOS-7-x86_64-Minimal-1810.iso版本 1.创建新的虚拟机 2.典型安装与自定义安装 典型安装:VMwear会将主流的配置应用在虚拟机的操作系统上,对于 ...

  6. Redis事务和实现秒杀功能的实现

    今天带着学生学习了Redis的事务功能,Redis的事务与传统的关系型数据库(如MySQL)有所不同,Redis的事务不能回滚. Redis中使用multi.exec.discard.watch.un ...

  7. [工作积累] Tricks with UE4 PerInstanceRandom

    最近在用UE4的Instancing, 发现限制很多. Unity有instancing的attribute array (uniform/constant buffer),通过InstanceID来 ...

  8. 《python for data analysis》第五章,pandas的基本使用

    <利用python进行数据分析>一书的第五章源码与读书笔记 直接上代码 # -*- coding:utf-8 -*-# <python for data analysis>第五 ...

  9. C#利用首尾時間計算中間時間差

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. 初始化HTML样式(转载)

    方式一 ;; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana, Arial, Helvetica, ...