zoukankan      html  css  js  c++  java
  • c++结构体内存对齐

    c++结构体内存对齐

    基本概念:

    各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数, 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间 同时按照上面的对齐方式调整位置。 空缺的字节自动填充, 同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大的空间的类型的字节数)的倍数,所以在为最后一个成员变量申请空间后 还会根据需要自动填充空缺的字节;

    举例说明:

    #include <iostream>
    
    using namespace std;
    
    #pragma pack(8)
    struct Test1
    {
        char a; //0 - 1
        short b;//2 - 3
        int c;// 4 - 7
        float d;//8 - 11
        double e;//12 - 23
    };
    
    #pragma pack(4)
    struct Test2
    {
        char a; //0 - 1
        short b;//2 - 3
        int c;// 4 - 7
        float d;//8 - 11
        double e;//12 - 19
    };
    
    #pragma pack(8)
    struct Test3
    {
        double e;//0-7
        float d;//8-13
        short b;//14-15
        int c;// 16-19
        char a; //20-23
    };
    
    int main()
    {
        std::cout << "size test1= " << sizeof(Test1) << std::endl;
        std::cout << "size test2= " << sizeof(Test2) << std::endl;
        std::cout << "size test3= " << sizeof(Test3) << std::endl;
        return 0;
    }
    
  • 相关阅读:
    CPU使用率呈现正弦曲线
    编写一个简单的http server(Linux, gcc)
    c#操作 文件操作
    Javascript 数字时钟
    .net 中读取文本文件
    c# 常用字符串函数
    I2C总线之(三)以C语言理解IIC
    典型的多线程操作界面的例子
    uvm_common_phase.svh
    uvm_task_phase.svh
  • 原文地址:https://www.cnblogs.com/wzxNote/p/14109030.html
Copyright © 2011-2022 走看看