| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2936 人关注过本帖
标题:初来乍到, 有问题请教
只看楼主 加入收藏
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 40楼 TonyDeng
Tony,
什么叫字节对齐?    int a 为4  int *b 为4 所以 char c 也为4个字节?  char字符占1个字节吧?     结构体本来就是结构体里的内容相加。   有点迷糊。

在32位操作系统中A占________字节,B占________字节

    struct A{
         int  a;
         int*  b;
         char  c;
            };
2012-06-30 18:32
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
能先上网查查资料再发问吗?

总有那身价贱的人给作业贴回复完整的代码
2012-06-30 18:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
字对齐,确实是搜索一下或者查书就有的。而且,这是一种独特性,学语言的时候,不必把心思都花在这上面。

授人以渔,不授人以鱼。
2012-06-30 18:58
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 43楼 TonyDeng
......
实际上,  我单独 sizeof(char)是1   所以还不太明白你的思想.
struct A{
          int  a;
          int*  b;
          char  c;
             };


定义一个结构类型的变量,实际上是为结构变量中的每个成员数据项分配内存空间,成员数据项是受结构约束的变量,成为结构变量的成员变量。结构类型的变量所需分配的内存空间大小是结构类型的所有成员变量所需分配空间大小之和。
既是:sizeof(s_tmp)=sizeof(a)+sizeof(b)+sizeof(c)=1+2+1=4
(vc++6.0中short数据类型为2个字节)
2012-06-30 20:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你想像如下情形:内存是一根数轴,上面有等距刻度,每种CPU,都有最佳的寻址动作,它能快速地定位到刻度上、以刻度为单位跳跃,如果落在刻度中间,就需要前后挪动,效率就要打折扣。编译器为了照顾这种计算机,会把每个变量的起始地址安置在刻度上,以方便CPU寻址,这样编译出来的变量体,占据的空间都是以刻度为单位的。这就是所谓的“字对齐”,正如你知道,“字”是16位即2Byte,所以这种机器下的变量分配,其起始地址和尺寸都是以2Byte为距离的。不同的机器有不同的寻址特点,不是千遍一律的,我们不能假定编译器分配出来的变量尺寸到底是多大,唯一准确的办法,是使用内置的尺寸刻度,比如sizeof(),千万不要去猜测这个值是多少。

在单个char变量中,它的sizeof()是1Byte,但不等于3个char组成的字符串就真占3Byte空间,紧跟在这个字符串后面的变量,其起始地址可能跟前面的隔空了1Byte,这相当于那个字符串占了4Byte,但sizeof()这个字符串,又不等于是它实际占据的空间尺寸。你给出的那个结构体A,char在最后位置,其sizeof(A)是否把char占了两位,是不得而知的,但如果把这个char放在开头,它就必定占2Byte,总之,整个A占据的空间,也是2Byte的整数倍,放在最后,编译器怎么处理,是编译器的事。在嵌入式编程中,就会遇到这种问题,通过直接给出地址偏移量来快速定位,这个时候就会遇到字对齐的问题,要仔细测试,不同的机器有不同的行为特点,这样写出来的程序是没有多少可移植性的。

16位以2Byte为单位,但不见得32位和64位机器下这样也高效,那是硬件设计者的事。写软件的,大致了解有这么一种情况就可以了,不要跑过界,去混硬件。除非你专门干这一行。

授人以渔,不授人以鱼。
2012-06-30 20:26
wangchengbin
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2012-6-27
收藏
得分:0 
回复 45楼 TonyDeng
Hello Tony deng,
我不知道你对计算机网络是否熟悉. 不管怎样,我还是不贴先发出来.    看你能否帮我解答下.    谢谢!

9、通过本机的路由信息,说明访问某一台主机的下一跳路由。
Active Routes:                                    
Network Destination    Netmask             Gateway          Interface          Metric
0.0.0.0                0.0.0.0            200.200.41.254    200.200.41.102       20
21.100.100.0           255.255.255.0      200.200.41.103    200.200.41.102        1
127.0.0.1              255.0.0.0          127.0.0.1          127.0.0.1            1
200.200.41.0           255.255.255.0      200.200.41.102    200.200.41.102       20
200.200.41.0           255.255.255.0      200.200.41.104    200.200.41.102        1
200.200.41.102         255.255.255.255     127.0.0.1         127.0.0.1           20
200.200.41.255         255.255.255.255     200.200.41.102    200.200.41.102      20
224.0.0.0              240.0.0.0           200.200.41.102    200.200.41.102      20
255.255.255.255        255.255.255.255     200.200.41.102    200.200.41.102      1
Default Gateway:      200.200.41.254            
1).访问200.200.41.101的下一跳地址是:________               
2).访问21.100.10.101的下一跳地址是:_________            
3).访问40.140.140.101的下一跳地址是:_________           
2012-07-01 21:14
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
收藏
得分:0 
回复 楼主 wangchengbin
对于第一个问题,malloc里面的10不是字节的意思,而是代表了int型,int型占了4个字节,就是这样理解的。
2012-07-01 22:31
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
收藏
得分:0 
回复 楼主 wangchengbin
第二个问题,-1在机器中的表示就是最大的数,即你写的那个数字,具体的你可以百度搜下计算机组成的相关内容,这种问题在平时编程没什么太大的用处,参考一下补码,原码等在计算机中的表示,你就会知道了,我说的好像不太对,学的太久了,忘记了。你知道了可以写个教程帖发出来。
2012-07-01 22:37
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 47楼 fenghelong
错了,看看前面人的解释

总有那身价贱的人给作业贴回复完整的代码
2012-07-02 04:48
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
收藏
得分:0 
回复 49楼 embed_xuel
哪个的?
2012-07-02 10:20
快速回复:初来乍到, 有问题请教
数据加载中...
 
   



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

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