發現從網上獲得的這些資訊上受益匪淺,同時感慨人家怎麼那麼牛,不僅技術牛,而且文章寫的也好呢!真是自嘆不如,同時也想實踐一下,記錄一下自己的學習心得,練練自己的文筆,不求能幫得上大家,但求能在這個網上結識一些朋友,大家互相學習,共同進步
編譯器要對c++**進行編譯時需要按照相應的型別為變數分配記憶體空間,最為人們熟知的就是那五個空間了:棧,堆,全域性資料區,常量區和**區。現在知道了哪些變數存放在哪些空間裡了,但是在相應的空間裡又是如何存放的呢?相信很多人都已經知道了,我也知道了。
對齊方式有三種規則,看網上已經很詳細了,我還是想用自己的話再說一遍吧:
1下面用網上的例子和我的改進加以說明
試驗:通過
#pragma pack(n)
改變「對齊係數」,然後察看
sizeof(struct test_t)
的值。
位元組對齊
(#pragma pack(1))
輸出結果:
sizeof(struct test_t) = 8
分析過程:
1) 成員資料對齊
#pragma pack(1)
struct test_t ;
#pragma pack()
成員總大小=8
2) 整體對齊
整體對齊係數
= min((max(int,short,char), 1) = 1
整體大小
(size)=$(
成員總大小) 按
$(整體對齊係數
) 圓整
= 8 /* 8%1=0 */ [注1]
2位元組對齊
(#pragma pack(2))
輸出結果:
sizeof(struct test_t) = 10
分析過程:
1) 成員資料對齊
#pragma pack(2)
struct test_t ;
#pragma pack()
成員總大小=9
2) 整體對齊
整體對齊係數
= min((max(int,short,char), 2) = 2
整體大小
(size)=$(
成員總大小) 按
$(整體對齊係數
) 圓整
= 10 /* 10%2=0 */ 4
位元組對齊
(#pragma pack(4))
輸出結果:
sizeof(struct test_t) = 12
分析過程:
1) 成員資料對齊
#pragma pack(4)
struct test_t ;
#pragma pack()
成員總大小=9
2) 整體對齊
整體對齊係數
= min((max(int,short,char), 4) = 4
整體大小
(size)=$(
成員總大小) 按
$(整體對齊係數
) 圓整
= 12 /* 12%4=0 */
c 記憶體對齊方式
一,什麼是記憶體對齊?記憶體對齊用來做什麼?所謂記憶體對齊,是為了讓記憶體訪問更有效率而採用的一種編譯階段優化記憶體訪問的手段。比如對於int x 這裡假設sizeof int 4 因為cpu對記憶體的讀取操作是對齊的,如果x的位址不是4的倍數,那麼讀取這個x,需要讀取兩次共8個位元組,然後還要將其...
Android Service學習總結(上)
service 基本用法 啟動 在activity中通過 startservice new intent this,myservice.class 來進行啟動,首次啟動會呼叫myservice的oncreate 和onstartcommand 方法,非首次啟動,只會不斷的呼叫onstartcomma...
排序演算法總結(上)
實現 public static void insertsort int a a j 1 temp 把待排序的元素temp插入騰出位置的 j 1 system.out.println system.out.println 1.直接排序之後 for int i 0 i a.length i 解釋 實現...