天天看點

【VS開發】【DSP開發】位址對齊

1.引入

  1.1如下面的代碼,定義了三個變量,int,char,int,并輸出他們的十六進制的記憶體位址。

【VS開發】【DSP開發】位址對齊
【VS開發】【DSP開發】位址對齊

  1.2圖示分析上述代碼

   代碼中為定義的變量a,b,c配置設定了記憶體單元,配置設定記憶體單元是從大位址開始配置設定的,可見a的記憶體位址大于b的位址。(除非配置設定的記憶體單元循環了。從0跳大了最大,又開始新的一輪減小)

  int占用4個位元組,char占用1個位元組。

  從代碼中可以看出為三個連續定義的變量的記憶體配置設定是不連續的。這就是因為位址對齊的原因。

【VS開發】【DSP開發】位址對齊

2.位址對齊概念

  位址對齊其實就是cpu設計中的一個時空權衡,這裡采用的是空間換時間的。主要的解決問題是如何能過快速的讀取給定的一個變量。

  目前的主流計算機有32位,64位這是位址線,一般資料線與位址線條數相同。

  如果放置資料時不考慮位址對齊,32位的cpu讀取一個4位元組的int最少需要一次記憶體通路,最多需要2次通路記憶體。下圖中左面,取一個int要兩次記憶體通路,而右邊的隻需要一次記憶體通路。

【VS開發】【DSP開發】位址對齊

  上面的左圖為什麼是2次通路記憶體呢?這個需要用組成原理說明。

3.計算機組成原了解釋位址對齊

  這裡使用32位說明。16位的80x86,和目前流行的64位也是一樣的。

  32位字長的機器,能一次通路的資料是32bits。

  如下圖所示:32條資料線,分成了4組,這樣就可以使用位元組編碼,最小的通路記憶體單元為一個位元組。

        同樣給出一個32位位址最多可以通路32位的資料。

        若一個int資料儲存在32位機器中如2中的左圖所示,一次隻能通路到2位元組資料,是以需要2次記憶體通路;若一個int資料儲存在32位機器中如2中的右圖所示,給出一次位址就能夠通路整個int資料。

  

【VS開發】【DSP開發】位址對齊

 4總結

  許多ram都采用位址對齊,加速cpu。

  采用位址對齊儲存資料對應的位址如下: 

【VS開發】【DSP開發】位址對齊