C/C++ 语言中结构体的内存分配
2011-11-07 11:01
288 查看
原文地址:http://blog.csdn.net/wplxb/article/details/819331
C/C++ 语言中结构体的内存分配
当未用 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度对齐;当使用了 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度和 #pragma 指令指定的位数中的较小值对齐。
#pragma 指令格式如下所示:
#pragma pack(4) // 或者 #pragma pack(push, 4)
举例如下:(机器字长为 32 位)
struct
{
char a;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 1;
struct
{
char a;
short b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 6;
struct
{
char a;
int b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 12;
struct
{
char a;
double b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 24;
#pragma pack(4)
struct
{
char a;
double b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 16;
参考:
1. http://sci.ustc.edu.cn/news.aspx?id=5577
2. 《计算机系统结构》,第三版,李学干编著,西安电子科技大学出版社,2000 年 6 月
3. 大字节序 小字节序
C/C++ 语言中结构体的内存分配
当未用 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度对齐;当使用了 #pragma 指令指定编译器的对齐位数时,结构体按最长宽度的数据成员的宽度和 #pragma 指令指定的位数中的较小值对齐。
#pragma 指令格式如下所示:
#pragma pack(4) // 或者 #pragma pack(push, 4)
举例如下:(机器字长为 32 位)
struct
{
char a;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 1;
struct
{
char a;
short b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 6;
struct
{
char a;
int b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 12;
struct
{
char a;
double b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 24;
#pragma pack(4)
struct
{
char a;
double b;
char c;
}test;
printf("%d/n", sizeof test);
打印出来的结果为 16;
参考:
1. http://sci.ustc.edu.cn/news.aspx?id=5577
2. 《计算机系统结构》,第三版,李学干编著,西安电子科技大学出版社,2000 年 6 月
3. 大字节序 小字节序
相关文章推荐
- C/C++ 语言中结构体的内存分配
- C/C++ 语言中结构体的内存分配
- C/C++ 语言中结构体的内存分配
- C++程序设计语言练习5.7 结构体数组的初始化
- 学习C/C++语言:结构体,动态链表
- C/C++语言中结构体的内存分配小例子
- C++中对C语言结构体用法的扩充
- 从Android/Java基础之上学习C/C++语言(3)--C语言基础--内存分配
- 【转】【C/C++语言入门篇】-- 结构体
- C语言结构体成员内存分配
- C++语言之结构体、类、构造函数、拷贝构造函数
- C++语言之动态内存分配
- C++语言之动态内存分配
- C++语言之动态内存分配
- Struct结构体是C/C++语言中用来自定义数据类型的
- c/c++语言变量声明内存分配
- C/C++语言中的结构体对齐
- C/C++语言宏中使用参数做结构体成员
- c++公用体union、结构体struct内存分配问题
- C/C++ 语言中结构体的内存分配