特性:_Alignas()_Alignof()"/>
位操作之对齐特性:_Alignas()_Alignof()
位操作之对齐特性:_Alignas()
&&_Alignof()
对齐指的是如何安排对象在内存中的位置。
_Alignof
运算符给出了一个类型的对齐要求,在关键字_Aligo
f后面的圆括号中写上类型名即可:
size_t d_align = _Alignof(float);
假定d_align
的值是4,意思float
类型对象的对齐要求是4。较大的对齐值被称为stricter
或stronger
,较小的值被称为weaker
.
可以使用_Alignas
说明符指定一个变量或类型的对齐值,但是不应该要求该值小于基本对齐值。
_Alignas(double) char c1;
_Alignas(8) char c2;
unsigned char _Alignas(long double) c_arr[sizeof(long double)];
注意:
不同版本的要求不同,有的要求
_Alignas(type)
说明符在类型说明符的后面,有的在前面,无论哪一种都能够识别。
示例程序:
/** @Author: wangyunlong* @Date: 2020-03-08 20:45:04* @Last Modified by: Your name* @Last Modified time: 2020-03-08 21:11:28*/
#include <stdio.h>
#include<stdalign.h>
#include<stdlib.h>
int main(void)
{double dx;char ca;char cx;double dz;char cb;char _Alignas(double) cz;printf("char alignment: %zd\n", _Alignof(char));printf("double alignment: %zd\n", _Alignof(double));printf("&dx: %p\n",&dx);printf("&ca: %p\n",&ca);printf("&cx: %p\n",&cx);printf("&dz: %p\n",&dz);printf("&cb: %p\n",&cb);printf("&cz: %p\n",&cz);getchar();getchar();return 0;
}
运行结果:
char alignment: 1
double alignment: 8
&dx: 0061FF18
&ca: 0061FF17
&cx: 0061FF16
&dz: 0061FF08
&cb: 0061FF07
&cz: 0061FF00
更多推荐
位操作之对齐特性:_Alignas()_Alignof()
发布评论