由於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;
如果透過指定編譯器1位元組對齊,則CPU的執行效率就會降低。
#praama pack(1) typedef struct _test { char a; int b; char c; } test; #pragma pack()
typedef struct _test { int b; char a; char c; } test;
以上是位元組對齊會影響記憶體存取的效率嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!