记住几句话:

  结构体的长度一定是最长的数据元素类型的整数倍;

  某数据元素的起始地址能被该类型所占的字节数整除;

  静态变量是存放在全局数据区,而sizeof计算栈中分配的大小,不包括static变量;

#include <iostream>
#include <stdio.h>
using namespace std;
struct{//
short a1;
short a2;
short a3;
}A;
struct{//
char c1;
char c2;
short s;
int i;
}B;
struct{//
char c1;
short s;
char c2;
int i;
}C;
class D{//
public:
int b;
static char c;
};
struct{//22!!(总大小是2的倍数)
char d;
short b[];
char a[];
}E;
struct{//32!!
char a[];
int b;
char c;
double d;//(起始地址是8的倍数)
}F;
class G{//24!!(总大小是8的倍数)
public:
double d;
float a;
int b;
char c;
G();
~G();
};
int main(){
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<" ";
cout<<sizeof(E)<<" ";
cout<<sizeof(F)<<" ";
cout<<sizeof(G)<<" ";
return ;
}

运行结果:

sizeof运算符、字节对齐考点(面宝P50)的更多相关文章

  1. sizeof 与 字节对齐

    转:http://baike.baidu.com/view/1356720.htm sizeof是运算符,可用于任何变量名.类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号.    ...

  2. sizeof 4字节对齐

    #include <iostream> #include<assert.h> using namespace std; typedef struct sys{ char a; ...

  3. sizeof运算符来获取各种数据类型在内存中所占字节数--gyy整理

    C++并没有规定各种数据类型在内存中的存储大小,依赖于不同的编译器的不同而不同,要想获知当前编译器对各种数据类型分配的大小,可以通过sizeof运算符来获取. 使用方法1: sizeof(数据类型) ...

  4. 关于sizeof与#pragma pack 以及网络上关于字节对齐的一点感想

    工作中面试中对于字节对齐基本上是必考一个知识点,而很多面试是网络上上原题.基本上背一背就可以写正确,而关于4字节对齐我相信很多人也只是一个基本地了解,对于一些题目就感觉有问题,而且很多blog后面仍然 ...

  5. 字节对齐&&sizeof

    转:http://blog.chinaunix.net/uid-722885-id-124878.html 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { ...

  6. 结构体sizeof()问题与字节对齐

    32位机器上定义如下结构体: struct xx { long long _x1; char _x2; int _x3; char _x4[2]; static int _x5; }; int xx: ...

  7. Alignment And Compiler Error C2719 字节对齐和编译错误C2719

    Compiler Error C2719 'parameter': formal parameter with __declspec(align('#')) won't be aligned The ...

  8. 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)

    本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上?             成员函数可以被看作是类 ...

  9. c/c++ sizeof运算符详解以及对象大小

    原文:http://krystism.is-programmer.com/posts/41468.html 学过c的都知道sizeof运算符.不过还是需要注意以下几点.先从c的sizeof说起: 1. ...

随机推荐

  1. mint ui解决Navbar和Infinite scroll共存时的bug

    Navbar和Infinite scroll共同使用时会出现无限加载的问题,滑动也会出现乱加载. 只需要判断一下就可以了,代码: html: <mt-navbar v-model="s ...

  2. Java架构师 成长之路 -- 跳出程序员陷阱(转载)

    本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路. 如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序 ...

  3. div随着屏幕滚动而滚动

    <script type="text/javascript"> $(document).ready(function () { var menuYloc = $(&qu ...

  4. Elasticsearch-数值类型

    Elasticsearch-数值类型 数值类型可以是浮点数,也可以是费浮点数.如果不需要小数,可以选择byte.short.int或者long.如果确实需要小数,可以选择float和double.这些 ...

  5. 编程竞赛--关于"数"的概念

    质数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 合数:合数是指自然数中除了能被1和本身整除外,还能被其他数(0除外)整数的数.与之相对的是质数,而1既不属于质数也不属于合 ...

  6. 小记---------spark优化之更优分配资源

      spark优化:在一定范围之内,增加资源与性能的提升是成正比的. 因此,       一个cpu core  执行一个task线程. task数: 若有 cpu core 2个.num-execu ...

  7. ASP.NET Core中使用EasyCaching作为缓存抽象层

    ⒈是什么? 和CacheManager差不多,两者的定位和功能都差不多. EasyCaching主要提供了下面的几个功能 统一的抽象缓存接口 多种常用的缓存Provider(InMemory,Redi ...

  8. MySQL日期时间函数大全

    1.获取当前时间+日期 函数now() mysql> select now(); +---------------------+ | now() | +--------------------- ...

  9. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  10. 右键添加cmd notePad++快捷键

    1.将以下文字复制到txt文本,将txt修改为reg执行后,邮件菜单查. Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directo ...