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

          主站蜘蛛池模板: 老河口市| 宝应县| 阿巴嘎旗| 乐亭县| 宁远县| 津市市| 克什克腾旗| 古丈县| 乐陵市| 屯门区| 嘉祥县| 博乐市| 郯城县| 米易县| 包头市| 榕江县| 太仓市| 广水市| 都江堰市| 镶黄旗| 荥阳市| 谷城县| 江津市| 博罗县| 阆中市| 阳江市| 呼伦贝尔市| 济南市| 山东省| 讷河市| 措美县| 绵阳市| 通州市| 巴楚县| 册亨县| 汉源县| 磴口县| 永兴县| 沾益县| 泸西县| 乡宁县|