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
同上。。。
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
同上。。。
相关文章推荐
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- C++中结构体的大小与内存对齐
- 内存对齐方式的总结 如何计算结构体所占内存的大小
- 内存对齐方式的总结 如何计算结构体所占内存的大小
- 结构体内存对齐后所占内存空间大小的计算
- 结构体的内存对齐方式(结构体大小计算 sizeof)(
- C++内存对齐 计算内存大小
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- C++ 获取结构体内存对齐后的每个字段的大小
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- C++面试题之结构体内存对齐计算问题总结大全
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++测试类大小中的内存对齐问题
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++测试类大小中的内存对齐问题
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- 如何计算结构体所占内存大小