C语言对齐特性

C11的对齐特性比用位填充字节更自然。在这种上下文中,对齐指的是如何安排对象在内存中的位置。例如,为了效率最大化,系统可能把一个double类型的值储存在4字节内存地址上,但却允许吧char储存在任意地址。
_Alignof运算符给出一个类型的对齐要求,在关键字后面的圆括号中写上类型名即可:

size_t d_align = _Alignof(float);

假设d_align 的值是4,一是float类型对象的对齐要求是4.也就是说,4是储存该类型值相邻地址的字节数。一般,对齐值都应该是2的非负整数次幂。较大的对齐值被称为stricter或stronger,较小的对齐值被称为weaker。
可以使用_Alignas说明符制定一个变量或类型的对齐值。但是,不应该要求该值小于基本对齐值。例如:float的对其要求是4,不要请求其对齐值是1或者2。

#include <stdio.h>

int main()
{
	double dx;	
	char ca;
	char cx;
	double dz;
	double cb;
	char _Alignas(double) cz;

	printf("char 对齐:  [%zd]\n", _Alignof(char));
	printf("double 对齐:  [%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);

	return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值