内存对齐方式

博客主要讲述结构体写入文件时需避免内存陷阱,涉及内存对齐问题。以VC++为例,默认对齐方式为两字节,通过#pragma pack(1)可定义为一字节,避免内存陷阱。若未使用该命令,内存陷阱会影响文件写入结果,导致系统无法辨认文件头而出错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在结构体定义的时候,如果要将结构体向文件中写入的话.需要保证结构体在内存中不能出现内存陷阱.这就涉及到内存对齐的问题了.VC++中默认的对齐方式为两个字节

如下为定义为一个字节,这样内存中就不会有什么陷阱了:

#pragma pack(1)

typedef struct

{

    char RiffID[4];

    DWORD dwFileDataSize;

   char WaveID[4];

   char FMTID[4];

   DWORD dwFmtSize;

   WORD wFomatTag;

   WORD wChannels;

   DWORD dwSamplePerSec;

   DWORD dwAvgBytesPerSec;

    WORD wBlockAlign;

   WORD wBitsPerSample;

   WORD wEmpty;

   char  DataID[4];

   DWORD dwDataSize;

}WAVEFILEHDRULAW;

#pragma pack()

如果没有pragma的命令,则在内存中回在wEmpty前面出现一个WORD大小的内存陷阱,程序中是无法对次

内存进行编辑的.但是会影响到往文件中写入的结果.这个内存陷阱也会被写入文件头.

这样当文件头是用来表示某一种文件的.则系统会无法辨认而出错的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值