内存对齐对于基础类型,如float,double,Int,char 等,它们的大小和内存占用是一致的,而对于结构体'而言,如果我们取得其slzeof的结果,会发现这个值有可能会大于结构体内所有成员大小的总和,这是由于结构体内部成员进行了内存对齐°。为什么要进行内存对齐①内存对齐使数据读取更高效在硬件设计上,数据读取的处理器只能从地址为k的倍数的内存处开始读取数据。这种读取方式相当于将内存分为了多个“块”,假设内存可以从任意位置开始存放的话,数据很可能会被分散到多个“块”中,处理分散在多个块中的数据需要移除曾尾不需要的字节,再进行合并,非常耗时。为了提高数据读取的效率,程序分配的内存井不是连续存储的,而是按首地址为k的倍数的方式存储:这样就可以一次性读取数据,而不需要额外的操作。读取非对齐内存'的过程示例②在某些平台下,不进行内存对齐会崩溃内存对齐的规则定义有效对齐值 (allgnment)为结构体中最宽成员 和编译器/用户指定对齐值 中较小的那个。(1)结构体起始地址为有效对齐值的整数倍(2)结构体总大小为有效对齐值的整数倍(3)结构体第一个成员偏移值'为0,之后成员的偏移值为mln(有效对齐值,自身大小)的整数倍相当于每个成员要进行对齐,并且整个结构体也需要进行对齐。示例structA(13비char ct;char c2;);Int maln())cout




THE END
- 本文链接:
- https://zxki.cn/wzym/55778.html
- 版权声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
请登录后发表评论
注册
停留在世界边缘,与之惜别