posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          CSAPP - Alignment

          Posted on 2007-08-10 23:14 ZelluX 閱讀(319) 評論(0)  編輯  收藏 所屬分類: System
          把以前跳過去的幾節補一下

          對齊就是指為了提高處理器的效率,把某些基礎類型的地址規定為必須是某個值(通常是2,4或8)的整數倍。
          如果不這樣處理,例如把一個double值分開存放在地址為8*n的兩邊,處理器每次從內存中讀取8字節,這樣就需要讀取兩次才能得到這個double值了。
          Linux的做法是把2字節數據(如short)存放在偶數的地址中,把其他更大的數據(int, int *, float, double)放在以4為約數的地址中。
          Windows則使用了相對現代的處理器而言更好的做法,任何k字節的數據必須存放在以k的倍數為起始的地址中,即double必須存放在以8*n為起始的地址中。
          GCC的編譯開關-malign-double也可以達到這種效果,但因此可能導致與某些假定4字節對齊方式的庫的鏈接錯誤。
          一個簡單的例子:
          struct S1 {
              int i;
              char c;
              int j;
          };
          對齊后的保存方式為
          0-4: i
          4-5: c
          8-12: j

          主站蜘蛛池模板: 瑞昌市| 麻江县| 宜丰县| 瓦房店市| 塘沽区| 嘉黎县| 青海省| 许昌县| 当阳市| 扎囊县| 湟源县| 扶风县| 太白县| 普格县| 贵溪市| 敦化市| 怀柔区| 麻江县| 鹤岗市| 丹巴县| 上犹县| 札达县| 漳州市| 永年县| 繁昌县| 濉溪县| 正阳县| 文山县| 石泉县| 定日县| 渭源县| 临夏县| 新宾| 云林县| 裕民县| 沁水县| 承德县| 偏关县| 仲巴县| 宁德市| 忻城县|