alignas的使用C语言,C++11新增alignas关键字作用

alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。

下面先写个alignas对齐的实际代码,等下再来说为什么会这样。

alignas数据对齐测试代码

C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

//梁笔记

//zouzhongliang.com

#include

usingnamespacestd;

structstruct_Test1

{

charc;

inti;

doubled;

};

structalignas(8)struct_Test2

{

charc;

inti;

doubled;

};

structalignas(16)struct_Test3

{

charc;

inti;

doubled;

};

structalignas(32)struct_Test4

{

charc;

inti;

doubled;

};

int_tmain(intargc,_TCHAR*argv[])

{

struct_Test1test1;

struct_Test2test2;

struct_Test3test3;

struct_Test4test4;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

system("pause");

return0;

}

alignas数据对齐测试结果:

alignas数据对齐测试结果

C++

1

2

3

4

5

6

7

8

charsize:1

intsize:4

doublesize:8

test1size:16

test2size:16

test3size:16

test4size:32

请按任意键继续...

test1理论字节大小13:

c6645eb81d02080d596f868164c2c2db.png理论数据大小

不用数据对齐方式test1占用16个字节,为什么?因为计算机会做字节对齐,一般都是对齐8位,如果不用alignas关键字,默认一般是8位对齐,但也有机器不是8位对齐。

test2占用16字节,对齐方式alignas(8)

test3占用16字节,对齐方式alignas(16)

test4占用32字节,对齐方式alignas(32)

计算方法就是对齐数的整数倍,比如32位对齐,实际数据大小不到32字节,但内存还是占用32字节。实际数据大于32字节小于64字节,内存占用64字节。

这种明确规定占用字节大小后,编写代码将更具有跨平台性。

相关文章:C++11语言auto关键字作用C++11中对关键字auto进行了重新定义,可以让编译器根据初始值类型自动推断变量的类型。auto a  = 0;   //推断出a类型为int atuo b = 0.0;  //推断出b类型doublu auto c = 'A';  //推断出c类型是char如果不知道为什么能自动推断出来可以看下:常量类型     和   C++常量类型 获取上面写的都是推断基本类型,当然C++11 auto关键字并非只样简单的运用,更多的是为了自定义类型推断。相信很多人在写迭代器时会很头痛,太长了。先个vector类型的迭代器。...

C++11关键字decltype用途关键字decltype将变量的类型声明为表达式指定的类型。下面的语句的含义是,让y的类型与x相同,其中x是一个表达式。decltype (x) y;decltype的工作原理比auto复杂,可以指定类型为引用和const。...

C++11新增关键字nullptrnullptr关键字就是表示空指针的意思,C++11之前空指针都是NULL。已经有了NULL哪为什么还要有nullptr关键字? nullptr表示空指针,不能转换为整型类型。为了向后兼容,C++11仍允许用0(NULL)来表示空指针。建议使用nullptr而不是0(NULL),因为更高的类型安全。...

switch作用switch语句允许你通过一个表达式判断许多数值,它一般用来在多重循环中代替if()...else if()...else if()... 语句. break 语句必须在每个case 语句之后, 负责循环将执行所有的case语句.default case 是可选的.假如所有的case都不能匹配的话,他将和defult case匹配. 例如:...

struct作用Structs 类似于 classes, struct中的成员更像是类中的公共成员.在C中,structs 仅能包含数据并不允许有继承表. 例如:...

namespace作用关键字namespace允许你创建一个新的空间.名字由你选择,忽略创建没有命名的名字空间.一旦你创建了一个名字空间,你必须明确地说明它或者用关键字using....

union作用Unions 类似于 classes,除了所有的成员分享同一内存外它的缺省值更像公共类型. 例如:...

C++11模板别名类型取别名,可以用typedef关键字,一般将类型名比较长的,再取个别名,在使用时会更方便。写几个用typedef关键字取的别名:...

类型转换函数作用详解先来看一段代码: circle c1; string strc21 = c1; //这句编译通不过 cout...

C++11新增类型C++11新增类型long long和unsigned long long,以支持64位(或更宽)的整型;新增为型char16_t和char32_t,以支持16位和32位的字符表示。...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值