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 ...
随机推荐
- 3、HTML的body内标签1
一.特殊符号的表示 #代指空格 < #代指,< > #代指,> ...... #这玩意有很多,记也记不完,用的时候查一下即可: 二.p和br标签 <p>< ...
- 任务44:Identity MVC: EF + Identity实现
使用VSCode开发 Razer的智能感知不好.所以这里切换为VS2017进行开发: 新建一个Data的文件夹来存放我们的DBContext.在Data文件夹下新建: ApplicationDbCon ...
- emacs配置文件的基础知识 (转载)
转自:http://blog.csdn.net/schumyxp/article/details/2278268 emacs的配置文件,叫作.emacs,是个隐藏文件,存在于当前用户的根目录下面,也就 ...
- Get back Typing Break in Ubuntu 12.04 & 11.10(转载)
转自:http://ubuntuguide.net/get-back-typing-break-in-ubuntu-12-04-11-10 Since Ubuntu 11.10 Oneiric, th ...
- HDU 6183 Color it(动态开点线段树)
题目原网址:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题目中文翻译: Time Limit: 20000/10000 MS (Java/Others ...
- Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
为什么要压缩页面静态资源 对于个人博客来说,优化页面的访问速度是很有必要的,如果打开你的个人站点,加载个首页就要十几秒,页面长时间处于空白状态,想必没什么人能够忍受得了吧.我个人觉得,如果能把页面的加 ...
- SQL-添加字段处理
1.alter table [dbo].[SiteTracks] drop constraint DF__SiteTrack__Audit__47DBAE452.ALTER TAB ...
- 洛谷 P4219 [BJOI2014]大融合
查询,就相当于先删去这条边,然后查询边的两个端点所在连通块大小,乘起来得到答案,然后再把边加回去 可以用线段树分治做 #pragma GCC optimize("Ofast") # ...
- selenium处理的操作
- vue在使用ajax获取数据时,两种方法(jquery和vue_resource)
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport ...