摘要:
前言 上篇文章讲了 STL vector 泛化版本的实现,其采用普通指针作为迭代器,可以接受任何类型的元素。但如果用来存储 bool 类型的数据,可以实现功能,但每一个 bool 占一个字节(byte),而一个字节有 8 位(bit),这样就有点浪费了。所以 SGI STL 设计了一个特化版本的位向 阅读全文
摘要:
前言 vector 是最常用的 C++ 容器,其动态扩容的特性是普通数组不具备的,这大大增加了编程的灵活性。虽然平时用 vector 很多,也能基本理解其原理,但无法从深层次理解。直到研读了 vector 的源码,才能比较自信的说自己真正理解了 vector 的基本原理,正应了侯捷说的那句话:源码面 阅读全文
摘要:
前言 上一篇文章讲了 iterator_traits 的编程技法,非常棒适度弥补了 C++ 语言的不足。 STL 只对迭代器加以规范,制定了 iterator_traits 这样的东西。 CGI 把这种技法进一步扩大到迭代器以外的世界,于是有了 __type_traits。双划线前缀词意指只是 CG 阅读全文
摘要:
前言 这段时间研读SGI-STL-v2.91源码,并提炼核心代码自己实现一遍,感觉受益颇深。觉得有必要写一些文章记录下学习过程的思考,行文旨在总结,会大量参考侯捷《STL源码剖析》的内容。 迭代器概述 迭代器定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而无需暴露该聚合物的内 阅读全文
摘要:
简介 C++没有内存自动回收机制,对堆内存的管理就是简单的new和delete,每次new出来的内存都需要手动delete释放。但由于忘记、流程复杂或者异常退出等,都有可能导致没有执行delete释放内存,造成内存泄漏。 在实际工程中,我们往往希望将精力放在应用层上而不是费劲心思处理语言的细枝末节( 阅读全文
摘要:
前提 在对象拷贝过程中,如果没有自定义拷贝构造函数,编译器会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型的成员变量则调用其相应的拷贝构造函数。 资料注解 在《高质量的C C++编程》第9章有这样一段话如下,类似的描述在《C++ primer》和《eff 阅读全文
摘要:
前言 前段时间研读云风的coroutine库,为了加深印象,做个简单的笔记。不愧是大神,云风只用200行的C代码就实现了一个最简单的协程,代码风格精简,非常适合用来理解协程和用来提升编码能力。 协程简介 协程是用同步的写法达到异步的性能。其基本原理是在IO等待时切换出去,在适当的时刻切换回来,最大程 阅读全文
摘要:
hashmap.h 测试: 原作者:https://www.cnblogs.com/myd620/p/6349552.html 阅读全文
摘要:
互斥锁 共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将改资源加锁,使用完后会将其解锁,所以在使用过程中有其它线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会别唤醒,如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又 阅读全文
摘要:
前言 对于一个高性能的服务器程序来说,内存的使用非常重要。C++提供new/delete来管理内存的申请和释放,但是对于小对象来说,直接使用new/delete代价比较大,要付出额外的空间和时间,性价比不高。另外,也需要避免多次申请和释放引起的内存碎片。一旦碎片到达一定程度,即使剩余内存足够用,但由 阅读全文