`

#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;


}

分享到:
评论

相关推荐

    c++内存对齐,#pragma pack()对齐方式

    详细介绍了c++内存对齐的原因,内存是怎么对齐的

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

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

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

    对(#pragma pack(n))字节对齐的几种情况进行了讲解。

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

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

    pack 字节对齐

    源码,C++,#pragma pack,关于字节对齐的测试

    C语言之GCC中支持的内存对齐指令

    #pragma pack(n) (n=1/2/4/8):按n字节对齐 #pragma pack(2) struct mystruct1 { int a; char b; short c; } struct mystruct2 { int a;; double b; short c; } #pragma pack()  以上这部分内容是...

    C/C++语言中结构体的内存分配小例子

    #pragma 指令格式如下所示:#pragma pack(4) // 或者 #pragma pack(push, 4) 举例如下:(机器字长为 32 位) struct { char a; }test; printf(“%d/n”, sizeof test); 打印出来的结果为 1;  struct { 

    Linux部分C程序

    sizeof计算struct大小(转) [ 分类: Linux ] 由 弗里曼•潘 发表于 11:23 pm 评论( 0 ) 题目:s的输出结果 #include struct s { char ch, *ptr;...还有利用#pragma pack设置对齐方式是怎么回事? 字串9

    C语言/C++常见笔试面试题难疑点汇总

    #pragma pack。用来改变编译器的字节对齐方式。 #pragma code_seg。它能够设置程序中的函数在obj文件中所在的代码段。如果未指定参数,函数将放置在默认代码段.text中 #pragma once。保证所在文件只会被包含一次,它...

    浅析C++字节对齐容易被忽略的两个问题

    在这里就分享两条开发中曾经忽略的问题:1、Union(联合体)的字节对齐先看代码:#pragma pack(4)struct com{ union { double dTest; int nTest; char szTest[14]; }; char chTest1; char chTest2;};#pragma...

    struct和union计算方法

    同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。 3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的时候要求的对齐,对于本身大小的计算并没有关系。本身的大小只和其所包含...

    一文全面掌握底层难点C和C++中的字节对齐(含C源码)

    几种类型数据所占字节数 什么是对齐 自然对齐 规则对齐 实验对比 首先看这个结构体 ...#pragma pack()用法详解 例子 对齐的作用和原因 举个例子 什么时候需要进行内存对齐. 对齐的实现 总结

    VC++中内存对齐实例教程

    #pragma pack()是一个预处理,表示内存对齐。布局控制#pragma,为编译程序提供非常规的控制流信息。 二、结构体的大小的规则 结构体大小是处理器位数和结构体内最长数据元素所占字节数二者中较小的那一个的整数倍。

    实例讲解C语言编程中的结构体对齐

    Q:关于结构体的对齐,到底遵循什么原则? A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况: #include #include ...#pragma pack(1) typedef struct { char sex; short score;

    解析C语言中结构体struct的对齐问题

    2.指定对齐值:#pragma pack (value)时的指定对齐值value。 3.数据类型的有效对齐值:默认对齐值和指定对齐值中小的那个值。 有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐...

    深入内存对齐的详解

     例如,下面的结构各成员空间分配情况(假设对齐方式大于2字节,即#pragma pack(n), n = 2,4,8…下文将讨论#pragmapack()): 代码如下:struct test { char x1; short x2; float x3; char x4;}; 结构的第一个成员...

    C++面试题之结构体内存对齐计算问题总结大全

     原则1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。...

    c++ 中__declspec 的用法详解

    c++ 中__declspec 的用法如下,想要了解的继续往下看吧。...它与#pragma pack()是一对兄弟,前者规定了对齐的最小值,后者规定了对齐的最大值。同时出现时,前者优先级高。 __declspec(align())的一个特点是,它仅仅规

    C语言中结构体偏移及结构体成员变量访问方式的问题讨论

    #pragma pack(1) 求: 结构体struct node_t中成员变量c的偏移。 注:这里的偏移量指的是相对于结构体起始位置的偏移量。 看到这个问题的时候,我相信不同的人脑中浮现的解决方法可能会有所差异,下面我们分析以下几...

Global site tag (gtag.js) - Google Analytics