VC6:1 + 4 = 8为什么??? [英] VC6: 1+4=8 WHY???

查看:73
本文介绍了VC6:1 + 4 = 8为什么???的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个结构:

typedef struct {

signed char var1;

unsigned long int var2;

} MYSTRUCT;


现在看:

sizeof(签名字符)= 1(字节)

sizeof(unsigned long int)= 4(字节)


告诉我原因:

sizeof(MYSTRUCT)= 8 ??? (字节)

为什么它不是1 + 4 = 5个字节?


问候

-

Marcin P

GG1020924

skype:marcin_pil

I have a structure:
typedef struct {
signed char var1;
unsigned long int var2;
} MYSTRUCT;

Now look:
sizeof(signed char)=1 (byte)
sizeof(unsigned long int)=4 (bytes)

Tell me why:
sizeof(MYSTRUCT)=8 ??? (bytes)
Why it''s not 1+4=5 bytes?

Regards
--
Marcin P
GG1020924
skype: marcin_pil

推荐答案

Marcin P写道:
Marcin P wrote:
我有一个结构:
typedef struct {
signed char var1;
unsigned long int var2;
} MYSTRUCT;

告诉我原因:
sizeof(MYSTRUCT)= 8 ??? (字节)
为什么它不是1 + 4 = 5个字节?
I have a structure:
typedef struct {
signed char var1;
unsigned long int var2;
} MYSTRUCT;
Tell me why:
sizeof(MYSTRUCT)=8 ??? (bytes)
Why it''s not 1+4=5 bytes?



这是因为C ++编译器在var1之后添加了一些填充到

确保整个结构正确对齐。请参阅您的

编译器文档,并查看以下页面:

http://msdn.microsoft.com/library/de...m/msmod_18.asp

CrayzeeWulf


It is due to the fact that the C++ compiler adds some padding after var1 to
make sure that the entire structure is aligned correctly. Refer to your
compiler documentation and also check out the following page:

http://msdn.microsoft.com/library/de...m/msmod_18.asp

--
CrayzeeWulf


Marcin P< ma **** ********@poczta.onet.pl>在新闻中写道:4266db2b
Marcin P <ma************@poczta.onet.pl> wrote in news:4266db2b


1

@ news.vogel.pl:
1
@news.vogel.pl:
我有一个结构:
typedef struct {
signed char var1;
unsigned long int var2;
} MYSTRUCT;

现在看:
sizeof(signed char) = 1(字节)
sizeof(unsigned long int)= 4(字节)

告诉我原因:
sizeof(MYSTRUCT)= 8 ??? (字节)
为什么它不是1 + 4 = 5个字节?
I have a structure:
typedef struct {
signed char var1;
unsigned long int var2;
} MYSTRUCT;

Now look:
sizeof(signed char)=1 (byte)
sizeof(unsigned long int)=4 (bytes)

Tell me why:
sizeof(MYSTRUCT)=8 ??? (bytes)
Why it''s not 1+4=5 bytes?




要查找的几个概念:字节打包或结构对齐。


在你所使用的平台上,CPU可以更轻松地处理

字边界上的项目。因此,在您的结构中,它会尝试将您的成员放在单词

边界上。因此,你将有1个字节的var1,3个字节的填充,然后4个

个字节的var2,总大小为8个字节。



A couple of concepts to look up: byte packing, or structure alignment.

On whatever platform you''re on, the CPU can more easily address items on a
word boundary. So in your struct, it will try to put your members on word
boundaries. So, you''ll have 1 byte of var1, 3 bytes of filler, then 4
bytes of var2 for a total size of 8 bytes.


这篇关于VC6:1 + 4 = 8为什么???的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