作者回复: 不是的。
对于溢出到内存里的变量,在读(load)和写(store)的时候,确实要使用一个寄存器。但是使用的时间很短。所以你看看我配的图,之前很多个集合里都有f。溢出到内存以后,含有f1、f2、f3、f4的集合,反而少了。这就导致再次分配寄存器的时候,3个就够了。文稿里有这个推导过程,你仔细看一下。
作者回复: 是。你总结得很对。编译原理要把计算机组成、数据结构、算法、操作系统,以及离散数学中的某些知识都用上。
比如,我们讲到指令选择、寄存器分配和指令排序,都是NP Complete的。这个时候,如果提前已经知道什么是NP Complete,那么马上就对这类算法有概念,也马上想到可以用什么样的方式来对待这类问题。
再比如,编译原理中很多算法都是基于树和图的,所以对这两个数据结构的理解也会有帮助。
至于计算机组成原理,跟后端技术的关联很密切。
程序运行时的环境,内存管理等内容,则跟操作系统有关。
作者回复: 后端需要更多对计算机组成等知识的理解,确实会有点挑战。
后端算法的特点也不一样,往往都是NP-Complete的,不追求最优解,次优解就挺好。这方面在思维上也要适应一下。
相对来说,前端比较纯粹。基本上把逻辑搞清楚就行了,而且肯定有最优解。
图查询?有同事用过node4j。我本人并没有深入研究过。不过,从编译原理的角度,这都是不同的应用领域。语言的部分,编译技术可以解决,它只是个接口,是个封装;落地机制部分,要运用每个领域的知识,比如关系数据库的原理、图数据库的原理。