[WebKit]C++类的数据结构及在反汇编上的应用

在反汇编常常要在无法使用调试信息和源代码的情况下查看数据内容,数据结构比较好处理,如果是C++的类,就需要做些总结了。 基础 - POD? C++的成员变量的排列顺序关键在于区别是不是POD(Plain Old Data)类型,从而确定是否需要有VPTR。POD类型会保持和struct相同的数据排列顺序,但在类的定义中不能出现虚函数、析构函数及拷贝的赋值函数等,否则编译器会增加一个Vi...
阅读(3722) 评论(1)

《再造卓越》之于人

很高兴拿到了这本《再造卓越》,内容确实发人深省。虽然这本是通过探讨卓越企业的没落来检讨出再造卓越之道,不过我的理解更加侧重在对于“人”的警示作用。 作者吉姆.柯林斯将企业衰落分为五个阶段:   一.狂妄自大   二.盲目扩张   三.漠视危机   四.寻找救命稻草   五.被人遗忘或濒临灭亡  作者也同样给出解决之道:坚持朴素的信念,坚持到底,永不放弃。...
阅读(2063) 评论(1)

[WebKit] JavaScriptCore解析--高级篇(三) Register Allocation & Trampoline

Register Allocation 对于一个JIT而言,寄存器分配对系统的消耗通常是一个瓶径。之前有Graph Coloring Allocators, Chaitin style等分配方式,现在要介绍的是DFG JIT使用的Linear Scan算法。其基本工作方式是将占用寄存器的变量根据生命周期长短排列出来,在使用时查看可以回收哪些寄存器加以利用。 先看一些定义: •Live...
阅读(4232) 评论(2)

基本垃圾回收算法

原文地址:ITeye 基本垃圾回收算法 可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。   标记-清除(Mark-Sweep):...
阅读(1393) 评论(0)

[WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)

在编译器优化领域,数据结构的选择会直接影响程序优化的有效性。SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Control Dependence Graph一起被用来表示程序的数据流和控制流。 大家都知道编译器是这样工作的:解析、优化,最后生成代码。中间会使用到一个中间语言的进行过度,好的中间语言一定要...
阅读(4196) 评论(0)

[WebKit] JavaScriptCore解析--高级篇(二) 类型推导(Type Inference)

类型推导是DFG JIT最重要的一个基础,WebKit官网对此做了一点解释,翻译如下做为学习参考。 Type inference通过profiling values来做到的,先是预测对哪些类型操作进行分析,再添加类型检查,最后基于类型检查的结果建立类型统计数据。 用下面的例子来说明这个过程: o.x * o.x + o.y * o.y 其中o是一个对象,x和...
阅读(3256) 评论(0)

Safari插件机制研究(二) 插件的视图管理

Note:首先相对于WebKit官网的代码,iOS上的版本使用WAKView代替了NSView。 比如Mac OS中将PlatformWidget定义为 NSView*, 而在iOS中则是WAKView *. 详细的内容可以参考Hursing的博客。 Overview 观察一份含有视频的页面的视图结构: Hierarchy of UIWebView    |    |...
阅读(2899) 评论(0)

面向对象其实不需要封装

Note: 这里的‘封装(Encapsulation)’指的是限制对象访问的语言特性,也被称为信息隐藏(information hiding)。翻译的初衷在于看看一些不同的想法,作者的思考在某个层次上是有道理的,但并是完全正确。总之这里有一个决策和角度的问题。  没有封装的OOP? Python支持Object Oriented Programming, 却没有封装(encapsula...
阅读(2206) 评论(0)

Safari插件机制研究(一)

Overview 在Safari里有一个单例对象WebPluginDatabase负责管理本地的插件,每个plugin对应一个WebBasePluginPackage,存放在plugins里。 在第一次调用sharedDatabase()会遍历当前系统有哪些可用的插件,并加到列表中管理。每个插件有其支持的MIME types和文件扩展名(Extension),在加载完成后,还会向Web...
阅读(4888) 评论(0)

浏览器多用户共享操作的思考

可惜这个想法已经被一家做电子阅读的公司申请专利了,就算做了一次关于产品的思考吧!欢迎一起讨论浏览器的社交化方向! 基本架构       两台运行指定浏览器的设备可以通过三种方式进行交互:   1. 在相同WiFi网络内使用TCP/UDP连接。   2.与适配过的设备通过蓝牙协议连接。   3.使用账号或当前地理信息利用远端服务器与指定的用户或附件的人连接。...
阅读(2511) 评论(1)

[WebKit] JavaScriptCore解析--基础篇(四) 页面解析与JavaScript元素的执行

很多地方都已经介绍了JavaScript在浏览器是如何被执行的,这里介绍一下WebKit是如何实现的。主要涉及JS的async,defer及普通脚本的解析与执行过程的代码实现。 1. 概要说明 先概要说明一下浏览器如何执行JavaScript的。 首先浏览器的页面解析器(Document Parser)遇到就会发起下载(脚本内容在页面内的就不用下载了)。然后针对不同情况执行的方式有所不...
阅读(12162) 评论(0)
    个人资料
    • 访问:1524015次
    • 积分:16767
    • 等级:
    • 排名:第617名
    • 原创:221篇
    • 转载:30篇
    • 译文:47篇
    • 评论:362条
    微博/MSN/EMail

    新浪微博:Horky
    QQ:324014340
    Mail:horky.chen@gmail.com
    微信公众号 (聚焦软件开发):
    博客专栏
    最新评论