`

c++结构成员对齐问题

    博客分类:
  • C++
阅读更多
我要读取一个文件时,需要读取这么一个结构
struct Monster
{
    BYTE x;
    BYTE y;
    DWORD id;
};


这个结构体,测试sizeof(Monster)为8字节。
但一个BYTE为1字节,一个DWORD为4字节,加起来为6字节。
无故多出来2字节。

昨天研究很久也没有解决,今天问金老大,他告诉再IDE里可以设置,
设置一下“结构成员对齐”,在vs2003中的设置方式:
右键项目>>属性>>C/C++>>代码生成>>结构成员对齐>>设置为“1 字节(/Zp1)”
这样sizeof(Monster)为6字节。
分享到:
评论

相关推荐

    C++内存分配的对齐规则

    通常,我们写程序的时候,不需要考虑对齐问题。编译器会替我们选择适合目标平台的对齐策略。当然,我们也可以通知给编译器传递预编译指令而改变对指定数据的对齐方法。 算法: 对齐的算法是指编译器对 struct 数据...

    c++内存中字节对齐问题详解

    ### C++内存中字节对齐问题详解 #### 一、什么是字节对齐,为什么要对齐? 在C++及其它编程语言中,字节对齐(Byte Alignment)是指数据在内存中的排列方式,它遵循特定的规则,使得数据结构中的每个元素能够在其...

    C/C++内存对齐.pdf

    在C/C++中,内存对齐的概念是数据结构和硬件交互的关键部分,理解这一点对编写高效代码非常重要。 内存对齐的规则通常由编译器实现,不同的编译器和硬件平台可能有不同的默认对齐规则。例如,在VC(Visual C++)中...

    VS C++字节对齐方式

    本文将围绕“VS C++字节对齐方式”这一主题展开讨论,通过对示例代码的分析来探讨Visual Studio环境下C++语言如何处理字节对齐问题,以及程序员应如何合理利用编译器特性来优化代码性能。 #### 二、字节对齐的基本...

    c++ 内存对齐的完整文档

    1. **数据成员对齐规则**:结构体(struct)或联合体(union)的数据成员,第一个数据成员放在偏移量为0的位置。后续每个数据成员的对齐遵循`#pragma pack(n)`指令指定的数值和该数据成员自身的长度中较小者。例如,...

    C结构体对齐详解(结构体成员对齐)

    2. 结构体内各数据成员的内存对齐,即该数据成员相对结构体的起始位置 结构体大小的计算方法和步骤: 1. 将结构体内所有数据成员的长度值相加,记为 sum_a。 2. 将各数据成员为了内存对齐,按各自对齐模数而填充的...

    c++内存对齐的文档(很好的面试题目中常见的资料)

    2. 结构或联合的整体对齐:在所有数据成员对齐后,结构或联合本身还需要进行对齐,对齐方式同样取`#pragma pack`指定的值和结构中最大成员长度的较小值。 3. 当`#pragma pack`的n值大于或等于所有数据成员长度时,这...

    C++类继承内存布局详解图(一目了然)

    特别地,C++规范在“结构”上使用了和C相同的简单的内存布局原则:成员变量按其被声明的顺序排列,按具体实现所规定的对齐原则在内存地址上对齐。所有的C/C++厂商都保证他们的C/C++编译器对于有效的C结构采用完全...

    结构内存对齐StructMemory 配图示

    在提供的代码文件中,`structMemory.cpp`很可能是实现和展示结构体内存对齐问题的示例。它可能包含了不同结构体定义,通过比较它们的`sizeof`结果来揭示对齐规则的影响。其他如`StdAfx.cpp`、`StdAfx.h`等文件是...

    如何理解 struct 的内存对齐? - 知乎1

    - `alignof`运算符可以查询类型或变量的对齐要求,这对于理解和调试内存对齐问题很有帮助。 7. **结构体嵌套和数组的影响**: - 当结构体包含其他结构体作为成员时,子结构体会按照自己的对齐规则对齐,这可能...

    著名企业c c++数据结构算法面试笔试题

    【C/C++数据结构与算法面试知识点】 在C/C++面试中,数据结构和算法是核心考察点。这里我们详细探讨几个常见的问题。 1. **网络协议与模型**: - OSI模型分为7层:物理层、数据链路层、网络层、传输层、会话层、...

    C/C++数据对齐详细解析

    `#pragma pack` 是一种常见的预编译指令,用于设置数据结构的对齐方式。例如,`#pragma pack(2)` 将结构体的对齐值设为2字节,这意味着结构体成员的起始地址必须是2的倍数。在给出的例子中,结构体`A`、`B`、`C`和`D...

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

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

    C++强制访问类的私有成员

    通常情况下,编译器会自动对齐这些成员变量,以提高程序运行时的性能。例如,在上面的代码示例中,`class A`有一个私有成员变量`char *str`。当创建一个`A`类型的对象时,这个指针会被初始化为指向字符串"nothing"。...

    pack 字节对齐

    字节对齐是指编译器在安排数据结构成员时,会按照特定的规则来调整成员的位置,使其地址能够满足某种对齐要求。这种规则通常基于数据类型大小,以确保高效的数据存取。 描述中提到的"pragma pack"是C++中一个预处理...

    c语言中结构体等在计算机内存的对齐方式

    在 C 语言中,对齐机制主要体现在结构体的成员变量的存储上。具体来说,结构体的成员变量会按照其大小或子成员的大小的整数倍来存储。例如,int 类型的变量在 32 位机器上占用 4 字节,那么它将从 4 的整数倍地址...

Global site tag (gtag.js) - Google Analytics