这是stl源码阅读系列的第三篇,这一篇来看看stl中对象的构造与析构是如何处理的。
STL源码阅读(二): 泛型编程,iterator traits与iterator
发表于
分类于
stl
这是stl源码阅读系列的第二篇,这一篇来看看stl中迭代器traits的实现。
在stl中,有三个彼此关联的组件:
Containers(即我们常用的vector, list, deque等)装载数据结构,Algorithms装载数据操作,两者相互独立,Iterator作为中间人,将两者联系起来。iterator提供访问容器数据成员的接口,隐藏了每个容器的具体存储实现(即迭代器设计模式)。每个容量都会提供一份iterator实现,所以在分析容器前,先看看iterator。
另外,整个stl可以看做泛型编程的最佳实践,所以在本篇中也会介绍一些泛型(模板)编程的概念。
STL源码阅读(一): 内存分配器
发表于
分类于
stl
接近一年未更新博文,忙着适应工作环境,当然自己也变懒了不少。感觉还是得多抽时间充实自己,本文开始分析stl源码。
本系列分析的stl 版本为 sgi v3.3。
首先分析内存分配器,因为容器需要依赖内存分配器来实现。如最常用容器的定义:
1 | // alloc 是 SGI STL 的空间配置器 |
这里的 __STL_DEFAULT_ALLOCATOR
定义为:
1 | # ifndef __STL_DEFAULT_ALLOCATOR |
allocator
内部实现也为 alloc
, 所以本文分析的对象为 alloc
。
关于 alloc
的实现,文件目录为 allocator/stl_alloc.h
关于alloc
的定义有两种:(通过宏来开关是哪一种):
- 第一级配置器:
1 | typedef __malloc_alloc_template<0> malloc_alloc; |
此时实际类为 __malloc_alloc_template
- 第二级配置器:
1 | typedef __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0> alloc; // 令 alloc 为第二级配置器 |
此时实际类为 : __default_alloc_template
MIT6.S081-lab-network
发表于
分类于
MIT-6.S081
MIT6.S081-lab-mmap
发表于
分类于
MIT-6.S081
MIT6.S081-lab-fs
发表于
分类于
MIT-6.S081
MIT6.S081-lab-lock
发表于
分类于
MIT-6.S081
MIT6.S081-lab-thread
发表于
分类于
MIT-6.S081
MIT6.S081-中断-uart驱动阅读笔记
发表于
分类于
MIT-6.S081
听完MIT6.S081的中断课,感觉仍不是很理解,本文摘抄自这篇文章,做些整理写给自己,部分内容可能有错,看原文会更好。
MIT6.S081-copy-on-write
发表于
分类于
MIT-6.S081