自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lusing的专栏

Android爱好者,C++爱好者,汇编爱好者,数学爱好者

  • 博客(286)
  • 收藏
  • 关注

原创 v8世界探险(3) - v8的抽象语法树结构

v8的抽象语法树结构

2016-11-12 16:55:02 1642

原创 v8世界探险(2) - 词法和语法分析

上节我们学习了API的概况,这节开始我们就循着API来分析实现。 对于解释器或者编译器来说,我们第一个感兴趣的当然是编译的过程。

2016-11-09 21:09:07 2020

原创 V8世界探险 (1) - v8 API概览

V8世界探险 (1) - v8 API概览v8是Google开发的JavaScript引擎,自推出后就对js生态产生了巨大的影响。比如产生了运行在服务端的Node.js的巨大生态。这么好玩的东西,我们当然要冲起去看看它的内部是如何实现的了。Hello,v8 World!首先好玩的一点是,v8可以作为一个库来嵌入到其它的应用中。我们废话不多说,直接上代码.这是Google官方的调用在代码中嵌入一个v8

2016-11-04 14:58:56 3737 2

原创 Rust语言教程(1) - 一门没有GC的语言

Rust语言是一门没有GC的语言,那么,它是如何管理内存的呢?

2016-10-31 00:41:24 9149

原创 Android M应用启动流程分析

Android M应用启动流程分析

2016-10-29 17:33:48 2808 1

原创 Android Studio直接运行影响启动性能

eclipse时代,测试空应用启动性能时,都是直接在IDE中启动,这样修改起来方便。 到了Android Studio时代,这个习惯被我保持下来了。 结果就被Instant Run功能给小小坑了一下。

2016-10-28 23:18:08 885

原创 C++11时代的标准库快餐教程(4) - 排序算法的应用

二分法是针对一个排序后的容器的用法,如果是多个有序容器,我们就可以快速地在其基础上进行集合的求子集,交集,并集与差集等运算。

2016-10-22 19:17:34 1279

原创 C++11时代的标准库快餐教程(3) - 排序

讲完容器之后,我们迅速进入到算法部分。

2016-10-21 22:09:01 1120

原创 C++11时代的标准库快餐教程(2) - STL概览

第二讲我们迅速地为STL画一张大图,把13种基本容器的简单用法,迭代器和算法的概念快速地过一下。有兴趣的同学就可以对照着手册去使用它们了。当然,细节问题还很多,我们还要花不小的篇幅的讲各种细节。

2016-10-12 21:51:17 681

原创 C++11时代的标准库快餐教程(1) - 不同类型值组成的简单列表

std::pair是C++98就有的功能,std::tuple是TR1新增的。C++11的两个特性为pair和tuple带来很大帮助,一个是auto的类型推断可以帮助我们少写代码,二是C++11支持变参数的模板,使得理论上可以支持任意多个数量的参数。tuple来自boost库,但是没有C++11支持的boost::tuple和TR1的std::tuple支持的参数个数是受限的。

2016-10-10 19:37:17 967

原创 ART世界探险(19) - 优化编译器的编译流程

前面,我们对于快速编译器的知识有了一点了解,对于CompilerDriver,MIRGraph等都有了初步的印象。 下面,我们回头看一下优化编译器的编译过程。

2016-09-21 11:12:46 2153

原创 mac党如何解析bootchart

关于bootchart,网上已经有很丰富的文章介绍了。但是,这些文章都是讲在Linux下如何使用。 做为开发Android的mac用户,还要使用Linux机器做中转,实在是太麻烦了。尤其是Ubuntu 12.04上默认的bootchart工具还有问题,需要更新python脚本。事实可以更简单,我们直接在mac上build一个bootchart工具就好了么。

2016-09-20 16:39:47 976

原创 ART世界探险(18) InlineMethod

下面我们正式开始分析InlineMethod将Dalvik字节码转成MIRGraph的过程

2016-09-12 21:08:18 1462

原创 ART世界探险(17) - 中层中间代码MIR

中层中间代码MIR

2016-09-12 18:17:40 1512

原创 C++11快餐教程(1)-通过using定义类型的别名

通过using定义类型的别名

2016-09-12 15:29:05 6176 2

原创 ART世界探险(16) - 快速编译器下的方法编译

QuickCompiler下的Compile函数的主要流程

2016-09-07 21:02:32 1462

原创 ART世界探险(15) - CompilerDriver,ClassLinker,Runtime三大组件

CompilerDriver,ClassLinker,Runtime三大组件

2016-09-06 20:29:36 2321

原创 ART世界探险(14) - 快速编译器和优化编译器

ART的编译器为两种,一种是QuickCompiler,快速编译器;另一种是OptimizingCompiler,优化编译器。

2016-09-06 13:41:38 1536

原创 ART世界探险(13) - 初入dex2oat

对于大多数人来讲,dex2oat一直是个黑盒子。那么,这个盒子中到底是些什么东西呢,我们有了前面的java,指令集,还有一点点的编译原理的知识储备,终于可以打个开看个究竟了。

2016-09-05 13:33:35 5320 2

原创 基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了

跟学院派的厚书给大家的印象不同,其实用LLVM写个简单的编译器是件容易的事情,因为大部分事情LLVM都替我们做了。

2016-09-02 19:28:51 10683 1

原创 Android应用生死轮回的那些事儿(7) - PackageManager的不公开API

前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢? 答案是,还有未公开的内部API啊。

2016-08-17 19:59:16 2318

原创 Android应用生死轮回的那些事儿(6) - 武器库完结篇

