32位xp,vc2005,内存中char类型变量占了16位(2字节),为什么?编译环境已设置为“使用多字节字符集” 20

我设计了一个结构:typedefstruct_T{BYTEAdr,shortTemper,shortP,BYTEH,shortWD}T;调用时,取结构长度intsize=... 我设计了一个结构:
typedef struct _T
{
BYTE Adr,
short Temper,
short P,
BYTE H,
short WD
}T;

调用时,取结构长度int size=sizeof(T),结果size是10而不是8,用mempcy赋值时,Temper变量就出错了,因为每个BYTE变量都占了2个字节的空间,这是为什么呢?我已经在vs 2005的项目属性中设置了“使用多字节字符集”,请高手指教(分不多,请原谅)。
展开
 我来答
liuxinling_06
2011-06-10 · TA获得超过1289个赞
知道小有建树答主
回答量:345
采纳率:100%
帮助的人:424万
展开全部
#pragma pack(1)
typedef struct _T
{
BYTE Adr,
short Temper,
short P,
BYTE H,
short WD
}T;
#pragma pack()

编译器为了提高效率,默认优化为4字节对齐,你可以强迫使用单字节对齐,关于字节对齐,可以讲很长,我就不粘贴了,百度一下吧。
watchcco
2011-06-12
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。MS VC++中的对齐设定,有时候sizeof得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可.或者如果要按字节存储,而不进行数据对齐,可以在Options对话框中修改Advanced compiler页中的Data alignment为按字节对齐。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式