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

          主站蜘蛛池模板: 江津市| 滨州市| 通州市| 鸡泽县| 广元市| 黄大仙区| 滁州市| 米易县| 新昌县| 仙居县| 乌拉特前旗| 余姚市| 武功县| 克东县| 万宁市| 花莲市| 乳山市| 芮城县| 色达县| 根河市| 福安市| 榕江县| 新和县| 延寿县| 衡阳市| 克东县| 常山县| 年辖:市辖区| 建瓯市| 大丰市| 天等县| 稻城县| 荔波县| 团风县| 丰都县| 卢湾区| 台北县| 龙州县| 富阳市| 隆尧县| 宁远县|