色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數據總線寬度:對齊的含義和怎樣去對齊以及帶來的效率差異

Q4MP_gh_c472c21 ? 來源:互聯網 ? 作者:佚名 ? 2018-01-30 09:34 ? 次閱讀

最近和同事談到了ARM平臺下數據總線寬度及對齊方式對程序效率的影響問題,在定義結構數據類型時,為了提高系統效率,要注意字長對齊原則。正好有點感觸和大家一起談談。

這里主要給大家解釋下所謂的對齊到底是什么?怎么對齊?為什么會對齊或者說對齊帶來什么樣的效率差異?

對齊的含義和怎樣去對齊以及帶來的效率差異

1.先看下面的例子:

#include

#pragma pack(4)

struct A

{

char a;

int b;

};

#pragma pack()

#pragma pack(1)

struct B

{

char a;

int b;

};

#pragma pack()

int main()

{

A a;

cout<

B b;

cout<

}

默認的vc我記得是4字節對齊ADS下是一字節對齊,因為是c/c++社區大家對PC比較熟悉 我就談PC下的對齊。

PC下設計放的太長時間的有錯誤就別客氣直接說,大家可以看到在ms的vc下按4字節對齊和1字節對齊的結果是截然不同的分別為8和5為什么會有這樣的結果呢?這就是x86上字節對齊的作用。

為了加快程序執行的速度,一些體系結構以對齊的方式設計,通常以字長作為對齊邊界。對于一些結構體變量,整個結構要對齊在內部成員變量最大的對齊邊界,如A,整個結構以4為對齊邊界,所以sizeof(a)為8,而不是5。

如果是原始我們概念下的的A中的成員將會一個挨一個存儲,應該只有char+int只有5個字節。這個差異就是由于對齊導致的。,然我們可以看到A的對齊要比B浪費3個字節的存儲空間。

那為什么還要采取對齊呢?

那是因為體系結構的對齊和不對齊,是在時間和空間上的一個權衡。

字節對齊節省了時間。應該是設計者考慮用空間換取時間。

為什么說對齊會提高效率呢節省時間?我想大家要理解的重點之重點就在這里了。

在我們常用的PC下總線寬度是32位

1.如果是總線寬度對齊的話

那么所有讀寫操作都是獲取一個<=32位數據可以一次保證在數據總線傳輸完畢

沒有任何的額外消耗

|1|2|3|4|5|6|7|8|

從1開始這里是a的起始位置,5起始為b的位置 訪問的時候

如果訪問a一次在總線傳輸8位其他24位無效的

訪問b時則一次在總線上傳輸32完成

讀寫均是一次完整

插敘一下 讀操作先要將讀地址放到地址總線上然后下個時鐘周期再從外部

存儲器接口上讀回數據通過數據總線返回需要兩個周期

而寫操作一次將地址及數據寫入相應總線就完成了

讀操作要比寫操作慢一半

2.我們看訪問數據時如果不對齊地址的情況

|1|2|3|4|5|6|7|8|

此時a的地址沒變還在1而因為是不對齊則b的位置就在2處

這時訪問就帶來效率上問題 訪問a時沒問題還是讀會一個字節

但是2處地址因為不是總線寬度對齊一般的CPU在此地址操作將產生error

如sparc,MIPS。它們在硬件的設計上就強制性的要求對齊。在不對齊的地址上肯定發生錯誤

但是x86是支持非對齊訪問的

它通過多次訪問來拼接得到的結果,具體做法就是從1地址處先讀回后三字節234 暫存起來

然后再由5地址處讀回一個字節5 與234進行拼接組成一個完整的int也就是b返回

大家看看如此的操作帶來的消耗多了不止三倍很明顯在字長對齊時效率要高許多

淡然這種效率僅僅是訪問多字節帶來的 如果還是進行的byte操作那效率差不了多少

目前的開發普遍比較重視性能,所以對齊的問題,有2種不同的處理方法:

