历史经验之结构字节对齐问题

日期:2003-4-3

操作环境

Windows2000 Server;VC6.0

问题描述

在所socket编程时,遇到这样一个问题,就是发送的结构数据流,总字节数为单数时,系统默认分配偶数的字节空间。

解决办法

如果在定义结构时没有加上字节对齐,则系统始终分配偶数内存给该结构,而不管这个结构是单字节还是双字节,看以下结构:
struct MESSAGE
{
		char MsgType;	//一个字节
		int MsgLen;		//四个字节
		char MsgCnt[20];	//20个字节
};
	总字节长度为25个字节,如果不加字节对齐,在申请一个结构变量时(如:MESSAGE msg;)系统会分配26个字节,如果要让系统分配实际25个字节,则该结构要加上字节对齐控制标志,定义如下:
#pragma pack(push)  //这是为了结构分配内存时强制字节对齐
#pragma pack(1)
struct MESSAGE
{
		char MsgType;	//一个字节
		int MsgLen;		//四个字节
		char MsgCnt[20];	//20个字节
};
#pragma pack(pop)	//这是为了结构分配内存时强制字节对齐

总结

在所socket编程时,一定要注意字节对齐的问题。
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读