【C/C++】sizeof问题总结

来源:互联网 发布:java程序开发步骤 编辑:程序博客网 时间:2024/05/01 10:13

以下默认使用32位编译器!


空结构体

struct A{};cout << sizeof(A) << endl; //1

记住,此时输出就是1


只含有一个类型的结构体

char

struct A{    char a;};cout << sizeof(A) << endl; //1

short

struct A{    short a;};cout << sizeof(A) << endl; //2

int /long/float

struct A{    int a; //long == long int //float};cout << sizeof(A) << endl; //4

double/long long

struct A{    double a;//long long};cout << sizeof(A) << endl; //8

含有多个相同类型的结构体

char

struct A{    char a, b;};cout << sizeof(A) << endl; //2

不在举例说明,只是简单的叠加关系。

含有多个不相同类型的结构体——对齐问题

char + int

struct A{    char a;    int b;};cout << sizeof(A) << endl; //8

|–char–|———–|———–|———–|
|——————–int——————–|

char + short + int

struct A{    char a;    short b;    int c;};cout << sizeof(A) << endl; //8

|–char–|——–short——–|———–|
|——————–int——————–|

char + int + short

struct A{    char a;    int b;    short c;};cout << sizeof(A) << endl; //12

|–char–|———–|———–|———–|
|——————–int——————–|
|——-short——|———–|———–|

注意:对于上面的两种情况,编译器给出不同的解释。所以,在编写代码的时候,推荐从小到大的类型编写结构体,这样可以优化一些内存空间。

(完)


参考

http://blog.csdn.net/hsd2012/article/details/50968793

原创粉丝点击