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

2025-05-16 08:47:47
推荐回答(2个)
回答1:

#pragma pack(1)
typedef struct _T
{
BYTE Adr,
short Temper,
short P,
BYTE H,
short WD
}T;
#pragma pack()

编译器为了提高效率,默认优化为4字节对齐,你可以强迫使用单字节对齐,关于字节对齐,可以讲很长,我就不粘贴了,百度一下吧。

回答2:

计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。MS VC++中的对齐设定,有时候sizeof得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可.或者如果要按字节存储,而不进行数据对齐,可以在Options对话框中修改Advanced compiler页中的Data alignment为按字节对齐。