c难题,高手必看。。

gr2009115 2009-06-03 01:19:05
#include"stdio.h"
struct test
{
int m1[10];
char m2;
float m3;
double m4;
}test;
main()
{
int i;
i=sizeof(struct test);
printf("%d\n",i);
}
这个我按照VC++6.0下面的字节数计算的结果为53,运行结果却为56,是为什么??
另外我把它放在Tc下面去运行,自己算的结果是33,运行的结果也为33,这又是为什么??
一直只是知道VC和Tc编译环境不同,但不知道哪里不同,谁能告诉我VC++6.0和TC的区别?越详细越好。。。。。
...全文
176 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
amossavez 2009-06-03
  • 打赏
  • 举报
回复
vc是4字节对齐

struct test
{
int m1[10]; ///4*10 = 40
char m2; ///1字节,但要对齐,所以占4 ,注意这个就行了!!!
float m3; ////4
double m4; ////8
}test;
jiyan1221 2009-06-03
  • 打赏
  • 举报
回复
好多答案。。
beyonddream2008 2009-06-03
  • 打赏
  • 举报
回复
字节对齐
breezes2008 2009-06-03
  • 打赏
  • 举报
回复
又是字节对齐问题.
一般是4个字节.
lengensky 2009-06-03
  • 打赏
  • 举报
回复
同上
donglq 2009-06-03
  • 打赏
  • 举报
回复
路过...
pathuang68 2009-06-03
  • 打赏
  • 举报
回复
内存对齐问题。请参考:
1. 关于内存对齐问题
2. 再谈内存对齐问题
飞天御剑流 2009-06-03
  • 打赏
  • 举报
回复
这是字节对齐,并不是VC与TC之间异同,TC一样有字节对齐的。

一般来说,系统出于数据存取效率的要求会对内存中的数据进行对齐,就是数据在内存中可能不是连续的,会有缝隙。关于字节对齐的文章你可以参考:

http://www.yuanma.org/data/2006/0723/article_1213.htm


在你的例子中,由于VC默认四字节对齐,因此char m2实际占用了四个字节,所以结果是56而不是53。

tc也一样有字节对齐的,只不过一般默认是一字节,看起来似乎没有这东西,被人忽略了而已,tc还可以word对齐的,可以在

option->complier->code generation->alignment中调整,改为word的话,你的例子结果会是34,而不是33。
blh 2009-06-03
  • 打赏
  • 举报
回复
#include"stdio.h"
struct test
{
int m1[10]; =》VC:4*10, TC:2*10
char m2; ==》VC:1+3字节填充对齐,TC:1
float m3; ==> VC: 4, TC:4
double m4;==》 VC:8 TC:8
}test;

当前的32位CPU为了提高内存访问效率使用4字节对齐方式访问内存,所以当前的C编译器也采用4字节对齐的方式进行内存分配,所以在结构体定义时,尽量将各个成员按照4字节对齐方式进行排列
由于TC过于古老,所以建议不要在使用,你可以使用其他的编译环境,如Visual C++, MinGW,Cygwin等
lingyin55 2009-06-03
  • 打赏
  • 举报
回复
VC字节对齐全攻略
http://blog.csdn.net/sunewer/archive/2007/04/18/1569267.aspx

查了下,没有关于tc字节对齐的资料,tc应该是不支持的。
lingyin55 2009-06-03
  • 打赏
  • 举报
回复
vc是4字节对齐

struct test
{
int m1[10]; ///4*10 = 40
char m2; ///1字节,但要对齐,所以占4
float m3; ////4
double m4; ////8
}test;

tc好像是不支持字节对齐的,所以为

struct test
{
int m1[10]; ///20
char m2; ///1
float m3; ///4
double m4; ////8
}test;
mengde007 2009-06-03
  • 打赏
  • 举报
回复
又一个字节对齐问题;百度下;http://www.yuanma.org/data/2006/0723/article_1213.htm
liao05050075 2009-06-03
  • 打赏
  • 举报
回复
字节对齐详解
http://www.yuanma.org/data/2006/0723/article_1213.htm
unfuncs 2009-06-03
  • 打赏
  • 举报
回复
字节对齐

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