| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1626 人关注过本帖
标题:有编程经验的人进来看下这个问题?
只看楼主 加入收藏
bestboy555
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2006-8-1
收藏
得分:0 
以下是引用我不是郭靖在2006-10-19 21:58:07的发言:

有什么问题?
VC缺省情况下是按 #pragma pack(4)执行的

如果是这样的话,
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
这个结果的答案是1,而不是4哦


原来这个世界还有好多真理!
2006-10-19 22:16
kavinka
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-10-19
收藏
得分:0 
mytc下是3,
dvec++是8。
10楼发现的也很奇怪,除了编译器的问题,顺序也有问题?
高人指点。。
2006-10-19 22:25
husi
Rank: 1
等 级:新手上路
威 望:1
帖 子:46
专家分:0
注 册:2006-10-17
收藏
得分:0 
楼上好像已经解释了!是由于字节对齐引起的。不过还是不太明白。

2006-10-19 22:49
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
以下是引用bestboy555在2006-10-19 22:16:11的发言:

如果是这样的话,
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
这个结果的答案是1,而不是4哦

我的妈咪呀! 为什么以前用是4的.


=×&D o I p R e E n C g T l X&×=
2006-10-19 23:18
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
main () {
char *d = (char*)malloc(1);
printf("%d\n",sizeof(d));
}

这就是4啦.

=×&D o I p R e E n C g T l X&×=
2006-10-19 23:20
guodong661
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-2-15
收藏
得分:0 
恩,你可以看看Insert The C++ Mode中有具体描述,在VC以及其他某些编译器中他们对内存的分配方式是按照4的整数倍进行分配内存,这样可以达到对内存方便管理的功效,所以可能会损失一些内存空间,但是对于问题的方便解决,损失一点内存,又有多少人会去在乎他呢,何况现在内存的价格,呵呵,而且对于每一个结构损失&lt;=3个字节,一个大工程也不过用到几百个类,合起来也不过就K级单位,呵呵,当然在什么单片机什么的上就不知道了,呵呵,也许他们的内存分配方式不一样,可能会省用点呢。具体请那位更有研究的高手解释下。

2006-10-20 08:49
guodong661
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-2-15
收藏
得分:0 
呵呵,楼上的,你测试的是指针,大小肯定是4个,呵呵,这个不用再多说了

2006-10-20 08:51
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
的确,指针是4个位. 哎....

=×&D o I p R e E n C g T l X&×=
2006-10-20 10:19
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 


以下只是我的猜测。

终于明白了为什么以前看到的总是以4位对齐,
因为以前的总是大于4位的。
typedef struct {
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
的的确是1。
没超过4位,不会按4位对齐。
typedef struct {
int b;
char a;
} cc;
main () {
cc d;
printf("%d\n",sizeof(d));
}
就是8啦。
因为它已经超过4位, 按照标准它是5,
5位按4位对齐,那就是8啦。


=×&D o I p R e E n C g T l X&×=
2006-10-20 10:35
快速回复:有编程经验的人进来看下这个问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017605 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved