详解内存对齐

欢迎大家点击上方文字「Golang梦工厂」关注公众号,设为星标,第一时间接收推送文章。

前言

哈喽,大家好,我是asong。好久不见,上周停更了一周,因为工作有点忙,好在这周末闲了下来,就赶紧来肝文喽。今天我们来聊一聊一道常见的面试八股文——内存对齐,我们平常在业务开发中根本不care内存对齐,但是在面试中,这就是一个高频考点,今天我们就一起来看一看到底什么是内存对齐。

前情概要

在了解内存对齐之前,先来明确几个关于操作系统的概念,更加方面我们对内存对齐的理解。

  • 内存管理:我们都知道内存是计算中重要的组成之一,内存是与CPU进行沟通的桥梁,用于暂存CPU中的运算数据、以及与硬盘等外部存储器交换的数据。早期,程序是直接运行在物理内存上的,直接操作物理内存,但是会存在一些问题,比如使用效率低、地址空间不隔离等问题,所以就出现了虚拟内存,虚拟内存就是在程序和物理内存之间引入了一个中间层,这个中间层就是虚拟内存,这样就达到了对进程地址和物理地址的隔离。在linux系统中,将虚拟内存划分为用户空间内核空间,用户进程只能访问用户空间的虚拟地址,只有通过系统调用、外设中断或异常才能访问内核空间,我们主要来看一下用户空间,用户空间被分为5个不同内存区域:

    内存的知识先介绍个大概,对于本文的理解应该够了,我们接着介绍操作系统几个其他概念。

    • 代码段:存放可执行文件的操作指令,只读

    • 数据段:用来存放可执行文件中已初始化全局变量,存放静态变量和全局变量

    • BSS段:用来存未初始化的全局变量

    • 栈区:用来存临时创建的局部变量

    • 堆区:用来存动态分配的内存段

  • CPU:中央处理单元(Cntral Pocessing Unit)的缩写,也叫处理器;CPU是计算机的运算核心和控制核心,我们人类靠着大脑思考,电脑就是靠着CPU来运算、控制,起到协调和控制作用,从功能来看,CPU 的内部由寄存器、控制器、运算器和时钟四部分组成,各部分之间通过电信号连通。

  • CPU和内存的工作关系:当我们执行一个程序时,首先由输入设备向CPU发出操作指令,CPU接收到操作指令后,硬盘中对应的程序就会被直接加载到内存中,此后,CPU 再对内存进行寻址操作,将加载到内存中的指令翻译出来,而后发送操作信号给操作控制器,实现程序的运行或数据的处理。存在于内存中的目的就是为了CPU能够过总线进行寻址,取指令、译码、执行取数据,内存与寄存器交互,然后CPU运算,再输出数据至内存。

  • osos全称为Operating System,也就是操作操作系统,是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务组织用户交互的相互关联的系统软件,同时也是计算机系统的内核与基石。

  • 编译器:编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器(preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序(executables)。

写在最后的一个知识点:

计算机中,最小的存储单元为字节,理论上任意地址都可以通过总线进行访问,每次寻址能传输的数据大小就跟CPU位数有关。常见的CPU位数有8位,16位,32位,64位。位数越高,单次操作执行的数据量越大,性能也就越强。os的位数一般与CPU的位数相匹配,32CPU可以寻址4GB内存空间,也可以运行32位的os,同样道理,64位的CPU可以运行32位的os,也可以运行64位的os

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值