`

#pragma pack(4) 对齐的使用

阅读更多

#include <iostream.h>


#pragma pack(4)
 

class TestB
{
public:
 
 char a;    //因为自身长度是1,而pack为4,取小值,即取1,是以1的倍数的位置来进行存放,所以放在0的位置;
 int aa;    //因为自身长度是4,而pack为4,取小值,即取4,按照这样,是以4的倍数的位置来进行,因此1,2,3号位置都不能存放,只能从4开始,所以放在4,5,6,7的位置;
 short b;   //因为自身长度是2,而pack为4,取小值,即取2,是以2的倍数的位置来进行存放,所以放在8,9的位置;
// char c;    //最后一步是进行圆整,圆整是根据 pack值与该结构里最大的成员的自身长度来比较,取最小的进行圆整;在这里成员是int占最多,因此取4,与pack比较,所以取4圆整,即10,11也要算上,所以总共12个字节。


};


int main()
{
 cout<<sizeof(TestB)<<endl;


return 0;


}

分享到:
评论

相关推荐

    结构体对齐的具体含义(#pragma pack)

    本文将深入探讨结构体对齐的概念、`#pragma pack` 的使用方法以及其对程序性能的影响。 ### 结构体对齐的基本概念 结构体对齐是指在创建结构体时,编译器会按照一定的规则来安排各个成员变量在内存中的位置,以...

    紧缩对齐(#pragma pack(n))专题分析

    在这个例子中,我们使用 #pragma pack(4) 指令将结构体成员按照 4 字节对齐。结构体的成员变量 aa 是 int 类型,占据 4 字节;a 是 char 类型,占据 1 字节;b 是 short 类型,占据 2 字节;c 是 char 类型,占据 1 ...

    #pragma使用详解 .pdf

    #pragma pack(1) // 设置成员对齐为1字节 struct MyStruct { char c; int i; }; #pragma pack() // 恢复默认对齐方式 ``` 这样设置后,`MyStruct` 中的 `int` 成员将紧密跟随 `char` 成员之后,而不是按照默认的...

    浅谈C语言的字节对齐 #pragma pack(n)2

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。 #pragma pack (n) 作用:C编译器将按照n个字节对齐。 #pragma pack () 作用:取消自定义字节对齐方式。 #...

    #pragma用法大全.doc

    8. **pack**:控制结构体的对齐方式。 9. **bss_seg**:指定未初始化的全局变量所在的段。 10. **data_seg**:指定已初始化的全局变量所在的段。 11. **code_seg**:指定代码段的位置。 12. **const_seg**:指定常量...

    #pragma用法_汇总.doc

    4. **`#pragma once`**: 确保头文件只被包含一次,避免重复包含导致的问题。 5. **`#pragma hdrstop`**: 结束当前头文件的预编译,防止包含的其他头文件被进一步处理。 6. **`#pragma warning`**: 控制警告...

    vc一些东西pragma

    通过`#pragma pack`,可以控制这种对齐方式,从而优化结构体的内存使用。 - `#pragma pack(1)`:设置所有数据成员按字节对齐,即不保留任何额外的空隙。 - `#pragma pack(push, n)`:保存当前的对齐设置,并将...

    pack 字节对齐

    压缩包内的文件名大多是QQ截图,这可能是一系列的示例图片,用于展示或解释字节对齐的概念和使用#pragma pack后的效果。例如,这些图片可能包含内存布局的示意图,或者比较未使用#pragma pack和使用后的数据结构大小...

    #pragma 在嵌入式中的讲解和理解

    `#pragma pack(1)` 可以使成员按 1 字节对齐,依次类推,可以设置为 2、4 或 8 字节对齐。例如,如果在一个嵌入式系统中,需要节省内存,可以使用 `#pragma pack(1)` 来减少结构体的大小。 在实际开发中,`#pragma`...

    内存对齐详解_详细介绍

    3、4 字节对齐 (#pragma pack(4)) 输出结果:sizeof(struct test_t) = 12 [两个编译器输出一致] 分析过程: 成员数据对齐: #pragma pack(4) struct test_t { int a; /* 长度 4 = 4 按 4 对齐;起始 offset=0 0%4=0...

    C语言结构体的字节对齐及指定对齐方式.docx

    在上面的示例中,我们使用#pragma pack(1)指定对齐值为1,然后定义结构体test。结构体test中有四个成员变量,分别是静态变量a、double型m4、char型m1和int型m3。然后,我们使用sizeof运算符来获取结构体test的大小,...

    temp source

    注意,即使指定了`#pragma pack(4)`,但由于`short`类型只需要2字节对齐,所以最终的大小还是取决于成员变量的最大对齐需求。 #### 3. **Linux 下的内存对齐** 在Linux环境下,可以通过`__attribute__((__packed__...

Global site tag (gtag.js) - Google Analytics