您的位置:首页 > 编程语言 > C语言/C++

C++ 内存对齐 (计算结构体的大小)

2017-02-09 15:46 507 查看
#include <iostream>

using namespace std;

//size=24
struct AAA
{
long long a;
long b;
int c;
short d;
char e;
};
//size=24;
struct BBB
{
char e;
short d;
int c;
long b;
long long a;
};
//size=32;
struct CCC
{
long long a;
long b;
char e;
int c;
short d;
};
//size=32;
struct DDD
{
char e;
long long a;
short d;
int c;
long b;
};
//size=24;
struct EEE
{
long long a;
int c;
short d;
char e;
long b;
};

int main(int Length,char** args)
{
cout<<"long long align:"<<alignof(long long)<<endl;

cout<<"AAA align:"<<alignof(AAA)<<endl;
cout<<"AAA size:"<<sizeof(AAA)<<endl;

cout<<"BBB align:"<<alignof(BBB)<<endl;
cout<<"BBB size:"<<sizeof(BBB)<<endl;

cout<<"CCC align:"<<alignof(CCC)<<endl;
cout<<"CCC size:"<<sizeof(CCC)<<endl;

cout<<"DDD align:"<<alignof(DDD)<<endl;
cout<<"DDD size:"<<sizeof(DDD)<<endl;

cout<<"EEE align:"<<alignof(EEE)<<endl;
cout<<"EEE size:"<<sizeof(EEE)<<endl;
return 0;
}


i

独家秘诀:计算结构体实际所占用内存的大小

变量A,B,C,D位结构体的成员,且有效对齐位为N,结构体实际内存sum=0;

如果size(A)<=N,则sum+=N,否则如果size(A)>N(如数组),则sum+=N*n(刚好能填满A的最小倍数)

如果size(A)+size(B)<=sum则跳过B,看C,否则看B(同A)

如果size(A)+size(B)+size(C)<=sum,且size(A),size(B),size(C)顺序排列(从大到小,或从小到大),则跳过C,,看D

同上。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  结构体 内存对齐