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、从内存编址看数组的意义

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

  • 相关阅读:
    docker 创建本地镜像服务器
    14.3.5.2 Deadlock Detection and Rollback 死锁检测和回滚:
    14.3.5.1 An InnoDB Deadlock Example
    14.3.4 Phantom Rows 幻影行
    14.3.4 Phantom Rows 幻影行
    14.3.3 Locks Set by Different SQL Statements in InnoDB 不同的SQL语句在InnoDB里的锁设置
    Mysql rr和rc隔离
    RR模式下的事务隔离
    RR模式下的事务隔离
    Maven学习总结(6)——Maven与Eclipse整合
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11346145.html
Copyright © 2011-2022 走看看