windows 程序设计的问题(菜鸟)

iceHawk 发布于 2012/02/06 07:35
阅读 644
收藏 0
struct
{
    int iIndex;
    TCHAR * szLabel ;
     TCHAR * szDesc ;
}metrics[] = {
SM_CXSCREEN,             
TEXT ("SM_CXSCREEN"),                                            
TEXT ("Screen width in pixels")
};
用sizeof(metrics[0])  算出的字节数是12

sizeof(int)  字节数是4

sizeof(TCHAR) 字节数是2 

我认为应该是4+2+2 = 8字节 和sizeof(metrics[0])不一样 为什么啊。

菜鸟问题 , 我感觉是不是和unicode有关系
加载中
0
木星青龙
木星青龙

为了提高CPU的存储速度,VC对一些变量的
起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起始地址相对于结
构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的
对齐方式(vc6.0,32位系统)。
类型      对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)
Char      偏移量必须为sizeof(char)即1的倍数
Short     偏移量必须为sizeof(short)即2的倍数
int   偏移量必须为sizeof(int)即4的倍数
float 偏移量必须为sizeof(float)即4的倍数
double 偏移量必须为sizeof(double)即8的倍数
各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对
齐方式调整位置,空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边
界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员
变量申请空间后,还会根据需要自动填充空缺的字节。

详细请参看

http://midautumn.bokee.com/7005451.html

0
i
iceHawk
太感谢您了
0
bastetwang
bastetwang
sizeof(TCHAR)这个错了,应该是sizeof(TCHAR *)
0
sam_ai
sam_ai
楼上正解
0
sam_ai
sam_ai
还有对齐选项是可以关掉的(效率上据说有损失,这个没有验证过)
0
youcry
youcry

指针类型的都是4字节

sizeof(TCHAR*)是4字节的

所以是 4+4+4

0
c
chenhong123b
楼上正解,简而言之,内存对齐。
0
sin7777
sin7777
我汗 不对齐也是 12 啊。。
0
中山野鬼
中山野鬼

我晕。。这那是对齐的问题?

32位系统的指针就是4字节,不存在对齐。如果楼主的结构体后面两个变量不是指针,才存在是否对齐这么一说。

返回顶部
顶部