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的项目属性中设置了“使用多字节字符集”,请高手指教(分不多,请原谅)。 展开
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的项目属性中设置了“使用多字节字符集”,请高手指教(分不多,请原谅)。 展开
2个回答
展开全部
计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。MS VC++中的对齐设定,有时候sizeof得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可.或者如果要按字节存储,而不进行数据对齐,可以在Options对话框中修改Advanced compiler页中的Data alignment为按字节对齐。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询