如何在程序集中提高以下代码段的性能?请说明我有什么方法可以做到这一点?
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*****/
由于
答案 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;
}