随笔分类 -  编译器

摘要:C++11 的 Inheriting constructors 特性在 GCC 4.8 以前的版本及 VS2013 中都没有支持,测试起来比较麻烦,所以搜集到了几个支持 GCC 4.8 及更高版本的在线编译器。 http://ideone.com/ http://coliru.stacked-cro 阅读全文
posted @ 2019-11-21 18:13 zzfx 阅读(2684) 评论(0) 推荐(0) 编辑
摘要:编译器一次编译,特定平台直接可执行; 解释器一次开发,所有平台每次执行都需要对源码逐行解释。 虚拟机将源码转化为虚拟机指令,虚拟机指令的执行调用cpu执行。 阅读全文
posted @ 2019-05-31 14:39 zzfx 阅读(493) 评论(0) 推荐(0) 编辑
摘要:意义明确的东西不需要解释;只有抽象和含糊的东西才需要解释。 一、解释的含义 语言的灵活性:动态、多态 是对由语言的灵活性产生的(抽象类型、动态类型)多样性和不确定性的的解释; 只有对这些多态、动态做出合理的解释才能有正确的行为; 这种解释更多是多态和动态函数调用的解释机制: id objc_msgS 阅读全文
posted @ 2019-05-31 14:25 zzfx 阅读(269) 评论(0) 推荐(0) 编辑
摘要:鉴于目前动态库在iOS App中使用越来越广泛,二进制的兼容问题可能会成为一个令人头疼的问题。本文主要对比一下C++、Java、Objecive-C和Swift的二进制兼容问题。 iOS端动态库使用情况 测试环境 C++、Java、OC和Swift分别实现Foo这个基类,然后再实现Bar这个子类,m 阅读全文
posted @ 2019-01-16 15:25 zzfx 阅读(371) 评论(0) 推荐(0) 编辑
摘要:1. 什么是二进制兼容 所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏 2. 二进制不兼容会造成什么后果 如果库A升级没有能够做到二进制兼容,那么所有依赖它的程序(或库)都需要重新编译,否则会 阅读全文
posted @ 2019-01-16 12:37 zzfx 阅读(375) 评论(0) 推荐(0) 编辑
摘要:bogon:ccbmobilebank zzf073$ make package > Making all for tweak CCBMobileBank… make[2]: Nothing to be done for `internal-library-compile'. > Making st 阅读全文
posted @ 2018-07-06 15:52 zzfx 阅读(212) 评论(0) 推荐(0) 编辑
摘要:编译器最重要的工作就是确定对象内存模型 阅读全文
posted @ 2018-06-15 15:06 zzfx 阅读(185) 评论(0) 推荐(0) 编辑
摘要:只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数。 在创建类的对象之前,必须完整地定义该类。必须定义,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的, 阅读全文
posted @ 2018-03-29 18:59 zzfx 阅读(670) 评论(0) 推荐(0) 编辑
摘要:让我们总结一下:编译器把一个cpp编译为目标文件的时候,除了要在目标文件里写入cpp里包含的数据和代码,还要至少提供3个表:未解决符号表,导出符号表和地址重定向表。 未解决符号表提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其出现的地址。 导出符号表提供了本编译单元具有定义,并且愿意 阅读全文
posted @ 2018-01-11 18:50 zzfx 阅读(527) 评论(0) 推荐(0) 编辑
摘要:编译器生产组件; 链接器将这些组件拼装到一起。 阅读全文
posted @ 2018-01-10 20:09 zzfx 阅读(224) 评论(0) 推荐(0) 编辑
摘要:通过分析下面这个最熟悉的可执行文件,来好好总结和了解下Mach-O这种文件格式,并且也总结下系统在执行可执行文件几个过程: + 解析文件 + 依赖建立 + 初始化运行环境 + 执行进程 http://blog.csdn.net/bjtufang/article/details/50628310 阅读全文
posted @ 2018-01-10 18:00 zzfx 阅读(263) 评论(0) 推荐(0) 编辑
摘要:理论上完美的可执行文件可以不包含任何符号; 之所以有的可执行文件包含符号,是为了支持语言的运行时特点;比如c++和oc; 更进一步,理论上只包含函数符号和地址的对应关系即可,比如c++; 但是对于oc语言,变量是作为运行时结构的一部分存在的,所以变量符号在可执行文件中也存在。 阅读全文
posted @ 2017-12-07 10:44 zzfx 阅读(1271) 评论(0) 推荐(0) 编辑
摘要:Symbols have always presented a conundrum for developers: You want to remove all symbols from your program because this makes the code smaller, and po 阅读全文
posted @ 2017-12-05 11:36 zzfx 阅读(171) 评论(0) 推荐(0) 编辑
摘要:调试器工作原理(3):调试信息 本文是调试器工作原理探究系列的第三篇,在阅读前请先确保已经读过本系列的第一和第二篇。 本篇主要内容 在本文中我将向大家解释关于调试器是如何在机器码中寻找C函数以及变量的,以及调试器使用了何种数据能够在C源代码的行号和机器码中来回映射。 调试信息 现代的编译器在转换高级 阅读全文
posted @ 2017-12-04 11:58 zzfx 阅读(2270) 评论(0) 推荐(0) 编辑
摘要:符号表将标识符和其类型、位置关联起来,当我们去处理变量,函数的声明时,就是将这些信息组织(绑定)起来,放在表里,当需 要知道这些函数,变量的意义时,就去这个表里查。 重定位。链接器把每个符号定义与一个虚拟地址联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储位置,从而重定位这些节。 一般来 阅读全文
posted @ 2017-11-23 16:42 zzfx 阅读(1045) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/aigoogle/article/details/45076617 在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。在词法分析及语法在分析过程中不断积累和更新表中的信息,并在词法分析到代码生成的各阶段, 阅读全文
posted @ 2017-11-22 16:09 zzfx 阅读(3847) 评论(0) 推荐(0) 编辑
摘要:为什么使用连接器 阅读全文
posted @ 2017-07-07 17:14 zzfx 阅读(163) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/xingkong_678/article/details/38639847 关于两者以前的关系,要从N年以前说起了~ long long ago,once aupon a time ....... 那是一个被 遗忘的年代,在编译器只认识.c(.cpp))文件 阅读全文
posted @ 2017-07-07 17:09 zzfx 阅读(947) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h 阅读全文
posted @ 2017-07-07 16:47 zzfx 阅读(484) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/kunhu/p/3629636.html 原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的 阅读全文
posted @ 2017-07-07 15:55 zzfx 阅读(327) 评论(0) 推荐(0) 编辑