本文讨论了SQLite虚拟机(VM)是如何解释执行了一个通过SQLite内部的字节码语言编写的程序。VM是存储在本地数据库文件中数据唯一的操作者。它支持5种原始的数据类型:NULL,integer,real,character string,blob,这五种数据类型代表了在文件或者内存中存储的原始的数据项。由VM来完成用户数据和内部数据表示之间的转换。在做表达式评估的时候它也会做一些数据类型转换。VM是如何工作的,以及它在存储表和索引记录到B-,B+树之前,如何做数据格式化。
SQLite引擎
source: inside-sqlite
SQLite--OS
自底向上看sqlite的时候发现自己欠缺和遗忘了好多知识(尤其是操作系统)。如果能把这个sqlite的系列都写完的话,在操作系统上,尤其是文件和内存管理上能有不少的知识复习和提升 :)。
解析GoMobile生成的"胶水代码"
标题要唬人…在做Golang跨平台的时候,使用gomobile bind -target=ios xxx 就可以生成对应平台的framework。
本文讨论的内容是Golang是如何实现了OC和Go的数据通讯与接口调用,以及如何做到让开发者无感知的从OC对象的引用计数切换到Golang的垃圾回收机制。
其实Go的语言层面的通讯实际上是由bind生成的中间层的代码来实现的,什么是中间层的代码?我们简单做实验…
SQLite--OS【共享内存】
在开启sqlite wal功能的时候,会在db文件的同级目录下多出一个,与db同名的,后缀为-shm的文件,这个文件就是本文需要讨论的shared-memory(shm)。文章只讨论sqlite在os层中shm的实现,而不关注shm中存储的内容和数据结构。
当编译优化遇上AutoRelease优化
最近在复习自动释放池,在ARC下runtime有一个优化objc_autoreleaseReturnValue和objc_retainAutoreleaseReturnValue,但是优化遇上编译器优化,似乎有点问题…不知道算不算苹果自己给自己挖的坑。
详解 dyld 加载过程
超长预警…….
本文将会从dyld接管进程开始,超级详细的分析/解释,dyld 是如何把若干个动态库“组装”在一起,在ASLR的影响下形成一个完整的可执行进程,以及objc的runtime如何在dyld的初始化过程中进行实例化。
RunLoop中"奇怪"的二分查找
在RunLoop的Timer管理中,需要对每定时器进行有序管理——按照时间先后排序。这个必然会带来一个查找和排序。在RunLoop 中使用的是二分查找法,但是这个二分查找与平时的二分查找不太一样。
leetcode -- 周赛双周赛
全排列II -- LeetCode[37]
【Medium】给定一个可包含重复数字的序列,返回所有不重复的全排列。