<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] > [參考](https://mp.weixin.qq.com/s/RKHNKY_EVF2vR0zLQVU5_A) ## 語法 ``` func Sizeof(v ArbitraryType) uintptr func Alignof(v ArbitraryType) uintptr func Offsetof(v ArbitraryType) uintptr ``` ## unsafe.Sizeof ``` a := int8(1) fmt.Printf("%+v\n", unsafe.Sizeof(a)) // 1 b := int16(1) fmt.Printf("%+v\n", unsafe.Sizeof(b)) // 2 c := "a" fmt.Printf("%+v\n", unsafe.Sizeof(c)) // 16 d := strings.Repeat("hello word ", 100) fmt.Printf("%+v\n", unsafe.Sizeof(d)) // 16 e := struct { a int16 // 2 b int16 // 2 }{ a: 1, b: 2, } fmt.Printf("%+v\n", unsafe.Sizeof(e)) //4 ``` ## unsafe.Offset 偏移值 ``` e:= struct { a int32 // 2 b int16 // 2 c int16 // 2 }{ a: 1, b: 2, c: 1, } fmt.Printf("%+v\n", unsafe.Offsetof(e.a)) // 0 fmt.Printf("%+v\n", unsafe.Offsetof(e.b)) // 4 fmt.Printf("%+v\n", unsafe.Offsetof(e.c)) // 6 ``` 第一個字段`e.e`占了前 4 個字節, 而第二個字段`e.b`占了接下來的 2 個字節 而第二個字段`e.c`占了接下來的 2 個字節 ## unsafe.Alignof **alignment(數據結構對齊)** 它讓數據在內存中以某種的布局來存放,使該數據的讀取能夠更加的快速 ``` type X struct { n1 int8 n2 int16 } // error:因為 alignment 的緣故,size(x) 不等于x // size(`X`) = size(`n1`) + size(`n2`) = 1 + 2 = 3 ``` 1. `n2`的**內存起始地址應該是自身大小的整數倍**,也就是說它的起始地址只能是 0、2、4、6、8 等偶數 2. **整個結構體的大小,是結構體中最大的字段的大小的整數倍** ``` // Sizeof(First.a) + 7 個空閑的字節 + Sizeof(First.b) + Sizeof(First.c) + 7 個空閑的字節 = 24 字節 type First struct { a int8 b int64 c int8 } // Sizeof(Second.a) + Sizeof(Second.b) + 6 個空閑的字節 + Sizeof(Second.b) = 16 字節 type Second struct { a int8 c int8 b int64 } fmt.Println("Big brain time: ", unsafe.Sizeof(First{}) == unsafe.Sizeof(Second{})) ``` >[info] 結構體的屬性最好是從小到達或從大到小
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看