游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 查无此人

goto语句有多少性能影响?

[复制链接]

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-1-22 15:37:00 | 显示全部楼层

Re: Re:goto语句有多少性能影响?

ricohcanon: Re:goto语句有多少性能影响?

7楼,你是不是换头像了?

被发现了,呵呵~~

0

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-1-25 12:30:00 | 显示全部楼层

Re:goto语句有多少性能影响?

goto一开始所有的地方就建议不用,所以一直没有去研究~~我是乖小孩.....

不过win98访问系统内存区是可以的,所以楼上说的情况是可能的~
后面的系统就不行了 ,嘿嘿

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2007-1-25 22:20:00 | 显示全部楼层

Re: goto语句有多少性能影响?

系统有存储保护的机制呢!你让你随便乱跳?那不就乱套了?
执行这条指令(jmp:0000:2345)的结果是越界中断,控制权又交还给系统了!我记得在32位系统里高2G是留给应用程序的,而第2G是留给操作系统的
你该不会以为你真的就跳到操作系统的位置去了吧,系统从目态到管态貌似只有一种方法-->中断
好好看看操作系统的存储吧~什么分段/分页/段页式
总之一个正常的系统是不会让你非法访问你不该访问的东西的~

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-1-26 13:48:00 | 显示全部楼层

Re:goto语句有多少性能影响?

goto对性能是没有任何影响,唯一能影响的只有人脑。
因为goto本身不带有任何逻辑性,用Goto的程序急其难于被人类所阅读。

但是只有一种情况是可以被允许用goto语句的,就是企图break出双重循环的时候

例如

while(a)
{
    while(b)
    {
         if(c)
            goto out;
    }

}
ut;

这是语言本身涉及的问题,没有一个好的方式从双重(或者多重)循环中跳出。C++为了保留和C的兼容性,不得不做此让步,但作为(C++)--的Java语言,明确的重新定义了goto的语意,让其职能作为跳出多重循环的工具,而不能任意跳转。

明确C++的goto和宏一样,在有替代方案的时候尽量不要使用,只有在没有替代方案的时候(一般都会有明确的情况,对于goto只有一种就是跳出多重循环,宏可能是为可跨平台或者什么)才能谨慎的使用,并且要明确使用之后所带来的后果和其带来的好处。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-1-26 17:03:00 | 显示全部楼层

Re: Re:goto语句有多少性能影响?

免费打工仔: Re:goto语句有多少性能影响?
while(a)
{
    while(b)
    {
         if(c)
            goto out;
    }

}
ut;

好例子!
在这种情况下,好象只能用 goto,其他的都不好用的吗。
要不然就得这样:
while(a)
{
    while(b)
    {
         if(c)
            break;
    }
    if(c)
       break;
}
:out;
呵呵,得用两次 if(c)break; 才能跳出来也。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2007-1-26 18:56:00 | 显示全部楼层

Re:goto语句有多少性能影响?

顶啦

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-1-30 06:14:00 | 显示全部楼层

Re: Re: Re:goto语句有多少性能影响?

snhun: Re: Re:goto语句有多少性能影响?


好例子!
在这种情况下,好象只能用 goto,其他的都不好用的吗。
要不然就得这样:
while(a)
{
    ...


可以把双重(或多重)循环抽取出来单独写成一个函数啊

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2007-1-30 16:03:00 | 显示全部楼层

Re: Re: Re:goto语句有多少性能影响?

snhun: Re: Re:goto语句有多少性能影响?
while(a)
{
    while(b)
    {
         if(c)
            break;
    }
    if(c)
       break;
}

这是个典型例子,这个情况下不用goto才影响性能——要做两次判断(不过可能被编译器优化掉)

至于Win98下跳到系统区,嗯,只能说Win98的16位残余太过严重了。NT5系统应该不会有什么问题(没研究过NT5系统,不过不应该有问题,不然一个Guest也能入侵系统了)

28

主题

433

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2007-1-30 19:58:00 | 显示全部楼层

Re:goto语句有多少性能影响?

goto 和条件 分枝 一样
会 破坏 cpu 的 指令 命中率

0

主题

199

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2007-1-30 21:13:00 | 显示全部楼层

Re:goto语句有多少性能影响?

过早的考虑性能优化不是个好习惯。
绝大多数情况下的任务都不需要考虑cache命中率影响这样的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表