内存对齐,关于 __align()的理解

1. 内存对齐

1.1 定义(什么是内存对齐) 


编译器为程序中的每个数据单元安排在适当的位置上,从而减少CPU访存次数,提高数据读取效率的一种方式。

1.2 原因(为什么要内存对齐):


平台移植:不同硬件平台不一定支持内存的随机存取,使用内存对齐可以保证每次访问都从块地址头部开始存取。
性能原因:为了访问未对齐的内存数据,处理器需要至少进行两次内存访问;而对齐的内存访问仅需要一次访问。


1.3 如何进行内存读取


32位系统采用的是4字节对齐方式,即从4字节的倍数地址开始读取数据,这样可以保证数据对齐,提高内存读取的效率。而基本数据类型的大小设置,保证了数据对齐后不会出现跨4字节的两次读取问题。
缺点:内存对齐没有充分利用存储空间,但是以空间换时间对于常见业务场景会更高效

// 空间换时间:
// 可以避免int a;int b;相邻同时加载到同一个cache行
// 然后同时失效导致cache miss概率增加
struct CacheTest{
	int a;
	char b[64];
	int b;
};

1.4 内存对齐示例

#include<stdio.h>
struct Test {
	char y;// 一个字节
    int x;// 四个字节
};
int main() {
	// 最大的按照最大对齐,其余的进行填充。输出为8
    printf("%d\n",sizeof(Test)); 
    return 0;
}


 详细链接:              
https://blog.csdn.net/qq_43840665/article/details/128424438

https://blog.csdn.net/qq_43840665/article/details/128424438


原文链接:https://blog.csdn.net/qq_43840665/article/details/128424438

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工大老张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值