【genius_platform软件平台开发】第十六讲:类和结构体内存占用大小

221 阅读1分钟

本文已参与好文召集令活动,点击查看: 后端、大前端双赛道投稿,2万元奖池等你挑战!

// 类和结构体内存占用大小.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

struct MyStruct
{
    short a;
    // 6个字节补齐
    double b;
    int c;
    // 4个字节补齐
};

struct MyStruct2
{
    double b;
    short a;
    // 2字节补齐
    int c;
};

struct MyStruct3
{
    double b;
    int c;
    short a;
    // 2字节补齐
};

#pragma pack(1)
struct MyStruct4
{
    short a;
    double b;
    int c;
};
#pragma pack

#pragma pack(2)
struct MyStruct5
{
    short a;
    double b;
    int c;
};
#pragma pack

//////////////////////////////////////////////////////////////////////////
//
int _tmain(int argc, _TCHAR* argv[])
{
    int nSize = sizeof(MyStruct);
    printf("sizeof(MyStruct)=[%d]\n", nSize); // sizeof(MyStruct)=[24]

    int nSize2 = sizeof(MyStruct2);
    printf("sizeof(MyStruct2)=[%d]\n", nSize2); // sizeof(MyStruct2)=[16]

    int nSize3 = sizeof(MyStruct3);
    printf("sizeof(MyStruct3)=[%d]\n", nSize3); // sizeof(MyStruct3)=[16]

    int nSize4 = sizeof(MyStruct4);
    printf("#pragma pack(1) sizeof(MyStruct4)=[%d]\n", nSize4); // sizeof(MyStruct4)=[14]

    int nSize5 = sizeof(MyStruct5);
    printf("#pragma pack(2) sizeof(MyStruct5)=[%d]\n", nSize5); // sizeof(MyStruct5)=[14]

    system("pause");
    return 0;
}

结果

image.png sizeof(MyStruct)=[24]

sizeof(MyStruct2)=[16]

sizeof(MyStruct3)=[16]

#pragma pack(1) sizeof(MyStruct4)=[14]

#pragma pack(2) sizeof(MyStruct5)=[14]

请按任意键继续. . .