C ++ sizeOf嵌套结构

时间:2018-04-19 15:06:23

标签: c++ memory-management struct byte padding

我遇到了内存管理问题。由于我在常量大小的字节缓冲区中工作,我需要尽可能紧凑的数据。

我需要检查其中包含另一个结构的结构的大小。这是代码:

struct CommonData
{
    //common data
    uint64_t a; // 8B
    uint64_t b; // 8B
    uint64_t c; // 8B

    uint32_t d; // 4B

    uint8_t e; // 1B

    uint8_t f; // 1B
};

struct AllData
{
    //specific data
    uint8_t arr[15]; //15B

    //common data
    CommonData commonData; //30B
}

通常我认为sizeOf(AllData)将是30 + 15 = 45 B,但是编译器说它是48.是的,我对内存填充有所了解,是的,我知道这是“问题”。 有没有办法我可以重新排列我的数据,以摆脱那些填充3字节,因为内存在这里非常重要。

注意:__ attribute __((打包))没有做到这一点

编辑:

  
    

pragma pack(push,1)

  
     

.... ....

     
    

pragma pack(pop)

  
两个结构上的

都有效,但我不确定这个选项是多么安全可靠

提前谢谢!

0 个答案:

没有答案