Home

从0到1构建计算机(1/12)--从与非门到俄罗斯方块

Mark!!! 开始学习课程:From Nand To Tetris 本课程将从0到1地构建一个计算机,自底向上地一步步实现各种基本逻辑门、ALU、寄存器、RAM、CPU;定义机器语言、汇编语言,实现汇编器;定义高级语言,实现编译器;实现一套最简单的操作系统;最后编写一个小游戏并把它运行在这个完全由自己构建的计算机之上。 现代计算机是非常复杂的,复杂性之一就在于计算机一层层的封装架...

iOS内存基础知识

操作系统的内存机制 冯·诺依曼结构 在冯·诺依曼结构中,存储器有着重要地位,它存放着程序的指令以及数据,在程序运行时,根据需要提供给 CPU 使用。可以想象,一个理想的存储器,应该是兼顾读写速度快、容量大、价格便宜等特点的,但是鱼和熊掌不可兼得,读写速度越快的存储器也更贵、容量更小。 但冯·诺依曼结构存在一个难以克服的问题,被称为冯·诺依曼瓶颈 —— 在目前的科技水平之下,CPU 与存...

iOS-runtime的数据结构

对象 & 类对象的关系 对象和类对象的整体关系图: 注:新版runtime中新增了rwe来优化rw 对象(objc_object) 1 2 3 4 5 struct objc_object { private: isa_t isa; ...... } 我们平时用的所有对象都是id类型的,在runtime中 id 就是 objc_object 结...

iOS-消息转发流程

realizeClassWithoutSwift realizeClassWithoutSwift是初始化类的核心方法,主要做了如下事情: 读取data数据,设置ro、rw 归调用realizeClassWithoutSwift完善类的继承链关系 调用methodizeClass,完善类信息(方法、分类的方法、属性列表、协议列表) 读取 data 数据,并设置 ro 、r...

iOS-类&分类的加载

realizeClassWithoutSwift realizeClassWithoutSwift是初始化类的核心方法,主要做了如下事情: 读取data数据,设置ro、rw 归调用realizeClassWithoutSwift完善类的继承链关系 调用methodizeClass,完善类信息(方法、分类的方法、属性列表、协议列表) 读取 data 数据,并设置 ro 、r...

iOS-objc_init

dyld & objc_init 前面我们分析到dyld负责加载App主二进制所依赖的动态库,并对APP、动态库做了一些链接和初始化工作。然后针对有初始化方法的动态库,dyld会调用它们的初始化方法,这里就包括runtime的初始化方法objc_init。这个过程如下图: _objc_init dyld_init是runtime的初始化方法,主要做了以下事情: 环境...

iOS-dyld

dyld 在 MacOS 和 iOS 上,可执行程序的启动依赖于 xnu 内核进程运作和动态链接加载器 dyld。dyld 全称 the dynamic link editor,即动态链接器,其本质是 Mach-O 文件,是专门用来加载动态库的库。 在 xnu 内核为程序启动做好准备后,执行由内核态切换到用户态,由 dyld 完成后面的加载工作:dyld 会将 App 依赖的动态库加载到...

对数据结构和算法的看法

对数据结构和算法的看法 Eric S·Raymond 在《大教堂和市集》说道: 聪明的数据结构和笨拙的代码要比聪明的代码搭配笨拙的数据结构工作得更好。 对这个描述深以为然。 以前我对数据结构和算法的作用还没有什么深切的感受,我想主要原因是一直在写上层应用,都是逻辑很简单的简单代码,复杂的底层实现都被大牛们用API给屏蔽掉了。但是当我开始阅读一些计算机底层源码的时候(例如操作系...

Mach-O结构分析

可执行文件 我们运行一个程序(进程)是把一些特殊文件在内存中加载并运行得到的结果。那么这类文件的格式必须是系统内核可以理解的,系统内核才能正确解析。这类文件被称为可执行的文件。 不同操作系统的可执行文件格式不同: 在现代通用计算机系统中,虽然不同平台的可执行文件的格式不完全一样,但是原理大体相同,基本都是基于段结构的,可执行文件的结构基本可以分为: header段:用于让操作系...

探究OC Runtime

Runtime理解 OC是基于C的,在C的基础上扩展出了面向对象的能力,支持其面向对象能力的核心就是OC的runtime机制。OC中我们编写的类,最终按照某种数据结构存储在可执行文件的__DATA段中,然后可执行文件被操作系统加载到进程空间,此时进程空间中就有了各个类和函数的信息。runtime是一个动态链接库,在程序执行过程中,我们通过runtime提供的各种能力,来访问、操作、读写各个...