由於C 的專案做的少,又比較小,所以一直沒有註意位元組對齊的問題,但是,位元組對齊在大規模應用中對記憶體管理和CPU執行效率的影響應是挺大的。本文根據一些資料學習,做一個小總結。
先拋出第一個結論,位元組對齊可以提高CPU的執行效率。 (建議學習:phpstorm)
#CPU執行指令時從記憶體取得資料是按區塊操作的,區塊的大小可能為2-by
CPU執行指令時從記憶體取得資料是按區塊操作的,區塊的大小可能為2-bytes, 4-bytes 8 -bytes, 16-bytes……
此時,如果CPU讀取4-bytes或以上大小的資料的起始位址為1,則需要至少讀取2個資料區塊,然後再把2個區塊中不需要的資料拋棄,再將有用資料拼接成4-bytes的數據,這明顯增加了CPU的操作,影響了CPU指令的執行效率。如果CPU讀取資料的起始位址在0,4…,則一次只需讀取一個資料區塊,CPU的讀取指令就是一次原子操作。
另一個結論,位元組對齊有利於優化記憶體。
在結構體中,根據位元組自動對齊原則,結構體typedef struct _test { char a; int b; char c; } test;#器將採用結構體中位元組數最大的基本型別int的位元組數作為對齊標準,char類型將擴充為4-bytes,因此,sizeof(test)=12,但這樣的記憶體利用效率比較低。
如果透過指定編譯器1位元組對齊,則CPU的執行效率就會降低。
#praama pack(1) typedef struct _test { char a; int b; char c; } test; #pragma pack()為了確保CPU執行效率的條件下最佳化程式的內存,需要調整結構體中資料成員的順序
typedef struct _test { int b; char a; char c; } test;此時,結構體成員b佔用4個位元組,a和c分享後面的4個字節,其中兩個成員佔用前兩個字節,後兩個字節為字節對齊時填充的無效數據,此結構體佔用8個位元組的記憶體空間。 ###
以上是位元組對齊會影響記憶體存取的效率嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
刺客信條陰影:貝殼謎語解決方案
3 週前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
2 週前ByDDD
在哪裡可以找到原子中的起重機控制鑰匙卡
3 週前ByDDD
節省R.E.P.O.解釋(並保存文件)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影 - 如何找到鐵匠,解鎖武器和裝甲定制
4 週前ByDDD

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境