如何通过汇编提高此代码段的性能?

时间:2016-12-23 05:05:19

标签: performance assembly

如何在程序集中提高以下代码段的性能?请说明我有什么方法可以做到这一点?

void changeDirection(char key) {
    /*
      W
    A + D
      S

    */
    switch (key) {
    case 'w':
        if (direction != 2) direction = 0;
        break;
    case 'd':
        if (direction != 3) direction = 1;
        break;
    case 's':
        if (direction != 4) direction = 2;
        break;
    case 'a':
        if (direction != 5) direction = 3;
        break;
    }
}/******increase performance*****/

由于

1 个答案:

答案 0 :(得分:3)

实际上最终2-5范围与0-3范围的结果很容易被滥用(虽然我担心这不是你想要的)。

正常游戏允许进行密钥重新定义,这将彻底打破这一点。所以这更像是“笑话”而非严肃的回答。但是你的问题也处于“笑话”的边缘,我的意思是:如果你真的相信你帖子里的东西是个问题,你就会遇到更严重的问题。

// I expect "direction" to be int, otherwise change wantDir vars

void changeDirection2(char key) {
  //                                     a      s  d          w
  constexpr static int wantDir[] = { ~0, 3, ~0, 2, 1, ~0, ~0, 0 };
  int wantedDir = wantDir[key&7];
  if (wantedDir+2 == direction) return;
  direction = wantedDir;
}

另外,这会比a,w,s,d对更多(所有)键做出反应。只有正确的来电才能打电话。

版本2,没有LUT(仍然硬编码为“awsd”并将任何其他密钥修改为某个数字):

void changeDirection3(char key) {
  int wantedDir = (~key>>1)&3;
  if (wantedDir+2 == direction) return;
  direction = wantedDir;
}