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:
理论数据大小
不用数据对齐方式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位的字符表示。...