VC6:1 + 4 = 8为什么??? [英] VC6: 1+4=8 WHY???
问题描述
我有一个结构:
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屋!