gpt4 book ai didi

c - 哪个更快 : bitshift vs switch

转载 作者:行者123 更新时间:2023-11-30 20:04:19 27 4
gpt4 key购买 nike

我正在设计一款基于多人 RTS 图 block 的游戏,其中所有游戏逻辑均由服务器处理(用 C 语言编写),并且客户端是在 Unity 中制作的,以便于跨平台部署。

我正在设计一个将通过 TCP 发送的自定义协议(protocol),我的问题是从效率的角度来看,而不是数据大小 POV(权衡),我是否最好使用按位运算符来确定用户尝试执行的操作或者我应该只使用 char(byte) 并将 int 值输入到 switch 语句中?还是我缺少另一种更有效的方法?

如果我采用按位路由,它将有 2 个字节长,本质上会被读取为一个位数组,其中 2 个字节中“1”的位置将决定将采取什么操作以及数据包的其余部分应如何进行被阅读。例如

for (int i = 0; i < sizeof(unsigned short); ++i)
{
if((pkt & 1) > 0)
{
/* call correct function for bit at index 'i' with
remaining packet data (minus these 2 header bytes) */
}
pkt >> 1;
}

或者我应该采取更清晰的读取方式(假设是字节数组或 char* :

)
char val = pkt[0]
switch (val)
{
case 65:
/* call relevant function */
break;
case 66:
/* call relevant function */
break;
}

这些示例假设我已经读取了前 4 个字节中接收到的数据的大小

任何有关我应该采取哪条路线的见解都非常感谢!

最佳答案

跳转表可能是最快的:

/* declaration of action functions */
int action1(char *data);
int action2(char *data);
int action3(char *data);
int action4(char *data);
int action5(char *data);
/* Filler */
int nop(char *data) { return 0; }

/* declare jumptable action as an array of function pointers of suitable type */
int (*action[])(char*) = { action1, action2, action3, action4, action5, nop, nop, nop };


/* Call function */
char val = pkt[0] & 0x07;
result = (action[val])(pkt+2);

关于c - 哪个更快 : bitshift vs switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com