<aside> 📖 Freestanding 环境下也可以使用的定义
stddef.h
- size_t
stdint.h
- int32_t
, uint64_t
intptr_t
保存指针stdbool.h
- bool
, true, falsefloat.h
limits.h
stdarg.h
inttypes.h
读读 man exec
</aside>
string.h
: 字符串/数组操作
标准库只对 “标准库内部数据” 的线程安全性负责****
<aside> 📖 File Desciptor
FILE * 背后其实是一个文件描述符
我们可以用 gdb 查看具体的 FILE * (例如 stdout)
可以 “窥探” 到 glibc 的一些内部实现
可以加载 glibc 的 debug symbols
封装了文件描述符上的系统调用 (fseek, fgetpos, ftell, feof, ...)
</aside>
<aside> 📖 popen 和 pclose
一个设计有缺陷的 API
Since a pipe is by definition unidirectional, the type argument may specify only reading or writing, not both; the resulting stream is correspondingly read-only or write-only.
</aside>
err, error, perror
environ 被glibc init赋值
<aside> 📖 脱离 workload 做优化就是耍流氓
在开始考虑性能之前,理解你需要考虑什么样的性能
</aside>
<aside> 📖 指导思想
$O(n)$ 大小的对象分配后至少有 $\Omega (n)$ 的读写操作,否则就是 performance bug (不应该分配那么多)
<aside> 📖 设置两套系统
fast path
slow path
计算机系统里有很多这样的例子 (比如 cache)
小内存:Segregated List
大内存:一把大锁保平安