
编译原理
帅德布耀德
还需要介绍吗
展开
-
为什么要区分静态存储区、堆区、栈区_02
一、回答一:当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,逐个方法的内存栈也将自然销毁。因此,所有的在方法中定义的局部变量都是放在栈内存中的。 在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象创建的成本通常比较大),这个运行时的数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还能被另一个引用变量引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有一个对象原创 2020-05-29 23:21:54 · 262 阅读 · 0 评论 -
为什么要区分静态存储区、堆区、栈区_01
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果某动态内存不再使用,需要将其释放掉,否则就会发生内存泄漏现象。(OC中对象存储于堆中,当对象的应用计数为0时自动释放该对象) 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数.原创 2020-05-29 23:16:21 · 713 阅读 · 0 评论 -
GCC编译器原理 2.3------编译原理一:ELF文件(2)
四、 ELF 文件格式分析 ELF文件(目标文件)格式主要四种: 可重定向文件: 文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件。(目标文件或者静态库文件,即linux通常后缀为 .a 和 .o 的文件) 可执行文件: 文件保存着一个用来执行的程序。(例如bash,gcc等) 共享目标文件:...转载 2019-04-25 17:42:22 · 611 阅读 · 0 评论 -
GCC编译器原理 2.2------编译原理一:ELF文件(1)
二、ELF 文件介绍2.1 可执行文件格式综述相对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用情况以及可扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。研究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的。可执行链接格式 ( Executable and Link...转载 2019-04-25 17:41:28 · 413 阅读 · 0 评论 -
GCC编译器原理 2.1------编译原理一:目标文件
一、目标文件在 UNIX® 和 Linux® 中,任何事物都是文件。UNIX 和 Linux 编程实际上是编写处理各种文件的代码。系统由许多类型的文件组成,但目标文件具有一种特殊的设计,提供了灵活和多样的用途。目标文件是包含带有附加地址和值的助记符号的路线图。这些符号可以用来对各种代码段和数据段进行命名,包括经过初始化的和未初始化的。它们也可以用来定位嵌入的调试信息,就像语义 Web,非常...转载 2019-04-25 17:40:27 · 365 阅读 · 0 评论 -
GCC编译器原理 1.5------GCC 工具:readelf、size、strings、strip和 windres
1.3.18 readelf:elf 文件格式分析工具这个工具和 objdump 命令提供的功能类似,但是它显示的信息更为具体,并且它不依赖 BFD 库( BFD 库是一个 GNU 项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件);ELF 文件类型 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Objec...转载 2019-04-25 17:39:42 · 955 阅读 · 0 评论 -
GCC编译器原理 1.4------GCC 工具:nlmconv、nm、objcopy、objdump和 ranlib
1.3.13 nlmconvnlmconv 将可重定位的对象文件(Infile)转换为 NetWare 可加载模块(outfile),并可选择读取头文件信息获取 NLM 头信息。选项,描述 -I bfdname --input-target=bfdname 指定源文件得格式为 bfdname -O bfdname ...转载 2019-04-25 17:38:58 · 712 阅读 · 0 评论 -
GCC编译器原理 1.3------GCC 工具:gprof、ld、libbfd、libiberty 和libopcodes
1.3.7 gprof:性能分析工具参考文档:https://www.cnblogs.com/andashu/p/6378000.htmlgprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解决。通过分析应用程序运行时产生的 "flat profile...转载 2019-04-25 17:38:09 · 1449 阅读 · 0 评论 -
GCC编译器原理 1.2------GCC 工具:addr2line、ar、as、c++filt和elfedit
1.3 GCC 工具1.3.1 binutils 工具集 工具 描述 addr2line 给出一个可执行文件的内部地址,addr2line使用文件中的调试信息将地址翻译成源代码文件名和行号。 ar 这是一个程序,可通过从文档中增加、删除和析取文件来维护库文件。通常使用该工具是为...转载 2019-04-25 17:37:03 · 800 阅读 · 0 评论 -
GCC编译器原理1.1 ------交叉编译器制作和GCC组件及命令
1.1 交叉编译器制作默认安装的 GCC 编译系统所产生的代码适用于本机,即运行 GCC 的机器,但也可将 GCC 安装成能够生成其他的机器代码。安装一些必须的模块,就可产生多种目标机器代码,而且可通过命令行选择一种希望使用的代码。1.1.1 目标机从网站 http://gcc.gnu.org/install/specific.html 可以得到有可能的最新目标机列表。在此站点中可找到...转载 2019-04-25 17:35:47 · 788 阅读 · 0 评论 -
gcc,一个神奇的编译器
gcc是“GNU Compiler Collection”的缩写,从字面意思可以知道它是一个编译器集。gcc不止可以编译器c语言,还能用于c++,java,object-C等语言程序。但是在这里,我们的嵌入式学习中,目前只去关注gcc在C语言方面的编译功能。.什么是交叉编译器 在嵌入式系统开发中,经常用到与交叉编译相关的术语,例如:交叉编译器,交叉连接器,交叉编译环境等。 嵌...转载 2019-04-25 17:32:52 · 26784 阅读 · 0 评论 -
GCC编译器原理 3.5------编译原理三:编译过程(3)---编译之汇编以及静态链接【2】
4.1.2 符号解析与重定位(1)重定位在完成空间和地址的分配步骤之后,链接器就进入了符号解析和重定位的步骤,这是静态链接的核心部分。先看看 a.o 的反汇编文件: objdump -d a.o:程序代码里面都是使用的虚地址,main 起始地址为 0 ,这是因为在未进行空间分配之前,目标文件代码段中的起始地址以 0x00000000 开始,等到空间分配完成之后,各个函数才会确定...转载 2019-04-26 20:48:25 · 539 阅读 · 0 评论 -
GCC编译器原理 3.4------编译原理三:编译过程(3)---编译之汇编以及静态链接【1】
三、汇编编译过程就是生成汇编代码的过程,在编译过程中,也会调用汇编器 as,将源代码生成汇编代码。比如,执行 gcc -S hello.c -o hello.s此时已经生成了汇编代码。汇编的过程就是将 hello.s 生成目标文件。汇编器是将汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。汇编器的汇编过程相对于编译器来讲比较简单,只是根据汇编指令和机器指令的...转载 2019-04-26 20:47:29 · 559 阅读 · 0 评论 -
GCC编译器原理 3.3------编译原理三:编译过程(2-2)---编译之语法分析
2.2 语法分析语法分析器(Grammar Parser)将对由扫描器产生的记号进行语法分析,从而产生语法树(Syntax Tree)。整个分析过程采用了上下文无关语法(Context-free Grammar)的分析手段。由语法分析器生成的语法树就是以表达式(Expression)为节点的树。如下所示:从图中可以知道,整个语句就是一个赋值表达式:赋值表达式的左边是一个数组表达式,...转载 2019-04-26 20:46:32 · 1083 阅读 · 0 评论 -
GCC编译器原理 3.2------编译原理三:编译过程(2-1)---编译之词法分析
二、编译引用文档:https://blog.youkuaiyun.com/chdhust/article/details/9040647编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件,这个过程是整个程序构建的核心部分,也是最复杂的部分之一。现在版本的 GCC 把预编译和编译两个步骤合并成一个步骤,使用 cc1 的程序来完成这两个步骤。编译过程一...转载 2019-04-26 20:45:43 · 922 阅读 · 0 评论 -
GCC编译器原理 3.1------编译原理三:编译过程---预处理
Gcc的编译流程分为了四个步骤: 预处理,生成预编译文件(.文件):gcc –E hello.c –o hello.i 编译,生成汇编代码(.s文件):gcc –S hello.i –o hello.s 汇编,生成目标文件(.o文件):gcc –c hello.s –o hello.o 链接,生成可执行文件:gcc hello.o –o hello 一、预处理预编译程序...转载 2019-04-26 20:44:37 · 664 阅读 · 0 评论