zoukankan      html  css  js  c++  java
  • 内存编址和寻址、内存对齐

    1、内存编址方法

    (1)、内存在逻辑上就是一个一个的小格子,这些格子可以用来装东西,也就是内存中存储的数据,每个格子都有一个编号,这个编号(下图中的0 1  2  3 ......)就是内存地址,这个内存地址(一个数字)和这个格子的空间(实质是一个空间)是一一对应的并且是永久绑定的。这就是内存的编址方法。

    (2)、在程序运行时,CPU只认识内存地址,而不关心这个地址所代表的空间在哪里以及怎么分布这些实体问题。因为硬件的设计保证了只要有地址,就一定能找到这个格子在哪里,所以说内存单元有两个概念:地址和空间

    2、关键:内存编址是以字节为单位的

      每个内存地址对应的内存大小的空间是固定的,就是一个字节(8bit)

    3、内存和数据类型的关系

    C语言中基本的数据类型有:char   short    int      long     float    double  

    int  整型(这个整就体现在它和cpu本身的数据位宽是一样的),例如32位的cpu,int就是32位。

    数据类型与内存的关系就在于:

    数据类型是用来定义变量的,而这些变量需要存储、运算在内存中。所以数据类型必须和内存相匹配才能获得最好的性能,负责就有可能不工作或者是效率低。

    在32位操作系统中定义变量最好用int,因为这样效率高。

    4、内存对齐

    我们在C中定义一个int类型的变量,在内存中就必须分配4个字节来存储这个变量。就有两种不同的分配思路和策略:

    第一种就是:  0  1  2  3                      对齐访问

    第二种就是:  1  2  3  4或  2  3  4  5或 3  4  5  6          非对齐访问

    内存的对齐访问不是逻辑问题,是硬件问题。从硬件角度来说,32位内存 它 0  1  2  3四个单元本身逻辑上就有相关性,这四个字节组合起来当作一个int硬件上就是合适的,效率就高。

    所以说,对齐访问很配合硬件,效率高;非对齐访问因为和硬件本身不搭配,所以效率不高。

    5、从内存编址看数组的意义

    数组可以看作就是内存的一部分,把内存抠出来一部分,就可以当成一个数组来看。

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11346145.html
Copyright © 2011-2022 走看看