标签分类 热门分类
当前位置:首页 > 程序设计电子书 > GCC电子书网盘下载
深入分析GCC 深入分析GCC
u011824510

u011824510 提供上传

资源
41
粉丝
9
喜欢
306
评论
8

    深入分析GCC PDF 高清扫描版

    GCC电子书
    • 发布时间:

    给大家带来的一篇关于GCC相关的电子书资源,介绍了关于深入分析、GCC方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小151.4 MB,王亚刚编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.4,更多相关的学习资源可以参阅 程序设计电子书、等栏目。

  • 深入分析GCC PDF 下载
  • 下载地址:https://pan.baidu.com/s/1PNfiGmiM8GwckKBEG1LAF
  • 分享码:lli6
  • 深入分析GCC PDF

    深入分析GCC结合GCC-4.4.0源代码,围绕GCC编译过程,详细介绍了GCC的设计框架和实现过程,从源代码到AST、从AST到GIMPLE、从GIMPLE到RTL,以及从RTL到终的目标机器代码的详细过程,涉及到各个阶段中间表示的详细分析、生成过程,使读者在了解编译原理的基础上进一步掌握其实现的总体流程和实现细节,让更多的读者对编译技术不再仅仅停留在理论层面,而是能看到一个活生生编译系统实例的实现过程。

    目录

    • 第1章 GCC概述 1
    • 第2章 GCC源代码分析工具 4
    • 第3章 GCC总体结构 16
    • 第4章 从源代码到AST/GENERIC 26
    • 第5章 从AST/GENERIC到GIMPLE 115
    • 第6章 GIMPLE处理及其优化 177
    • 第7章 RTL 208
    • 第8章 机器描述文件${target}.md 239
    • 第9章 机器描述文件${target}.[ch] 272
    • 第10章 从GIMPLE到RTL 365
    • 第11章 RTL处理及优化 433
    • 第12章 支持新的目标处理器 503

    上一篇:Spark大数据分析:核心概念、技术及实践  下一篇:代码审计:企业级Web代码安全架构

    展开 +

    收起 -

    GCC 相关电子书
    关于GCC的学习笔记
    网友NO.643301

    深入理解mysql的自连接和join关联

    一、mysql自连接 mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。 一般情况我们看到这张表我们第一时间用语句进行操作: SELECT * FROM shoping WHERE price27 可想而知,这是有多么简单,假设你并不知道数据库表详细数据或者数据量相当庞大呢?作为一个数据库管理员,我们就要用别的方式迅速找出所需要的数据。 分步查询 最简单的一种方式,也是最容易想到操作: SELECT price FROM shopping WHERE name='惠惠' //得出price查询结果为27SELECT * FROM shopping WHERE price27 与采用自连接的方式相比,这种方法需要对中间结果进行人工干预,显然不利于程序中的自动处理操作。 自连接方式: SELECT b.* from shopping as a,shopping as bwhere a.name='惠惠' and a.priceb.price order by b.id 我们可以获取到如下表信息: 注意点: 别名 a,b虽然名称不同,但是同一个表,定义别名的目的是更方便在自身进行删选。 执行select通过(中间表)所得到的b.*,,就是最终结果。 子查询 子查询也是常用的一种方式,就是在select里嵌套select。 实现代码如下: SELECT * FROM shopping WHERE price(select price from 'shopping' where name='惠惠') 所得结果如下所示,可见两种方式所得结果相同:……

    网友NO.564501

    深入解析JavaScript中的立即执行函数

    它是什么 在 JavaScript 里,每个函数,当被调用时,都会创建一个新的执行上下文。因为在函数里定义的变量和函数是唯一在内部被访问的变量,而不是在外部被访问的变量,当调用函数时,函数提供的上下文提供了一个非常简单的方法创建私有变量。 function makeCounter() { var i = 0; return function(){ console.log(++i); }; }//记住:`counter`和`counter2`都有他们自己的变量 `i`var counter = makeCounter();counter();//1counter();//2var counter2 = makeCounter();counter2();//1counter2();//2i;//ReferenceError: i is not defined(它只存在于makeCounter里) 在许多情况下,你可能并不需要makeWhatever这样的函数返回多次累加值,并且可以只调用一次得到一个单一的值,在其他一些情况里,你甚至不需要明确的知道返回值。 它的核心 现在,无论你定义一个函数像这样function foo(){}或者var foo = function(){},调用时,你都需要在后面加上一对圆括号,像这样foo()。 //向下面这样定义的函数可以通过在函数名后加一对括号进行调用,像这样`foo()`,//因为foo相对于函数表达式`function(){/* code *……

    网友NO.492623

    深入解析Vue源码实例挂载与编译流程实现思路详解

    在正文开始之前,先了解vue基于源码构建的两个版本,一个是 runtime only ,另一个是 runtime加compiler 的版本,两个版本的主要区别在于后者的源码包括了一个编译器。 什么是编译器,百度百科上面的解释是 简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。 通俗点讲,编译器是一个提供了将源代码转化为目标代码的工具。更进一步理解,vue内置的编译器实现了将 .vue 文件转换编译为可执行javascript脚本的功能。 3.1.1 Runtime + Compiler 一个完整的vue版本是包含编译器的,我们可以使用 template 进行模板编写。编译器会自动将模板编译成 render 函数。 // 需要编译器的版本new Vue({ template: 'div{{ hi }}/div'}) 3.1.2 Runtime Only 而对于一个不包含编译器的 runtime-only 版本,需要传递一个编译好的 render 函数,如下所示: // 不需要编译器new Vue({ render (h) { return h('div', this.hi) }}) 很明显,编译过程对性能有一定的损耗,并且由于加入了编译过程的代码,vue代码体积也更加庞大,所以我们可以借助webpack的 vue-loader 工具进行编译,将编译……

    网友NO.100082

    深入理解NumPy简明教程---数组2

    NumPy数组(2、数组的操作) 基本运算 数组的算术运算是按元素逐个运算。数组运算后将创建包含运算结果的新数组。 a= np.array([20,30,40,50]) b= np.arange( 4) b array([0, 1, 2, 3]) c= a-b c array([20, 29, 38, 47]) b**2 array([0, 1, 4, 9]) 10*np.sin(a) array([ 9.12945251,-9.88031624, 7.4511316, -2.62374854]) a35 array([True, True, False, False], dtype=bool) 与其他矩阵语言不同,NumPy中的乘法运算符*按元素逐个计算,矩阵乘法可以使用dot函数或创建矩阵对象实现(后续章节会介绍) A= np.array([[1,1], ...[0,1]]) B= np.array([[2,0], ...[3,4]]) A*B # 逐个元素相乘 array([[2, 0], [0, 4]]) np.dot(A,B) # 矩阵相乘 array([[5, 4], [3, 4]]) 有些操作符如+=和*=用来更改已存在数组而不创建一个新的数组。 a= np.ones((2,3), dtype=int) b= np.random.random((2,3)) a*= 3 a array([[3, 3, 3], [3, 3, 3]]) b+= a b array([[ 3.69092703, 3.8324276, 3.0114541], [ 3.18679111, 3.3039349, 3.37600289]]) a+= b # b转换为整数类型 a array([[6, 6, 6], [6, 6, 6]]) 当数组中存储的是不同类型的元素时,数组将使用占用更多位(bit)的数据类型作为其本身的数据类型,也就是偏向更精确的数据类型(这种行为叫做upcast)。 a= np.ones(3, dtype=np.int32) b= np.linspace(0,np.pi,3) b.dtype.name 'float64' c= a+b c array([ 1., 2.57079633, 4.14159265]) c.dtype.name 'float64' d= exp(c*1j) d array([ 0.54030231+0.84147098j,-0.84147098+0.54030231j, -0.54030231-0……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明