zoukankan      html  css  js  c++  java
  • 特别的字节对齐问题

    有如下一个结构体:
    struct X
    {
            uint32_t a;
            char* b[0];
    };
    sizeof(X)的值为多少了?


    关键点:数组维度为0的成员不参与,但是它的类型参与。
    注:在x86_64上“char*”的algin值为8,x86上为4。


    那么:
    #pragma pack(8)
    struct X
    {
            uint32_t a;
            char* b[0];
    };
    #pragma pack()
    sizeof(X)值为8,因为alignof(char*)和pack(8)最小值为8,故按8字节对齐。


    #pragma pack(4)
    struct X
    {
            uint32_t a;
            char* b[0];
    };
    #pragma pack()
    sizeof(X)值为8,因为alignof(char*)和pack(4)最小值为4,故按4字节对齐。


    #pragma pack(1)
    struct X
    {
            uint32_t a;
            char* b[0];
    };
    #pragma pack()
    按1字节对齐时,sizeof(X)值为8,因为alignof(char*)和pack(1)最小值为4,故按1字节对齐。


    如果结构体变成:
    struct X
    {
            uint32_t a;
            char b[0];
    };
    sizeof(X)的值为多少了?
  • 相关阅读:
    虚拟机简介
    关于JavaScript的那些话
    关于Python的那些话
    JavaScript教程大纲
    一个resin启动bug的解决
    Python教程大纲
    zinnia项目功能分析
    CDN公共资源
    Django Web项目部署参考
    Django Web项目代码规范参考
  • 原文地址:https://www.cnblogs.com/aquester/p/9891498.html
Copyright © 2011-2022 走看看