PackageManager武器库的完结篇,让我们梳理一下从Android 1.0到Android 7.0的发展过程吧。

2016-08-17 12:13:29 2500

原创 Android应用生死轮回的那些事儿(5) - 武器库(3)- Installer相关工具

Install相关的API,在Android 1.0时一个也没有。全是后续陆续增加进来的。 我们发现,除了4.2的是补充4.0的以外,基本上全是逢大版本才有更新:2.0,3.0,4.0,5.0都有更新。

2016-08-16 18:33:28 2234

原创 Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API

这一节我们将学习:如何查询系统中安装了哪些应用如何获取一个包的信息如何获取一个Application的信息如何获取系统中安装的所有的ContentProvider的信息如何获取一个uid中运行的所有的包如何查询一个uid的进程名如何通过一个广播Intent查询接受这个广播所有的BroadcastRece

2016-08-15 15:04:31 3285 1

原创 Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API

APIPackageManager中提供的武器,可以用“既多又杂,版本变化大”来形容。 不过,我们通过分类和排序的方法将它们组织起来,让开发者同学们可以学会使用这些强大的武器!这一节我们将学习: * 如何查询系统中都有哪些权限组 * 每个权限组都有些什么权限 * 如何查询是否被授予某一权限 * 如何查询都有哪些应用申请了某一项权限

2016-08-11 17:58:48 2407

原创 Android应用生死轮回的那些事儿(2) - PackageManager

PackageManager, ApplicationPackageManager和PackageManagerService的关系

2016-08-10 21:16:10 2308

原创 Android应用生死轮回的那些事儿(1) - installd初探

前面我们讨论过dex2oat的过程,下面我们开始探索系统中的重要工具进程,installd守护进程。我们有PackageManageService这么大的组件了,为什么还需要installd这个守护进程呢? 一句话,是因为权限的问题,PMS只有system权限。installd的作用就是处理需要root权限的操作。

2016-08-09 21:47:15 2213

原创 ART世界探险(12) - OAT文件分析(2) - ELF文件头分析(中)

ELF中的section和segment

2016-08-04 20:17:30 1845

原创 ART世界探险(11) - OAT文件格式分析

既然是要探险,咱们就保持一定的深度,起码将来可以做个基于ART的黑客之类的。 所以我们针对细节多下一些工夫,先仔细分析一下OAT文件的格式。

2016-08-03 18:23:25 2508

原创 用Go写Android程序(3) - Go语言速成

下面我们将Go与C/C++/Java的一些比较不同的地方提炼一下,让大家可以快速上手。然后在实践中继续学习。

2016-07-30 18:40:25 3005

原创 ART世界探险(10) - 异常处理

对于编译Java的话,有一个问题不能不考虑,就是异常处理的问题。异常处理是基于Java的语句块的,翻译成本地代码的话,需要针对这些指令的地址进行一下重排。 我们来看下ART是如何实现异常处理的。

2016-07-28 18:20:33 1878 3

原创 ART世界探险(9) - 同步锁

Java是一种把同步锁写进语言和指令集的语言。 从语言层面,Java提供了synchronized关键字。 从指令集层面,Java提供了monitorenter和monitorexit两条指令。下面我们就看看它们是如何实现的吧。

2016-07-26 21:48:42 1169

原创 ART世界探险(8) - 面向对象编程

Java字节码是支持面向对象编程的,比如new和instanceof都是一条指令。它们被编成OAT之后变成了什么样子呢?另外,从这章开始,我们开始跟ART的源代码结合了

2016-07-26 17:01:47 1714

原创 ART世界探险(7) - 数组

Java中有专门处理数组相关的指令,并且有对越界检查等操作。这样,OAT编译出来的数组相关的代码,与本地C++写出的类似代码之间,就有了很大的不同。

2016-07-25 21:13:05 1321

原创 ART世界探险(6) - 流程控制指令

java, arm, mips, x86处理分支和循环的指令

2016-07-25 02:36:27 3794

原创 ART世界探险(5) - 计算指令

我们分析一下ARM, ARM v7a, ARM64 v8a, x86, x86_64, mips, mips64和Java字节码的整数和浮点运算。

2016-07-24 22:19:18 2858

原创 ART世界探险(4) - 数据传送指令和桶型移位器

指令系统的第一讲,我们将学习桶形移位器,这是个可以在ALU运算前对第二个操作数进行操作的神奇器件。同时也学习MOV, MVN和几个可以单独使用的移位指令,以及他们对应的java指令

2016-07-22 20:43:17 2075

原创 ART世界探险(3) - ARM 64位CPU的架构快餐教程

前面我们说过,Dalvik如果没有JIT的话,可以做到架构无关,让Dalvik指令都解释执行。但是ART是AOT,要编译成针对芯片具体的机器指令。 所以,研究Dalvik的时候可以不用太关心目标指令,而我们研究ART必须对目前最流行的微处理器的架构有个基本的了解。

2016-07-22 16:48:46 3060

原创 ART世界探险(2) - 从java byte code说起

我们从简单指令开始,从java字节码,到dalvik字节码,到最前沿的Arm64 v8a指令集,一层一层构建ART的世界观〜

2016-07-21 21:46:10 2800

原创 ECMAScript中的真值和假值

ECMAScript中的真值和假值看了下很多书上和网上文章中介绍ECMAScript中的布尔值,都是干巴巴地一句话:如果值是null, undefined, 0, 空字符串和false,则值为false,其他值都是true.说得当然是没错,不过不利于初学的同学理解。 其实,借着学习真假值的时候,正好是可以将很多知识串在一起的时候。

2016-07-21 02:15:26 976

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除