當(dāng)前位置:
首頁 >
自对齐(self-aligned)
發(fā)布時間:2025/5/22
34
豆豆
生活随笔
收集整理的這篇文章主要介紹了
自对齐(self-aligned)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C語言是自對齊的,32位以4字節(jié)對齊,64位以8字節(jié)對齊(1字節(jié)=8 bits)
自對齊的好處:在一條指令內(nèi)完成數(shù)據(jù)的取或者存的操作,使得內(nèi)存訪問更快;否則,如果一個變量跨機(jī)器字存儲,那么要做兩次或更多次的訪問(先取存在前一個機(jī)器字的內(nèi)容,再取存在后一個機(jī)器字的內(nèi)容)。
對齊要求:
- 字符可以起始于任何字節(jié)地址
- 2字節(jié)的short int必須起始于偶數(shù)地址
- 4字節(jié)的int或者float必須起始于被4整除的地址
- 8字節(jié)的long int或者double必須起始于被8整除的地址
- struct按照最寬成員進(jìn)行指針對齊。如果struct中嵌套struct,外部struct要按照自己與內(nèi)部struct中最寬的成員進(jìn)行對齊。
內(nèi)存中的實(shí)際存儲情況:
例1:代碼
char *p; char c; int x;內(nèi)存中的存儲
char *p; //4 bytes(32位)或8 bytes(64位) char c; //1 byte char pad[3]; //3 bytes,無用空間,老派術(shù)語稱之為slop(水坑) int x; // 4 bytes?
消除水坑
可以通過改變變量聲明的位置擠掉水坑。
水坑發(fā)生于大數(shù)據(jù)類型的存儲區(qū)域緊跟在一個較小的數(shù)據(jù)類型的存儲區(qū)域之后。
消除水坑的方法是按對齊的降序來對變量進(jìn)行聲明。
?
轉(zhuǎn)載于:https://www.cnblogs.com/qionglouyuyu/p/4969260.html
總結(jié)
以上是生活随笔為你收集整理的自对齐(self-aligned)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分析和解析PHP代码的7大工具
- 下一篇: homebrew可以管理众多开源软件的安