1) 有一種使用空間換時間做法是顯式的插入reserved成員:

struct A{

char a;

char reserved1[3]; //使用空間換時間

int b;

}a;

2) 隨便怎么寫,一切交給編譯器自動對齊。

還有一種將邏輯相關的數據放在一起定義

代碼中關于對齊的隱患,很多是隱式的。比如在強制類型轉換的時候。下面舉個例子:

unsigned int i = 0x12345678;

unsigned char *p=NULL;

unsigned short *p1=NULL;

p=&i;

*p=0x00;

p1=(unsigned short *)(p+1);

*p1=0x0000;

最后兩句代碼,從奇數邊界去訪問unsignedshort型變量,顯然不符合對齊的規定。

在x86上,類似的操作只會影響效率,但是在MIPS或者sparc上,可能就是一個error

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9164

    瀏覽量

    368578
  • PC
    PC
    +關注

    關注

    9

    文章

    2102

    瀏覽量

    154514
  • 數據總線
    +關注

    關注

    2

    文章

    58

    瀏覽量

    17605

原文標題:嵌入式er日常!和同事交流ARM平臺字節對齊帶來的效率差異

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數據總線寬度可以配置為24位嗎?

    是否可以將數據總線寬度配置為24位?我檢查了8, 16位和32位之間的差異,只改變了最后8位中的第七十九行(CyuU3pIPIBGPGIFIFBuxCONFIG)。我需要24位數據
    發表于 08-21 09:02

    包絡對齊改進算法

    包絡對齊改進算法FFT距離多普勒成像法采用相鄰相關法做包絡對齊時,是把前一個距離像作為對準的基準,因此它的偏差會一直傳播下去。設第i次
    發表于 03-02 11:26 ?1665次閱讀
    包絡<b class='flag-5'>對齊</b>改進算法

    什么是數據總線寬度/地址總線寬度

    什么是數據總線寬度/地址總線寬度數據總線寬度   數據
    發表于 02-04 10:25 ?6685次閱讀

    詳解C語言字節對齊

      一、什么是對齊以及為什么要對齊:   1. 現代計算機中內存空間都是按照byte劃分的,從理論上講似乎對任何類型的變量的訪問可以從任何地址開始,但實際情況是
    發表于 08-29 10:11 ?1264次閱讀

    ARM內存邊界對齊以及sizeof問題

    默認情況下,在32位cpu里,gcc對于結構體的對齊方式是按照四個字節來對齊的。
    發表于 06-16 11:10 ?2974次閱讀

    基于ARM程序的字節對齊的分析

    首先說說,什么叫對齊。如果一個數據是從偶地址開始的連續存儲,那么它就是半字對齊,否則就是非半字對齊;半字對齊的特征是bit0=0,其他位為任
    發表于 09-19 16:04 ?0次下載

    一個跟地址對齊有關的應用異常案例

    也就是說,基于CortexM3內核的芯片,它支持部分指令的非對齊訪問,但非對齊訪問要慢于對齊訪問。即非對齊訪問是需要代價的,訪問效率會受到影
    的頭像 發表于 02-04 15:20 ?2588次閱讀
    一個跟地址<b class='flag-5'>對齊</b>有關的應用異常案例

    固態硬盤4K對齊操作對齊的到底是什么?為什么它如此重要?

    在購買和使用固態硬盤的過程中,大家一定都聽說過“注意4K對齊”這個提醒。那么4K對齊到底對齊了什么?為什么它如此重要?
    的頭像 發表于 06-04 09:03 ?9151次閱讀

    總線寬度總線帶寬的區別

    很多人把計算機總線寬度總線帶寬混為一談,其實他們是不一樣的。
    發表于 09-01 09:52 ?1.5w次閱讀

    SSD固態硬盤對齊的方法

    大家多聽過SSD固態對齊,或者也試的對齊,怎么看是否對齊呢?
    發表于 06-25 17:09 ?4159次閱讀
    SSD固態硬盤<b class='flag-5'>對齊</b>的方法

    CSS對齊方式的詳細講解

    本文基于Html基礎,主要介紹了Html中對齊的方式,對于對齊中的標簽做了詳細的講解,用豐富的案例 ,代碼效果圖的展示,幫助大家更好理解 。
    的頭像 發表于 12-24 15:38 ?1308次閱讀

    STM32 終極字節對齊解析

    一、全局變量對齊問題:基本上用戶定義的變量是幾個字節就是幾字節對齊,這個比較好理解。uint8_t定義變量地址要1字節對齊。uint16_t定義變量地址要2字節對齊。uint32_t定
    發表于 11-23 18:06 ?11次下載
    STM32 終極字節<b class='flag-5'>對齊</b>解析

    單片機字節對齊

    對齊原則:數據存放的地址需要是其類型長度的整數倍;字節對齊的作用不僅是便于cpu快速訪問,同時合理的利用字節對齊可以有效地節省存儲空間。許多計算機系統對基本
    發表于 12-01 15:21 ?11次下載
    單片機字節<b class='flag-5'>對齊</b>

    C語言 | 內存對齊01 - 什么是內存對齊

    一、前言在單片機下使用C語言編程時,內存對齊的知識點必須掌握。掌握內存對齊后,可以防止內存碎片化,單片機有限的內存被更加有效地使用。二、內存對齊先看如下代碼:結構體Test1占用了多少字節?如果事先
    發表于 01-13 15:18 ?0次下載
    C語言 | 內存<b class='flag-5'>對齊</b>01 - 什么是內存<b class='flag-5'>對齊</b>

    嘉立創EDA PCB設計對齊與等間距操作

    其他類設計軟件通常是通過網格來對齊元件、過孔、走線的,嘉立創EDA提供非常方便的對齊功能 ,如 圖1所示,可以對選中的元件、過孔、走線等元素實行向上對齊、向下對齊、向左
    的頭像 發表于 03-30 07:40 ?4091次閱讀
    主站蜘蛛池模板: 婷婷亚洲五月色综合久久 | 香蕉鱼视频观看在线视频下载 | 免费 高清 中文在线观看 | 超碰免费视频在线观看 | 国产特级毛片AAAAAAA高清 | 短篇合集纯肉高H深陷骚 | 黑人巨大两根一起挤进欧美 | 黑色丝袜美腿美女被躁翻了 | 网址在线观看你懂我意思吧免费的 | 俄罗斯人与动ZOZ0 | 色播播影院 | 亚洲欧美日韩高清专区 | 精品久久久久久久99热 | 国产精品www视频免费看 | 92精品国产成人观看免费 | 亚洲欧美中文字幕网站大全 | 狠狠色狠狠色综合日日92 | 中文在线日韩亚洲制服 | 百度影音第四色 | 亚洲 自拍 欧洲 视频二区 | 亚洲欧美一区二区三区久久 | 日韩中文欧美在线视频 | 色迷迷电影 | 国产婷婷色综合AV蜜臀AV | 欧美片内射欧美美美妇 | 亚洲国产精品自在自线观看 | 男女交性视频无遮挡全过程 | 欧美人与动牲交A免费 | 亚洲野狼综合网站 | 国产精品高清视频在线 | 最近免费中文字幕MV在线视频3 | 国产精品久久久久影院免费 | 两个洞一起插哦!好刺激 | 色男人的天堂久久综合 | 果冻传媒在线观看资源七夕 | 丝瓜视频樱桃视频在线观看免费 | 在线不卡日本v二区到六区 在线不卡日本v二区 | 野花日本手机观看大全免费3 | 日韩AV成人无码久久精品老人 | 国产精品人妻无码久久久2022 | 亚洲乱码日产精品BD在线下载 |