为什么同一结构体在不同程序下长度不同?解决办法

为什么同一结构体在不同程序下长度不同??先上程序:structCeilBlockInfo{unsigned char typelong xlong y

为什么同一结构体在不同程序下长度不同??
先上程序:
struct CeilBlockInfo
{
unsigned char type;
long x;
long y;
long begin;
int span;
};
按照字节对齐的优化计算方法,其长度应该是:8+4+4+4=20;
但是在我的另一个程序中计算的结果却是18!百思不得其解。。。。

两个程序都运行在WIN7环境下,但一个是MFC,一个是控制台程序。通过VS2010编译。。。
声明均为全局声明。

有人遇到相同情况吗???

[解决办法]
控制台程序按照16位编译,sizeof(int)你看看是不是2
[解决办法]
应该系统优化了吧,感觉18字节的很奇怪,等高人指点了,帮顶了
[解决办法]
如果是默认设置,无论int还是long是几个字节,结果都不可能是18
应该是对齐方式被设置为2字节对齐了,没有其他可能

[解决办法]
如果都是4字节对齐 自然是20 。不是20绝对编译器有问题。关键是 你确定是4字节对齐么。18只能说是2字节对齐了。我觉得 你只要知道字节对齐的计算方法就够了,用的时候根据自己需求!
[解决办法]
在MFC下有可能是按照UNCODE所以unsigned char 是控制台下的两倍。