一: 存储属性 非 lazy 型的属性,必须在自己的 init 完成之前,完成初始化。 1、直接赋值: let attr: Int = 1 2、用自执行的 closure 赋值 // 当初始化工作有多个属性要设置的时候,用 closure 更合适 let attr: Int = { let x = 1 + 2 return x }() // 上边等…
看过了很多多线程的文章,也写过很多多线程相关的博客;也知道了多线程在操作系统层面,是由中断、原语、信号量、互斥等底层原理实现;但真正遇到多线程问题时,还是不能很快的定位问题出在了哪里。 iOS GCD 的实践 在处理复杂且庞大的多线程项目时,我并不喜欢用 GCD,而更倾向于 NSOperation,原因有二: 1、GCD 的语法格式 (block)…
这是第二篇,第一篇解刨操作系统虚拟内存一已经详细的介绍了虚拟内存已经计算机内存管理的基本概念。本篇将重点结合XNU内核源码、部分dyld和cctools源码进行深入探测虚拟内存。为了结构清晰,我会尽量避免贴大段的源码,如果有需要可自行下载上述三个源码库,结合阅读。 问题 1: 虚拟内存与 Mach-O 文件的关系 ? 2: 虚拟内存是如何被构建出来…
从编程的角度看,虚拟内存可能是内存管理中最抽象、最重要的概念,但国内的教科书在内存管理相关章节,普遍对虚拟内存的知识一笔带过,相关的内容仅仅涉及到逻辑地址到物理地址的转换(事实上这部分属于 MMU),以及本地磁盘与内存的对换区(swap),该区域,在空闲内存达到门限值(threshold)时,用来与内存进行页面置换,但在 iOS 系统上没有该区域。…
在现代的计算机技术中,linking 其实非常重要,伴随该技术,产生了符号表、静态库、动态库等技术。在借助 Clang/汇编/Mach-O 进行C基本内存分析一文中,介绍了一个项目在生成二进制之前,大致可以概括为 3 个步骤,编译、汇编、链接。这一节对链接进行全面的分析。 为什么需要链接器 主要有两个目的,第一,代码可以模块化,即将多个源文件打包在…
内存管理和进程管理是操作系统的两大核心功能,二者密不可分,进程管理,除了做好 CPU 的调度,剩下的主要就是如何分配和管理进程内存。现代的操作系统主要还是基于请求分页(段)与虚拟内存进行内存分配和回收;而不管哪个操作系统,对内存都有基本的划分,例如 Text 段,Stack、Heap 等。但不同的编程语言与编译器会对内存做更细的划分,比如对 C 语…
作者:xiaobo 参考:https://martinfowler.com/articles/feature-toggles.html 什么是特性开关 定义:不改变代码,实现系统行为的修改。特性开关并不是什么新的技术,可能你已经使用过很多次了,例如 C 语言的预编译宏: 还比如,业务开发惯用的 A/B testing,其实都属于特性开关: 特性开关…
翻译:Xiaobo 原文链接: Understanding memory reordering 推荐:之前读《程序员的自我修养》一书中有关于多线程的讲解非常好;但最近读到这几篇文章对于多线程的讲解,个人认为比前者(书)更加的清晰、易懂、全面。每篇文章的内容安排也很合理,非常感谢作者TRIANGLES和他优秀的文章,这里是他的个人站点。 相关系列译文…
翻译:Xiaobo 原文链接: Lock-free multithreading with atomic operations 推荐:之前读《程序员的自我修养》一书中有关于多线程的讲解非常好;但最近读到这几篇文章对于多线程的讲解,个人认为比前者(书)更加的清晰、易懂、全面。每篇文章的内容安排也很合理,非常感谢作者TRIANGLES和他优秀的文章,这…