浅析 shared_ptr:Boost 篇
序言请移步此处
MSVC STL 的分析版本请移步此处
Libstdc++ 的分析版本请移步此处
注:因为这不是第一篇分析,所以会直入主题,跳过文学写作常用的累赘的过渡。
目标版本选择
选用最新的 Boost 1.67 作为研究目标
在开始正题前,先简单看一下 shared_ptr
的类成员,方便后续分析:
1 | namespace detail { |
序言请移步此处
MSVC STL 的分析版本请移步此处
Libstdc++ 的分析版本请移步此处
注:因为这不是第一篇分析,所以会直入主题,跳过文学写作常用的累赘的过渡。
选用最新的 Boost 1.67 作为研究目标
在开始正题前,先简单看一下 shared_ptr
的类成员,方便后续分析:
1 | namespace detail { |
前几天在写一个 ThreadPool 的轮子的时候,碰到一个问题:无论我用什么办法,都不能将 std::packaged_task
传递到 std::function
中,编译器始终提示访问了 std::packaged_task
被删除的拷贝构造函数。
曾经为了能在 PostTask()
里使用 lambda,实现了一个自动将 non-capturing lambda decay 到对应函数指针,在利用 base::Bind()
的方案[1]。
使用 vcpkg 编译 libx264 有一个很重要的原因:可以获得 PDB,而且构建流程被大大精简了。
但是这里有一个坑:vcpkg 上的 libx264 模块编译默认是开启了 --disable-asm
,意味着构建之后的二进制不会使用 SIMD 指令集,所以性能上会有很大的问题。
Sorting, caching and concurrency
通过引入基于时间的 sliding window 来标记并剔除(大概率)由错误产生的数据;并且可以利用 SW 来 schedule 数据什么时候从内存持久化到磁盘。