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

          CSAPP - Alignment

          Posted on 2007-08-10 23:14 ZelluX 閱讀(320) 評論(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

          主站蜘蛛池模板: 哈巴河县| 荥阳市| 静安区| 新津县| 苏尼特右旗| 炉霍县| 东丽区| 阿拉善右旗| 贵德县| 民县| 大英县| 望奎县| 长寿区| 灵宝市| 嘉义县| 临江市| 天等县| 阳江市| 瓦房店市| 兴国县| 乌拉特前旗| 抚州市| 长治县| 旬邑县| 安阳县| 崇文区| 台湾省| 防城港市| 东山县| 手游| 湖南省| 微山县| 合作市| 甘孜县| 望奎县| 阜新市| 湖南省| 永定县| 响水县| 苏州市| 泽州县|