zoukankan      html  css  js  c++  java
  • 【VS开发】【DSP开发】地址对齐

    组成原理说明------地址对齐

    1.引入

      1.1如下面的代码,定义了三个变量,int,char,int,并输出他们的十六进制的内存地址。

    复制代码
    #include<stdio.h>
    int main()
    {
        int a;
        char b;
        int c;
        printf("a:%x  b:%x  c:%x
    ",&a,&b,&c);  //输出: a:22ff1c  b:22ff1b  c:22ff14
        return 1;
    }
    复制代码

      1.2图示分析上述代码

       代码中为定义的变量a,b,c分配了内存单元,分配内存单元是从大地址开始分配的,可见a的内存地址大于b的地址。(除非分配的内存单元循环了。从0跳大了最大,又开始新的一轮减小)

      int占用4个字节,char占用1个字节。

      从代码中可以看出为三个连续定义的变量的内存分配是不连续的。这就是因为地址对齐的原因。

    2.地址对齐概念

      地址对齐其实就是CPU设计中的一个时空权衡,这里采用的是空间换时间的。主要的解决问题是如何能过快速的读取给定的一个变量。

      目前的主流计算机有32位,64位这是地址线,一般数据线与地址线条数相同。

      如果放置数据时不考虑地址对齐,32位的CPU读取一个4字节的int最少需要一次内存访问,最多需要2次访问内存。下图中左面,取一个int要两次内存访问,而右边的只需要一次内存访问。

      上面的左图为什么是2次访问内存呢?这个需要用组成原理说明。

    3.计算机组成原理解释地址对齐

      这里使用32位说明。16位的80x86,和目前流行的64位也是一样的。

      32位字长的机器,能一次访问的数据是32bits。

      如下图所示:32条数据线,分成了4组,这样就可以使用字节编码,最小的访问内存单元为一个字节。

            同样给出一个32位地址最多可以访问32位的数据。

            若一个int数据保存在32位机器中如2中的左图所示,一次只能访问到2字节数据,所以需要2次内存访问;若一个int数据保存在32位机器中如2中的右图所示,给出一次地址就能够访问整个int数据。

      

     4总结

      许多RAM都采用地址对齐,加速CPU。

      采用地址对齐保存数据对应的地址如下: 

  • 相关阅读:
    js三种存储方式区别
    利用split方法计算字符串中出现字母最多的次数
    图片预加载的三个方法
    页面有大量图片,优化图片的加载方法
    USB通信协议——深入理解
    C/C++回调函数
    显卡工作原理
    include包含头文件的语句中,双引号和尖括号的区别是什么?
    华为2015校园招聘 上机试题
    位操作基础篇之位操作全面总结
  • 原文地址:https://www.cnblogs.com/huty/p/8518508.html
Copyright © 2011-2022 走看看