`

错误示例:字节对齐

    博客分类:
  • c++
 
阅读更多
#include<vector>
#include<iostream>
#include<stdio.h>

struct student {
    char c;
    int age;
}__attribute__((packed));
//win32 系统中 codeblock 运行结果:为8,char和int换位置后结果为:5 

#pragma pack(push, 1)
struct student1 {
    char c;
    int age;
};
#pragma pack(pop)
//无论哪个平台结果都是5
int main() {
    student st;
    student1 st1;
    std::cout << sizeof(st) << std::endl;
    std::cout << sizeof(st1) << std::endl;
    return 0;
}

 在student结构体中,如果在结构体后面加__attribute__((packed)),char在int前和后,sizeof()计算出来的是不一样的,具体原因不清楚,暂时先记下来。但是如果是加 #pragma pack(push,1) 和 pragma pack(pop)就不会出现这个问题。

分享到:
评论

相关推荐

    C/C++内存对齐.pdf

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

    AMR在ip域中的编码

    对于每个RTP会话,AMR净荷有两种模式,分别为节省带宽模式和字节对齐模式,具体采用那种模式,由信令协商决定;采用后一模式可以后可以引入鲁棒排序、帧交叉编码和CRC校验等方式提高语音传输的质量。 以下三种场景...

    asan_alignment_example:说明ASan的手动中毒调整要求

    手动ASan中毒和对中ASan中毒具有对齐要求:用户必须添加填充,以使填充在影子存储器中的字节边界处结束。 由于ASan影子存储器中的每个位都编码实存储器中一个字节的状态,因此这意味着每个分配的大小+填充必须在8...

    STM32_keil_mdk启动代码发分析

    //定义一个数据段 按8字节对齐 ;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0 Stack_Mem SPACE Stack_Size ;//...

    单片机-多字节二进制码转压缩BCD码示例(修正内容)

    51单片机中常用的多字节二进制码转压缩BCD码的示例代码(含清晰的注释),后3页使用代码编辑器重排版(对齐、美观)。 需要doc版本的可通过邮件zjyzfn@139.com联系。

    单片机-多字节二进制码转压缩BCD码示例.pdf

    51单片机中常用的多字节二进制码转压缩BCD码的示例代码(含清晰的注释),后3页使用代码编辑器重排版(对齐、美观)。 需要doc版本的可通过邮件zjyzfn@139.com联系。

    C&C++面试笔试题透析(笔试和面试中遇到)

    什么是字节对齐,为什么要对齐? 字节对齐对程序的影响? 编译器是按照什么样的原则进行对齐的? 如何修改编译器的默认对齐值? 线程同步的三种方式? 函数重载和函数覆盖的区别? ...... 以及程序示例

    matlab代码换行连接-SimplePacketComs:一个简单的数据包通信库

    matlab代码换行连接...来自游戏控制器的示例字节数据包如下所示: ID 字节 0 字节 1 字节 2 字节 3 字节 4 字节 5 字节 6 字节 7 字节 8 字节 9 字节 10 字节 11 字节 12 字节 13 字节 14 字节 15 字节 16 字节 1

    PT80-NEAT开发指南v1.1

    NEAT 开 发 指南 文档 适用于 PT80 系列 移动数据终端 版本记录 版本号 版本描述 发布日期 V 1.0 初始版本。 2012-04-12 V1.1 修改前三章内容 2012-09-25 目录 第一章 关于本手册.....................................

    代码优化:有效使用内存.part3

    2.7.9按字节、双字与四字进行内存处理 2.7.10数据对齐 2.7.11内存访问与计算的组合 2.7.12读写操作的组合 2.7.13只在必要时才访问内存 2.7.14内置C内存处理函数的优化 2.7.15内存处理函数的优化质量 2.7.16C字符串...

    代码优化:有效使用内存.part2

    2.7.9按字节、双字与四字进行内存处理 2.7.10数据对齐 2.7.11内存访问与计算的组合 2.7.12读写操作的组合 2.7.13只在必要时才访问内存 2.7.14内置C内存处理函数的优化 2.7.15内存处理函数的优化质量 2.7.16C字符串...

    代码优化:有效使用内存.part1

    2.7.9按字节、双字与四字进行内存处理 2.7.10数据对齐 2.7.11内存访问与计算的组合 2.7.12读写操作的组合 2.7.13只在必要时才访问内存 2.7.14内置C内存处理函数的优化 2.7.15内存处理函数的优化质量 2.7.16C字符串...

    Java范例开发大全 (源程序)

     实例43 操作错误(UnsupportedOperationException) 60  4.2 运行时异常 61  实例44 找不到指定类时发生的异常(ClassNotFoundException) 62  实例45 请求的方法不存在(NoSuchMethodException) 63  4.3...

    assembly:这个项目是42项学校作业的一部分,目的是要熟悉汇编语言

    OS X是16字节堆栈对齐的,这意味着机器希望stach上的每个变量以16的倍数开始的字节开始。当堆栈未对齐时,这意味着我们尝试从16的中间读取变量(源4分链接)。 有16个通用寄存器,每个寄存器都可以用作64位,32位,...

    用lex与yacc构造汇编器vasm及其指令模拟器vsim

    vsim模拟CPU的取指-&gt;译码-&gt;执行的循环完成机器指令的逐条执行,直到遇到停机或者运行时错误为止。 阅读及DIY该代码,你将深入理解并学会:1.两遍扫描的汇编器的工作原理,及其汇编器的设计和程序编写。2.lex与yacc...

    使用 JavaScript 和 WASM (WebAssembly) 生成 PDF 文件

    WASM-PDF使用 JavaScript 和...URL 加载的图像(自动转换为字节)带有行和单元格的表格垫片(他们只是吃空间)带有点、笔触、填充和对齐的路径基本样式(所有样式参数都是可选的)自定义模板大小(默认为 A4 纵向,边距

    Linux系统故障诊断与排除--James Kirkland

    4.2.5 Linux和Windows性能以及调整扇区对齐 92 4.2.6 使用bonnie++进行调整性能和基准测试 93 4.2.7 评估应用程序的CPU利用率问题 95 4.2.8 使用Oracle statspak 98 4.2.9 分配共享内存时“设备上无剩余...

    abomonation:用于Rust的具有破坏性的序列化库

    具体来说, encode将填充字节暴露给memcpy ,而decode则很少考虑对齐方式。 请参阅以获取更多特定信息。 这是使用Abomonation的示例。 这是非常容易使用。 太容易了。 extern crate abomonation;use abomonation ::...

    uboott移植实验手册及技术文档

    实验三 移植U-Boot-1.3.1 实验 【实验目的】 了解 U-Boot-1.3.1 的代码结构,掌握其移植方法。 【实验环境】 1、Ubuntu 7.0.4发行版 2、u-boot-1.3.1 3、FS2410平台 4、交叉编译器 arm-softfloat-linux-gnu-...

    Reversing:逆向工程揭密

    1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗?...

Global site tag (gtag.js) - Google Analytics