内存对齐
看了好多次,感觉这一次才算是真正理解了
#pragma pack(4)//可手动指定对齐值
typedef struct DDD
{
char a;//1 起始位置可为1,2,3,4,5……. 这个放在位置1
short b;//2起始位置可为1,2,4,6,8….. 这个需要放在位置2,故之前补1
int c;//4 起始位置可为1,4,8,16……. 这个需要放在位置4,刚好是4
double d;//8 起始位置可为1,8,16,24,32…..这个需要放在位置8,刚好是8
char e;//1 这个需要放在位置9,刚好是9
}AAA;//在最后,需要对整个结构体对齐,对齐方式是min(系统默认对齐值,max(char,int ,double) )
#pragma pack(4) //用于指定在最后对齐的方式,和结构体中变量最大的长度相比取最小值进行外部对齐
1、 首先按照结构体内部数据成员进行对齐
2、 其次在内部对齐后在对整个结构体进行对齐
下面具体来说,内部对齐时,每一个成员都按照自身大小的整数倍进行对齐,比如说int类型,必须放在起始位置为1、4、8、16….等位置。
在内部对齐完成后,要对整个结构体进行对齐,这是的对齐方式就是min(系统默认对齐值,max(char,int ,double) )
说明:这里说从1开始,实际上内存里地址是从0开始的,但是不影响理解
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/4346931.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?