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

          CSAPP - Alignment

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

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

          主站蜘蛛池模板: 时尚| 防城港市| 乃东县| 始兴县| 大悟县| 隆昌县| 达州市| 茂名市| 中山市| 诏安县| 定州市| 普洱| 大英县| 高淳县| 新竹市| 汉阴县| 海宁市| 托克逊县| 攀枝花市| 泽州县| 禹城市| 眉山市| 河北省| 洛阳市| 剑川县| 历史| 江都市| 四子王旗| 灵山县| 天水市| 明星| 西藏| 班玛县| 平罗县| 广汉市| 老河口市| 陇西县| 峨边| 略阳县| 柳江县| 甘南县|