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)的值为多少了?
  • 相关阅读:
    websocket --工作原理
    RabbitMQ
    django-缓存机制,form组件
    rabbitmq-安装
    学城项目
    django的orm--contenttype操作
    rest-framework序列化
    python模块与包
    python中的模块和包
    匿名函数python内置高阶函数以及递归
  • 原文地址:https://www.cnblogs.com/aquester/p/9891498.html
Copyright © 2011-2022 走看看