組成原理說明------地址對齊


1.引入

  1.1如下面的代碼,定義了三個變量,int,char,int,並輸出他們的十六進制的內存地址。

#include<stdio.h>
int main()
{
    int a;
    char b;
    int c;
    printf("a:%x  b:%x  c:%x\n",&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。

  采用地址對齊保存數據對應的地址如下: 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM