<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 改變結構體成員的字節對齊 ## 例子 #include <stdio.h> typedef struct { char a; int b; } ST_A; int main(void) { printf("sizeof(ST_A)=%ld\n",sizeof(ST_A)); } ## 技巧 在上面的程序里,`ST_A`結構體的內存布局默認是這樣的: <table> <tr> <td>Offset</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> </tr> <tr> <td>0</td> <td>a</td> <td>填充字節</td> <td>填充字節</td> <td>填充字節</td> </tr> <tr> <td>4</td> <td>b</td> <td>b</td> <td>b</td> <td>b</td> </tr> </table> 編譯執行,結果如下: root@ubuntu:~$ gcc -g -o a a.c root@ubuntu:~$ ./a sizeof(ST_A)=8 使用gcc的"`-fpack-struct[=n]`"選項(“`n`”需要為`2`的倍數)可以改變成員的地址對齊。例如指定“`n=2`”時,將標明結構體成員的最大對齊地址為2。這樣`ST_A`結構體中的成員`b`的地址將不再按照`4`字節對齊,內存布局變為: <table> <tr> <td>Offset</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> </tr> <tr> <td>0</td> <td>a</td> <td>填充字節</td> <td>b</td> <td>b</td> </tr> <tr> <td>4</td> <td>b</td> <td>b</td> <td></td> <td></td> </tr> </table> 編譯執行,結果如下: root@ubuntu:~$ gcc -g -fpack-struct=2 -o a a.c root@ubuntu:~$ ./a sizeof(ST_A)=6 當不指定“`n`”時,將沒有填充字節,所有成員將一個挨著一個排在一起: <table> <tr> <td>Offset</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> <td>1byte</td> </tr> <tr> <td>0</td> <td>a</td> <td>b</td> <td>b</td> <td>b</td> </tr> <tr> <td>4</td> <td>b</td> <td></td> <td></td> <td></td> </tr> </table> 編譯執行,結果如下: root@ubuntu:~$ gcc -g -fpack-struct -o a a.c root@ubuntu:~$ ./a sizeof(ST_A)=5 由于這個編譯選項會導致ABI(Application Binary Interface)的改變,所以使用時一定要謹慎。 詳情參見[gcc手冊](https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html) ## 貢獻者 nanxiao
                  <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>

                              哎呀哎呀视频在线观看