struct alignment

Example:

#pragma pack(2)
struct One
{
    char c;
    short b;
    char a;
};

print: 6

#pragma pack(2)

struct One

{

  char a;

  char c;

  short b;

};

print: 4

#pragma pack(4)
struct One
{
    int a;
    short b;
    char c;
    char d;
};

print: 8

#pragma pack(4)
struct One
{
    int a;
    char c;
    short b;
    char d;
};

print: 12

#pragma pack(4)
struct One
{
    char c;
    int a;
    char d;
    short b;
};

print: 12

#pragma pack(8)
struct One
{
    double a;
    short c;
    int b;
    short d;
};

print: 24

时间: 2024-08-04 11:28:28

struct alignment的相关文章

sizeof 运算结果与编译系统有关

研究与实现相关的layout没多大意义 参考:有关c++中类的虚拟继承sizeof问题 class A{}; sizeof(A);问sizeof结果? 对空类运用sizoef operator,表达式结果是多少?不是0,空类中没有信息,但实例仍需要在内存中有一些信息,这样才能使用,类的内存布局由编译器决定,vs中占用1字节.如果空类中含有虚函数,在类的实例中会添加指向虚函数的指针,指针在32位机器上占用4bytes,64(x64编译模式)位占用8字节.int在c++标准中没有规定具体大小,所以在

Data alignment漫谈

特此声明:本人CSDN中的所有文章未经授权,不得转载,违者必究!一切被授权人.组织等的信息都会记录在本人CSDN授权文章的列表中. 以下讨论的概念性的东西应该都是适用于所有系统的,但是实际操作都是linux系统做的. 讨论基于单线程处理,目的是为了简化讨论,简化测试,但并不影响对理论的验证. 最后附上验证源码以及其解释. 背景之个人理解 本节内容都是个人的理解,如果有不正确的地方,欢迎讨论. 说内存对齐之前,先说说硬盘对数据的组织方式.我们知道,文件系统管理数据是按照块来管理的,假如说一个4k对

[C++] struct memory allocation

Four-byte alignment 1 typedef struct user USER; 2 typedef struct employee E; 3 struct user{ 4 5 char name[10]; //take 12 bytes 6 int age; //take 4 bytes 7 short sex;//take 4 bytes 8 char blood;//take 1 bytes but in the 4 bytes of sex 9 }; 10 struct e

Python使用struct处理二进制

有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)       按照给定的格式(fmt)解析字节流stri

Python使用struct处理二进制(转载)

有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)       按照给定的格式(fmt)解析字节流stri

C 语言变长数组 struct 中 char data[0] 的用法

1.结构体内存布局(padding) 为了让CPU能够更舒服地访问到变量,struct中的各成员变量的存储地址有一套对齐的机制.这个机制概括起来有两点:第一,每个成员变量的首地址,必须是它的类型的对齐值的整数倍,如果不满足,它与前一个成员变量之间要填充(padding)一些无意义的字节来满足:第二,整个struct的大小,必须是该struct中所有成员的类型中对齐值最大者的整数倍,如果不满足,在最后一个成员后面填充. The following typical alignments are va

ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356

项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的文章链接.此处不细说.后面提及“字节对齐” 下面的例子使用了几种重现Alignment trap的方法,例子1是将char*指针直接转换成int*指针,经测试,未发现有字节对齐的问题.例子2和例子3相似,主要是结构体中的字段没有进行对齐(或者访问的地址没有4字节对齐).例子4是直接访问了没有字节对齐

使用struct处理二进制

有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)       按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsi

python中struct模块及packet和unpacket

转自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典.但是C语言中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在网络上进行数据传输的话. 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. st