27 12
发新话题
打印

[讨论]考大家个小问题 答对了让虎子亲亲你

[讨论]考大家个小问题 答对了让虎子亲亲你

议题提交:无敌最寂寞 [E.S.T]
信息来源:邪恶八进制信息安全团队

其实这个问题我也是刚搞明白,所以拿出来看看有多少和我一样傻的人:)
答对了我让我小媳妇虎子亲一口

看下面的结构体定义:

#pragma pack(4)
struct A{
int a;
char b;
short c;
char d;
}

请问sizeof(A)的值是多少

该代码在win32系统下的。不要用编译器调试哦,只说出结果是不行的。还需要给出为什么?
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

光看预编译指令就明白你耍什么花招了。

不说不说,就是不说,虎子的吻,留给楼下的了。
流氓会武术,谁都挡不住. http://hi.baidu.com/zvrop

TOP

嘿嘿,这也是我犯错误的地方~~~~我也是刚弄明白,估计也有不少兄弟在这里犯迷糊,所以拿出来让大家思考思考。。
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

我先查查 pack(4)的意思先

TOP


..............................
非得打些费话
在我纯真年少時,有一個女生,她願意爲我失去生命,她意志堅定地說:你再纏著我,我就去死! 在我負笈外地時,有一個女生,她願意等我到下輩子,她溫柔婉約地說:你想成爲我男友?等下輩子!! 在我窮困潦倒時,有一個女生,她願意與我共赴黃泉,她眨著紅眼說:你再不還錢,我和你同歸于盡!

TOP

到底有人知道不说呢还是没人知道?我家虎子的吻是卖不出去了~~哎,回去让她吻ZV算了~~~
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

引用:
下面是引用haicao于07-02-2005 09:52发表的:

..............................
非得打些费话
不是4....我已经知道答案了 但是为了避免被dahubaobao性骚扰 就还是不说了
昨天我答错 无敌给我讲的 闹半天 这丫的也是现学的...
无锋还笑话我 强奸的说
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

结构体的大小等于最后一个成员的偏移量加上其大小再加上末尾的填充字节数目
sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( tr
ailing padding )
但是无敌给出的这段code里有一个影响着sizeof的玩意,也就是pack.
在这里他起着调整结构体对齐方式的作用
#pragma pack( 4 ),4为字节对齐数,默认是8,如果4比结构体成员的sizeof值小,那么该成员的偏移量应该以此值为准,即是说,结构体成员的偏移量应该取二者的最小值。
那么,答案就叫给楼下的了。

TOP

赞!楼上的大哥说得好详细啊
#pragma pack( 4 )  对这个sizeof(A)没有影响了吧(好像最大的sizeof(int)也只是4,没超过4)
不知道我有没有理解错。。。

4+1+1+2+1=9;
再补齐成sizeof(int)的倍数,9+3=12

if(sizeof(A)==12)  虎子亲亲sunwear;
else  哪位大哥告诉一下正确答案;
shutdown -r -t 60 -c "由于你的人品问题,系统需要重新启动"

TOP

一群人渣、流氓!  为了不然流氓们骚扰我,我说说吧。

a的偏移量为0,占用4字节,满足对齐方式;b的偏移量为4,满足对齐方式,占

用1字节;c的偏移量为5,不满足对齐方式,所以+3,占用2字节;d的偏移量

为10,不满足对齐方式,所以+2,占用1字节。最后偏移量为12,结构大小为

12。  

结构实际大小为8字节,可以设置#pragma pack(1)看到实际结构大小。

以上只是个人理解,不对的地方还请提出。
请加47809945   100%通过!每个月总有那么几天,您的网络会受到黑客的攻击--坐立不安,烦躁无力,使用虎虎开发的"月月舒"防火墙,超轻超薄,易于携带,提供由内到外的全方位保护,即使流量再大,也可以冲浪自如,再也不用担心侧漏啦。

TOP

汗~~~~~~~~~原来楼上的就是无敌的小媳妇啊,失敬失敬~~~~~~

仔细拜读后发现虽然答案跟你的一样是12,但对齐的过程不一样,等高手来评论一下,看看用
不用被流氓骚扰 ×_×
shutdown -r -t 60 -c "由于你的人品问题,系统需要重新启动"

TOP

表瞎说  无敌才是我媳妇  这人渣  正打算休了他!
请加47809945   100%通过!每个月总有那么几天,您的网络会受到黑客的攻击--坐立不安,烦躁无力,使用虎虎开发的"月月舒"防火墙,超轻超薄,易于携带,提供由内到外的全方位保护,即使流量再大,也可以冲浪自如,再也不用担心侧漏啦。

TOP

引用:
下面是引用忍者5482于07-03-2005 00:36发表的:
赞!楼上的大哥说得好详细啊
#pragma pack( 4 )  对这个sizeof(A)没有影响了吧(好像最大的sizeof(int)也只是4,没超过4)
不知道我有没有理解错。。。

4+1+1+2+1=9;
.......
4+1+1+2+1=9;  

