`
kanwoerzi
  • 浏览: 1644510 次
文章分类
社区版块
存档分类
最新评论

如何让struct不字节对齐

 
阅读更多

下面我们使用预编译指令#progma pack (value)来告诉编译器,使用我们指定的对齐值来取代缺省的。

#progma pack (2) /*指定按2字节对齐*/

struct C

{

char b;

int a;

short c;

};

#progma pack () /*取消指定对齐,恢复缺省对齐*/

sizeof(struct C)值是8。

不字节对齐的话 就设置#progma pack(1)

修改对齐值为1:

#progma pack (1) /*指定按1字节对齐*/

struct D

{

char b;

int a;

short c;

};

#progma pack () /*取消指定对齐,恢复缺省对齐*/

sizeof(struct D)值为7。

对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。

还可以设置编译环境中的设置 :

(VS2005下,右击项目-属性-配置属性-C/C++-代码生成-结构成员对齐-选“1字节(/Zn1):”(即禁止内存对齐),默认是使用默认值,即按照结构中占用空间最大的成员进行对齐。

分享到:
评论

相关推荐

    结构体字节对齐规则

    结构体字节对齐规则,主要是介绍结构体字节对齐规则,内容有点长,但是很全面.

    5分钟搞定内存字节对齐

    写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.

    深入剖析C++中的struct结构体字节对齐

    要求数据内存的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,本文就来深入剖析C++中的struct结构体字节对齐,需要的朋友可以参考下

    pack-struct.md

    # 改变结构体成员的字节对齐 ## 例子 #include typedef struct { char a; int b; } ST_A;

    C语言字节对齐详解

    介绍C语言字节对齐的文档,对C语言字节对齐讲述得很清楚,特别适合新手对结构体不清楚的情况下参考

    教你5分钟轻松搞定内存字节对齐

    讲讲字节对齐吧. /******************************分割线 如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在...

    C/C++结构体字节对齐详解

     我们先看看sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那让我们来看看S1的内存分配情况  S1 s1 = { 'a', 0xFFFFFFFF };  定义上面的变量后,加上断点,运行程序,观察s1所在的...

    C/C++内存对齐.pdf

    介绍C/C++中内存对齐(字节对齐)的概念以及对齐规则。通过示例代码和图示帮助理解。

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

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

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

    A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况: #include #include #define PRINT_D(intValue) printf(#intValue is %d\n, (intValue)); #define OFFSET(struct,member) ((char *)&((struct ...

    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()  以上这部分内容是...

    jstruct:将字节解释为打包的二进制数据

    字节顺序,大小和对齐方式默认情况下,C类型以计算机的本机格式和字节顺序表示,并在必要时通过跳过填充字节来正确对齐(根据C编译器使用的规则)。 或者,根据下表,格式字符串的第一个字符可用于指示字节

    最简单的TCP网络封包解包(补充)-序列化

    2.内存对齐的问题,Windows默认的对齐是4字节,如果不去刻意关闭掉对齐的话,那么可能会多出不少没必要的字节数,但是如果关闭了,内存拷贝又会慢一些。 序列化是怎么序列化的? 其实很简单,我们使用一个uint8类型...

    cstruct:一种将二进制数据映射到 MATLAB 结构体的工具,反之亦然。-matlab开发

    支持各种字节对齐和字节排序选项。 自从我写了这个,我发现它比我想象的更有用,因为我经常处理记录的数据和二进制数据流。 它确实有助于弥合使用 C 程序和 MATLAB 创建的数据之间的差距,而无需创建专门的 mex ...

    内存对齐问题的完美解释.doc

    struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求: sizeof(MyStruct)=sizeof(double)+sizeof(char)+...

    c++ 面试题 总结

    块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的...

    C++中的内存对齐实例详解

    C++中的内存对齐实例详解 内存对齐  在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 我们还是先来看一段简单的...

    深入理解C语言内存对齐

    例如int类型占用4个字节,地址只能在0,4,8等位置上。 例1: 代码如下:#include <stdio>struct xx{ char b; int a; int c; char d;}; int main(){ struct xx bb; printf(“&a = %p/n”, &bb.a); printf(“&b...

    深入理解嵌入式开发之系统开发篇全覆盖

    Tp01.struct的使用,及字节对齐;struct和class的差别与联系;struct中指针的危险性。 Tp02.extern C修饰的作用及头文件宏保护。 Tp03.变量a的定义 Tp04.static的作用。 Tp05.volatile Tp06.位操作 Tp07.中断...

Global site tag (gtag.js) - Google Analytics