C++位域和内存对齐问题
struct bitmap
{
unsigned a : ;
unsigned b : ;
unsigned c : ;
}bit;
struct bitmap
{
unsigned a:;
unsigned :; /*空域*/
unsigned b:; /*从下一单元开始存放*/
unsigned c:;
}
sizeof(bitmap) == ;
struct bitmap
{
unsigned a:;
unsigned :;
unsigned b:;
unsigned c:;
};
sizeof(bitmap) == ;
struct bitmap
{
unsigned a : ;
unsigned b : ;
unsigned c : ;
};
sizeof(bitmap) == ;
class Demo
{
unsigned mode : ;
unsigned modeifed : ;
unsigned protA : ;
unsigned protB : ;
public:
...
};
struct X
{
char a;
float b;
int c;
double d;
unsigned e;
};
sizeof(X) == ;
struct X
{
char a; // 1 bytes
char padding1[]; // 3 bytes
float b; // 4 bytes
int c; // 4 bytes
char padding2[]; // 4 bytes
double d; // 8 bytes
unsigned e; // 4 bytes
char padding3[]; // 4 bytes
};
sizeof(X) == ;
struct bitmap
{
unsigned a : ;
int b;
unsigned c : ;
};
sizeof(bitmap) == ;
struct bitmap
{
unsigned a;
double c;
};
sizeof(bitmap) == ;
#pragma pack(4)
struct bitmap
{
unsigned a;
double c;
};
sizeof(bitmap) == ;
struct bitmap
{
double c;
int k;
int m;
};
sizeof(bitmap) == !=
struct bitmap
{
double c;
int k;
};
sizeof(bitmap) ==
class Test
{
public:
virtual void Hi(); int c;
double d;
};
sizeof(Test) == (IA32)或者 (x86-)
class Test
{
};
sizeof(Test) == ;
class A
{
double c;
public:
class B
{
int i;
double c;
}b;
int d;
};
sizeof(A) == sizeof(A::B) ==
7. C++的类静态成员不会被sizeof计算,这个要注意:
class C
{
public:
static char b;
static int *c;
};
sizeof(C)的结果是1
C++位域和内存对齐问题的更多相关文章
- C/C++: C++位域和内存对齐问题
1. 位域: 1. 在C中,位域可以写成这样(注:位域的数据类型一律用无符号的,纪律性). struct bitmap { unsigned a : ; unsigned b : ; unsigned ...
- C语言 结构体的内存对齐问题与位域
http://blog.csdn.net/xing_hao/article/details/6678048 一.内存对齐 许多计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地 ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- struct内存对齐1:gcc与VC的差别
struct内存对齐:gcc与VC的差别 内存对齐是编译器为了便于CPU快速访问而采用的一项技术,对于不同的编译器有不同的处理方法. Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则: ...
- 内存对齐-C语言struct内存占用问题
转1个写的比较全面的. http://hubingforever.blog.163.com/blog/static/17104057920122256134681/ 本文编辑整理自:http://hi ...
- C/C++中的内存对齐 C/C++中的内存对齐
一.什么是内存对齐.为什么需要内存对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址 ...
- C语言内存对齐(2)
前两天参加了360测试实习生的笔试,碰到了一个有关c语言内存对齐的题目,回来后实现了一下,下面是代码: #include <stdio.h> #include <stdlib.h&g ...
- C++内存对齐总结
大家都知道,C++空类的内存大小为1字节,为了保证其对象拥有彼此独立的内存地址.非空类的大小与类中非静态成员变量和虚函数表的多少有关. 而值得注意的是,类中非静态成员变量的大小与编译器内存对齐的设置有 ...
- C/C++ 知识点1:内存对齐
预备知识:基本类型占用字节 在32位操作系统和64位操作系统上,基本数据类型分别占多少字节呢? 32位操作系统: char : 1 int :4 short : 2 unsigned ...
随机推荐
- ASP.NET Core 依赖注入(DI)
ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core 应用程序可以利用内置的框架服务将服务注入到启动类的方法中,并且应用程序服务也可以配置注入.由ASP.NET Core 提 ...
- IDEA打开父类的接口方法快捷键
有两个类,分别为A类是接口.B类为A的实现类. 如果想在B类里的某个方法,打开A类 可以鼠标右键点击这个方法名,按下键盘:Ctrl+U,就可以跳转到A类接口的该方法上面.
- Spring Boot中使用Swagger2构建RESTful APIs介绍
1.添加相关依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <depen ...
- 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单
方法1:亲测 成功 转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...
- php连接mysql并读取数据
<?php $server_name="localhost:3306"; //数据库服务器名称 $username="root"; // 连接数据库用户名 ...
- charles之抓包和断点
一 .charles抓包 Charles抓包很简单,只要手机设置代理即可,不会的也可以去百度. 在这里是要记录抓包过程中win10遇到的问题,手机代理设置没问题但是就是抓不到包的情况 1.关闭防火墙 ...
- 模板——扩展欧几里得算法(求ax+by=gcd的解)
Bryce1010模板 /**** *扩展欧几里得算法 *返回d=gcd(a,b),和对应等式ax+by=d中的x,y */ long long extend_gcd(long long a,long ...
- Xor-sequences CodeForces - 691E || 矩阵快速幂
Xor-sequences CodeForces - 691E 题意:在有n个数的数列中选k个数(可以重复选,可以不按顺序)形成一个数列,使得任意相邻两个数异或的结果转换成二进制后其中1的个数是三的倍 ...
- (转)Unity优化之减少Drawcall
转载:http://www.jianshu.com/p/061e67308e5f Unity GUI(uGUI)使用心得与性能总结 背景和目的 小哈接触Unity3D也有一段时间了,项目组在UI解决方 ...
- php Try Catch多层级异常测试
<?php class a { public function a1 () { try { throw new Exception('123'); } catch (Exception $e) ...