最后的1哪来的?  结构实际大小是8字节哦!
#pragma pack(1)看看就知道了。
请加47809945   100%通过!每个月总有那么几天,您的网络会受到黑客的攻击--坐立不安,烦躁无力,使用虎虎开发的"月月舒"防火墙,超轻超薄,易于携带,提供由内到外的全方位保护,即使流量再大,也可以冲浪自如,再也不用担心侧漏啦。

TOP

哈哈大家终于参与进来了,偶非常高兴。。。大家的说法很多,那到底谁的对呢?不急,我们再看一个便知是谁的对了:

#pragma pack(4)

struct ttt{
char a;
short b;
char c;
}
那么sizeof(ttt)的值应该是多少呢?回答出来这个,而且能说出为什么的那位的观点就是对了。。。不是我无敌卖关子,我是为了大家,想让大家更深入地了解一下~~~请大家继续参与啊~~~~

我的小媳妇都被你们急得说话都颠三倒四的了,看在我的面子上,千万别让他疯了啊~~~
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

呵呵,既然无敌出来说了,俺就再试试

同样,#pragma pack(4)  对sizeof(ttt)没有影响

sizeof(ttt)=1+1+2+1=5
                a  补 b  c  
最后补成sizeof(short)的倍数,5+1=6
shutdown -r -t 60 -c "由于你的人品问题,系统需要重新启动"

TOP

引用:
下面是引用dahubaobao于07-03-2005 01:25发表的:



4+1+1+2+1=9;  

.......
4+1+1+2+1
a  b  补 c  d
ab加起来为5,但sizeof(short)=2, c 前面补一位
shutdown -r -t 60 -c "由于你的人品问题,系统需要重新启动"

TOP

看了大家的回答.有对有错,不过总的理解是对了,而且答案也是对的不少,我看用了编译器的占绝大多数吧,嘿嘿.

#pragma pack(n)是内存对其的意思.

无敌这题有意思是在char和short共存的时候.

大家都知道c会把内存对其,可是内存对其还有一条非常重要的原则,也就是"尽量不浪费内存".

所以这题的正解是:

第一个int4字节,占前4字节.

第二个char,占1字节,第三个short2字节,由于这两个相加还不到4字节,所以他们共用1个4字节的区域.因为考虑到c++对双地址的访问速度较快.所以他们的排列是1011,也就是前两个字节给char用,后两个给short用,而不是1110的排列.这是比较容易看错的地方.

最后一个char占1字节,可是对不齐了,所以它后面要加上3个00的字节填充.所以这个最后的char占了4字节的空间

这样下来,就是12字节了.

c这种不浪费内存又对其的方式在少数变量的时候也许不太好,多数变量的时候还是比较节约的.

比如再来一题:
#pragma pack(8)
struct A{
char c1;  
int i1;   //和char一起占8,不过是10001111的占
float f1;  //不可能和double一起,所以它填充了后面的4字节00
double d1; //占8字节.
} ;
这题的答案是24.是(char4+int4)+(float4+空4)+double8=24

不知道还有谁有其他见解吗?

虎子.......吻就不要了,今晚帮我把无敌..就床正法.
流氓会武术,谁都挡不住. http://hi.baidu.com/zvrop

TOP

反正我是没说答案,只是说说了看法而已。
在这看见S8的重量级人物,我眼福不浅啊。

TOP

不错,ZV解释的非常正确,其实最通俗的解释如下:
引用:
#pragma pack规定的对齐长度,实际使用的规则是:
结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。
按照这个说法,我上面的那个题可以这样解释:
#pragma pack(4)
  struct tttt
  {
    char a;//第一个成员,放在[0]偏移的位置,
    short b;//第二个成员,自身长2,#pragma pack(4),取2,按2字节对齐,所以放在偏移[2,3]的位置。
    char c;//第三个,自身长为1,放在[4]的位置。
  };
//整个类的大小是5字节,按照min(sizeof(short),4)字节对齐,也就是2字节对齐,结果是6
//所以sizeof(tttt)是6。


ZV,上QQ我有要事找你。。。拜托你了。。。求求你了。。。
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

靠  那意思不就跟我说的一样么。

TOP

你说的对,但是不够通俗呵呵~~~我又没说你说得不对~~

zv,你要再不上QQ我去跳楼了!
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

倒,我的才是通俗的说法吧.

我没习惯用QQ了,有事给我发email...qq...占30MB内存啊.
流氓会武术,谁都挡不住. http://hi.baidu.com/zvrop

TOP

其实和#pragma pack()相对应的还有个__declspec( align() ),前者规定最小,后者规定最大。

PS:ZV,你收到我论坛的消息了吗?我可是在等你写好啊。。。拜托了
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

我不说答案的主要原因,其实就是这个答对了的奖品太恐怖了。
所以我就把思路说说,留给那些不要命的。
虎子的吻太可怕了,太恐怖了。
ZV你要倒霉了。

TOP

不同的系统可能不一样啊,有的说short占2个字节,也有的书说4个字节,我都被弄晕了~
现有极品启示:中国制造,福州出产,长170cm,重60kg。采用高级AI,零件齐全,运转极稳定,经二十多年运行,属高满意产品。现因发展需要,诚招志同道合者(仅限女性)共同研发第二代新产品,有意者请加284582241

TOP

 27 12
发新话题