小编Pat*_*k87的帖子

C语言中If-Else和Ternary运算符之间的速度差异?

因此,在一位同事的建议下,我刚刚测试了三元运算符和等效的If-Else块之间的速度差异......似乎三元运算符产生的代码比If-Else快1到2倍.我的代码是:

  gettimeofday(&tv3, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     if(a) a = b; else a = c;
  }
  gettimeofday(&tv4, 0);


  gettimeofday(&tv1, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     a = a ? b : c;
  }
  gettimeofday(&tv2, 0);
Run Code Online (Sandbox Code Playgroud)

(抱歉使用gettimeofday而不是clock_gettime ......我会尽力改善自己.)

我尝试改变我对块进行计时的顺序,但结果似乎仍然存在.是什么赋予了?此外,If-Else在执行速度方面表现出更多的可变性.我应该检查gcc生成的程序集吗?

顺便说一句,这都是在优化级别零(-O0).

我是在想象这个,还是有些东西我没有考虑到,或者这是机器相关的东西,还是什么?任何帮助表示赞赏.

c++ performance ternary-operator

11
推荐指数
3
解决办法
1万
查看次数

Android - 启动意图打开已打开的活动时屏幕闪烁

我有一项活动.启动模式是singleTask,我实现onNewIntent.当我在活动打开时发送启动此活动的意图(标志为NEW_TASK和RESET_TASK_IF_NEEDED)时,屏幕会闪烁,然后显示相同的活动.

为什么会发生这种情况?我认为singleTask应该足以确保将新意图传递给onNewIntent,而不是系统为我的活动启动新任务或任何事情.当我做以下任何一件事时,闪烁消失了:

  • 将启动模式更改为singleTop;
  • 将标志Intent.FLAG_ACTIVITY_CLEAR_TOP添加到启动意图.

我很想知道发生了什么,以及我能做些什么来克服闪烁(我真的不想改变启动模式或启动意图标志,如果可能的话).基本上,有什么理由不适用吗?

请注意,即使屏幕闪烁,我也会获得onNewIntent.

android android-intent

6
推荐指数
0
解决办法
939
查看次数