table 快,还是if elseif快?

m
microsat
楼主 (北美华人网)
请问,编译语言的第一步tokenizing。
是建立一个table来寻找每一个token快? 还是用if else if语言来直接写快?
举个例子。求解1到12个月的每个月的天数。 我们可以用if else (第一种方法)
if (x==1) days=31; else if (x==2) days=28; .... }
我们也可以用array months = {31, 28,.....31} (第二种方法) 这样天数就等于 months[x]
请问为什么第二种方法要比第一种方法慢呢?
现在流行的方法都是用的什么?



g
gokgs
这个例子是array 的标准用法。
Table lookup can mean a million things
m
mrw
当然是2快 O 1 vs O n 当然就十几个数,基本觉不出来
周小强
一看就不是科班出身。ifelseif 用了无数跳转指令,array 就是指针移动一定地址。你说哪个快?
m
microsat
一看就不是科班出身。ifelseif 用了无数跳转指令,array 就是指针移动一定地址。你说哪个快?
周小强 发表于 2023-10-09 16:36

谢谢!
那么请问windows操作系统中,对各种事件的捕获。 是用的switch case吗? 如果是的,那应该很慢。
为啥visual studio给出的事件响应函数,都是基于switch case的。
还有一个问题。是用普通的array快,还是建立一个hash table更快?
m
microsat
当然是2快 O 1 vs O n 当然就十几个数,基本觉不出来
mrw 发表于 2023-10-09 16:36

谢谢! 我的校验程序出了错误。纠正后,的确是array,第二种方法快些。
m
microsat
我有个基本的问题。假如,你设计一个操作系统,该操作系统,需要处理应对1万个事件。 当今流行的什么方法能最快的响应? table-driven,还是direct-driven,还是hand-coded?