hashmap的复杂度分析
看下msvc下实现的std::unordered_map, 写的有点复杂,但是思路很简单 针对key type,计算他的hash值,拿到index 计算元素在hash桶中的索引,如果超出了范围要缩小const size_type _Bucket = _Hashval & _Mask; 拿到了hashtable的index,数组每个点存的是一个链表,新插入的点都是头插法...
看下msvc下实现的std::unordered_map, 写的有点复杂,但是思路很简单 针对key type,计算他的hash值,拿到index 计算元素在hash桶中的索引,如果超出了范围要缩小const size_type _Bucket = _Hashval & _Mask; 拿到了hashtable的index,数组每个点存的是一个链表,新插入的点都是头插法...
主要是针对old-new-thing-Constructing nodes of a hand-made linked list, how hard can it be? 最简单的就是 struct node { node* prev; node* next; }; 更进一步的思考就是天然让他做一个环形链表 struct node { node* prev ...
彻底理解 C++ ABI noexcept Can (Sometimes) Help (or Hurt) Performance Temporarily dropping a lock: The anti-lock pattern What’s so hard about class types as non-type template parameters? Refl...
In every simple assignment expression E1 = E2 and every compound assignment expression E1 @= E2, every value computation and side effect of E2 is sequenced before every value computation and side e...
pfctl 是用于控制 OpenBSD 或 FreeBSD 上的 Packet Filter (PF) 防火墙的命令行工具。以下是 pfctl 的一些常见用法: 加载规则集: pfctl -f /etc/pf.conf 这会从指定的配置文件加载防火墙规则。 启用 PF: pfctl -e 禁用 PF: pfctl...
leveldb的file io中,有些io是要同步磁盘的,这里集中看一下。 传统的UNIX实现的内核中都设置有缓冲区或者页面高速缓存,大多数磁盘IO都是通过缓冲写的。 当你想将数据write进文件时,内核通常会将该数据复制到其中一个缓冲区中,如果该缓冲没被写满的话,内核就不会把它放入到输出队列中。 当这个缓冲区被写满或者内核想重用这个缓冲区时,才会将其排到输出队列中。等它到达等待队列首...
目前碰到了好几种可能在代码里导致一直循环刷日志的情况,简单总结下。 目前看下来 尽量不要把observer callback里的方法写的太复杂。 检查timer的销毁时机,尽量用one shot timer 不要在构造函数里做太多事情,就构造内存就好,真要做事情,用init函数 1. 0ms的repeat timer 第一种就不要例子了,0ms的repeat time...
c++标准库算法库中几个有用的函数 序列恒定操作 batch operation for_each, 主要针对容器的begin, end做一个func的操作。返回值会被ignore, 比较适合对整个容器的每个值做操作,要注意的是不能对容器做缩容 template< class InputIt, class UnaryFunc > UnaryFunc for_each( I...
C++中的”Rule of 5”(五法则)是一个重要的面向对象编程概念,它扩展了早期的”Rule of 3”(三法则)。这个规则指出,如果一个类需要自定义以下五个特殊成员函数中的任何一个,那么通常应该考虑自定义所有五个: 析构函数(Destructor) 拷贝构造函数(Copy Constructor) 拷贝赋值运算符(Copy Assignment Operator) ...
全局符号介入是一种机制,允许一个符号(通常是一个函数)被另一个同名符号替换或覆盖。这通常发生在动态链接过程中。 /* # ALLOCATED CHUNKS # +---------------------------+ # | METADATA | # |---------------------------| <-- Pointer retur...