• 瓜瓜
    2020-02-07
    但是,如果所需要寄存器比实际寄存器的数量少,该怎么办呢
    ---------------------
    这个是不是写错了??
    
    
  • 写点啥呢
    2019-11-05
    请问老师,对于需要通过栈保存寄存器溢出的变量,在使用的时候是不是还是要占用一个寄存器呀?比如文章中的最后例子,硬件是3个寄存器约束,溢出一个变量作为临时变量,但是后段代码生成的时候,是不是其实还是需要4个寄存器(load/save指令都需要一个寄存器的)?

    作者回复: 不是的。
    对于溢出到内存里的变量,在读(load)和写(store)的时候,确实要使用一个寄存器。但是使用的时间很短。所以你看看我配的图,之前很多个集合里都有f。溢出到内存以后,含有f1、f2、f3、f4的集合,反而少了。这就导致再次分配寄存器的时候,3个就够了。文稿里有这个推导过程,你仔细看一下。

    
    
  • 沉淀的梦想
    2019-11-01
    最近几讲有种在学《算法导论》的感觉,感觉学编译原理真的能够帮助我们贯通整个计算机科学,涉及到的东西好多

    作者回复: 是。你总结得很对。编译原理要把计算机组成、数据结构、算法、操作系统,以及离散数学中的某些知识都用上。

    比如,我们讲到指令选择、寄存器分配和指令排序,都是NP Complete的。这个时候,如果提前已经知道什么是NP Complete,那么马上就对这类算法有概念,也马上想到可以用什么样的方式来对待这类问题。

    再比如,编译原理中很多算法都是基于树和图的,所以对这两个数据结构的理解也会有帮助。

    至于计算机组成原理,跟后端技术的关联很密切。

    程序运行时的环境,内存管理等内容,则跟操作系统有关。

    
    
  • 💪😊
    2019-10-30
    老师,已经跟不上了… 还是好希望我们最后有没有类似研究一下实现一下图查询的sql,如gsql标准。或者js2019的开源大佬的实现类的成果

    作者回复: 后端需要更多对计算机组成等知识的理解,确实会有点挑战。
    后端算法的特点也不一样,往往都是NP-Complete的,不追求最优解,次优解就挺好。这方面在思维上也要适应一下。

    相对来说,前端比较纯粹。基本上把逻辑搞清楚就行了,而且肯定有最优解。

    图查询?有同事用过node4j。我本人并没有深入研究过。不过,从编译原理的角度,这都是不同的应用领域。语言的部分,编译技术可以解决,它只是个接口,是个封装;落地机制部分,要运用每个领域的知识,比如关系数据库的原理、图数据库的原理。

    
    
我们在线,来聊聊吧