各位 v 友,帮忙看看这个思路对不对
项目里面有个函数调用频率很高(极高), 大概长这样,
char *cmd=input //string,输入
if (cmd == "cmd1")
dosomething1
else if cmd== “cmd2”
dosomething2
这里 cmd1 cmd2 是举例的常数,实际是 30 位以内的字符串
if 大概有 200 多个分支,( 就是你们批判的那种,一个 if 几百分支,我接下了) 我想优化下, 目前有两个想法,望各位指正
思路 1: 统计每个 cmd 使用频率,调整 if 顺序,高频在前,低频在后,这样优化估计(目测)有些作用。(这主要是作为思路 2 被卡住了的备选
思路 2,把 string 快速转换成 int,利用 switch case 跳转,这样当然是最好的(吗?),初步想法是 把 sting 各位按不同权重求和得到 int,这个做成一个宏,这样,即使冲突了,编译器会报错。 最终代码是这样,
int cmdn = sum ( cmd )//这个是输入,运行时计算
switch cmdn:
case M(CMD1)://M 是宏,返回一个常数
DO SOMETHING
case M(cmd2 ):
do something 2
这样,新加 cmd3 命令 即使求权重和前面冲突了,编译器会立即报错,我只需要修改字符串某几位权重或者换个命令名就行。
关键点来了,如何写这个宏呢?
要优雅,不要污,最好是接受一个参数
不要这样
M ( c,m,d,1 )
要这样
M(cmd)
ps:我其实有点怀疑宏能不能做到这个 (分割字符串)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.