結構體中記憶體對齊的一些

2021-09-29 05:39:02 字數 979 閱讀 5304

今天任同學說的,如果是結構體,即便是按位元組定址哈,也要先訪問結構體的首位址,然後,

假如struct gy

char c;

int a;

意思是什麼呢

你訪問gy.a時其實按樹形結構結構體跟檔案或者名空間沒啥區別哈

gy.a你既然先從gy訪問了 那麼必須要先訪問結構體整體的首位址。

然後你不是想訪問a那一片空間嗎,a那一片空間是四位元組的,那資料匯流排如果32位,就會按偏移量說哈就是0位元組到3位元組

哎 發現a還有一位元組的空間沒有取到,還要在利用32位匯流排取一次,因為你要取的a是四位元組的指標內部偏移量也會是四個位元組四個位元組的偏,所以要補三個位元組,直接哎 四個四個的跳跳到a的首位址了

然後一次取四個位元組就是完整a了,否則之間取兩次還要剔除還要拼湊

再來說32位os和64位os哈,64位os是指你軟體層面一次處理64位或32位,

當然硬體要跟上,你軟體一次處理64位機器字長 資料匯流排仍是32位,那實際仍然沒啥用還是分兩次,

那如果你os 64位 機器字長64位,你物理上一次處理64位軟體上或者說指令上也是 那速度就很快了 我們知道每增加一位,表示狀態數就乘2,那可以代表的資訊量也就是二倍了理論上,對實時計算量大的很有幫助,比如遊戲渲染,建模涉及很多矩陣運算,很很多頂點變換 而且是每幀都要變換,那速度基本上真的就可以提公升一倍了。相當於乙個指令週期計算給二倍頂點進行頂點變換計算了,能不快嗎。

那假如32 位os (其實也類似操作的資料結構或者說資料型別單位是32位)用在32位機器那正好,32位os用在64位機器上

怎麼說呢有點機器在等你的味道,浪費機器效能,你上層執行一條程式語句物理上都取倆個數了 物理在等著你程式執行的感覺 但因為是按程式一步一步執行的

所以我感覺除非是32位硬體處理不過來了否則沒什麼區別 否則與軟體無障礙推行速度一樣,不過有乙個好處是,可能程式執行會很順暢游刃有餘沒有阻礙

64為os用在32位機器是程式在等待物理

32位os用在64位機器是物理在等程式 理論上我猜速度一樣

結構體對齊(記憶體對齊

有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...

記憶體對齊 結構體對齊

現在已知32位機器上各種資料型別的長度如下 char 1 有符號無符號同 short 2 有符號無符號同 int 4 有符號無符號同 long 4 有符號無符號同 float 4 double 8 重要規則 1,複雜型別中各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個型別的位...

結構體在記憶體中對齊

剛剛完成乙個檔案的遷移程式,其中遇到了結構體對齊的問題,所以拿出來說說,與各位博友們分享。我的程式很簡單,就是把之前通過乙個結構體 fwrite 到檔案 a 裡的內容讀出,然後轉給另乙個結構體儲存。程式是簡單,但我擔心的是之前把結構體 fwrite 到檔案 a 的程式對齊結構體規則是怎樣的?一定要知...