首页 > 系统相关 >为什么要做内存对齐

为什么要做内存对齐

时间:2023-02-13 15:45:47浏览次数:53  
标签:为什么 场景 字节 内存 对齐 数据 读取

我们在自己写内存申请函数的时候经常会有2字节、4字节、8字节等的内存对齐.但是为什么要做内存对齐呢?

來源:哥斯拉啊啊啊哦

CPU访问内存是按照内存块进行读写的,内存块可能并不只是一个自己,而是一个(多个字节组成的)连续的块;

 内存对齐 是将特定的数据类型按照一定的规则摆放在内存上,以此 提高cpu访问内存的速度

 

 

如上图,内存访问颗粒度为4,数据大小为4字节的场景:

场景1:做了内存对齐,index 2-3 补充空字节,这样 数据1,数据2 都刚好只存在一个内存块中,
读取数据时,一次就能将数据读取完毕

场景2:没有内存对齐,数据2 一部分存在内存块1中,一部分存在内存块2中。
读取数据2时,需要将块1的数据0-3读取出来,丢弃0-1字节数据,
再读取块2的数据4-7,丢弃6-7字节的数据,
再组合 2,3,4,5字节才能得到数据2

总结:很明显,场景2读取数据比场景1繁琐许多。
如果不做内存对齐,cpu在读取内存数据时,会增加许多耗时的动作。
而做了内存对齐后,虽然会产生一部分内存碎片,但极大提高了cpu访问内存数据的速度,属于空间换时间的做法

提高访问速度是内存对齐的原因之一,另外一个原因是某些平台(arm)不支持未内存对齐的访问

 

标签:为什么,场景,字节,内存,对齐,数据,读取
From: https://www.cnblogs.com/8335IT/p/17116571.html

相关文章

  • 为什么要使用Docker?
    为什么使用Docker​​1、Docker为什么会出现​​​​2、Docker的理念​​​​3、容器与虚拟机的比较​​​​4、Docker能做什么?​​​​4.1一次构建、随处运行​​​​4.2......
  • 为什么这11道JVM面试题这么重要(附答案)
    本文内容整理自博学谷狂野架构师运行时数据区都包含什么虚拟机的基础面试题程序计数器Java虚拟机栈本地方法栈Java堆方法区程序计数器程序计数器是线程......
  • 【JVM】JVM各个内存模型存储内容详解
    1 前言JVM的内存模型,想必大概都清楚了,可以看之前的文章,有讲解。那么JVM每个内存模型里都存哪些内容呢,本文来追一下。2 内存模块存储内容运行时数据区大概分5部分,方......
  • 2023-02-13 【Android studio内存不足】 Out of memory: Java heap space. Configure
    我的as版本:4.2.2测试环境:Android要修改as内存,需要修改两个地方:1、打开as,找到帮助==>更改内存设置==>最大堆大小,把2048修改成你想要的值,我是改成了8192,就是8g内存,接着重......
  • 第四章 熟练使用有棱有角的内存
    本章所讲的就是内存。内存是一个内存储器,断电消失的一个存储器,是计算机最重要的部分之一,是与cpu进行沟通的桥梁,是一种命名为内存IC的电子元件,内存IC中有电源、地址信号、数......
  • 【CTO变形记】有序定无序—为什么越努力,越无力
     前言:我们用自己构建的认知结构来理解和映射这个世界,通过外界的反馈来调整现有的认知。但面对的现实越来越复杂,以及面对更多的未知且陌生的情况时,我们常常试图去“修......
  • 为什么用元空间替代永久代?
    永久代和元空间都是HotSpot虚拟机中的概念,HotSpot虚拟机是SunJDK和OpenJDK中自带的虚拟机,也是目前使用范围最广泛的Java虚拟机,当我们提到虚拟机时,大概率指的就......
  • 【JVM】JVM内存模型的演变
    1 前言讲多了Class文件、类加载过程,我们的Class文件就要进到JVM内存里了,那就先来了解下JVM内存模型都进行了哪些演变。主要演变的就是:1.7、1.8都是对方法区中的改变......
  • Redis内存淘汰策略
    内存淘汰:就是当redis内存达到设置的阈值时,主动挑选部分key删除以释放内存可以分为两个问题:1,redis什么时候去检查内存够还是不够?2,怎么来决定删除哪些key?(淘汰策略) 1,如......
  • C语言学习:几个常见的内存操作函数
     #include<io_utils.h>#include<string.h>#include<stdlib.h>intmain(){//memchr()//strchr()//memcmp()//strcmp()//memset()char*mem......