![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 71
CodeX0119
这个作者很懒,什么都没留下…
展开
-
brpc的精华bthread源码剖析
正如标题所说,brpc的精华全部都在bthread上,而bthread就是我们brpc开发的一套“协程”。而进程,线程,和bthread的关系是什么样的呢?一个进程里面可以开辟多个线程,而线程和协程的关系呢。在微信开源的libco上,线程 :协程 = 1 :N。而在bthread上 线程 :协程 = M :N,而bthread实现的关键就是工作窃取算法。后续会展开描述。 bthread有三大件,TaskControl(进程内唯一),TaskGroup(线程内唯一),TaskMeta(bthread上下文)。原创 2022-02-25 21:18:30 · 1261 阅读 · 0 评论 -
八大排序算法代码实现
排序算法分支图 各大排序算法分析 排序方法 时间复杂度(平均情况) (最好情况) (最坏情况) 空间复杂度 稳定性 冒泡排序 O(n²) O(n²) O(n) O(1) 稳定 快速排序 O(nlogn) O(nlogn) O(n²) O(nlogn) 不稳定 选择排序 O(n²) O(n²) O(n²) O(1) 不稳定 插入排序 O(n²) O(n) O(n²) O(1) 不稳定 归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定 希尔排序原创 2022-01-10 20:45:43 · 523 阅读 · 0 评论 -
#include后的““和<>区别及代码证明
#include后的""和<>区别 尖括号<xxx.h>,表示编译器只在系统默认目录或尖括号内的工作目录下搜索头文件,并不去用户的工作目录下寻找,所以一般尖括号用于包含标准库文件,例如:stdio.h,math.h。 双引号"xxx.h",表示编译器先在用户的工作目录下搜索头文件,如果搜索不到则到系统默认目录下去寻找,所以双引号一般用于包含用户自己编写的头文件。 因此,所该头文件由自己编写,位于工作目录下,就一定要用双引号;若属于标准库文件,则两者都可以,不过最好使用尖括原创 2021-12-06 16:42:01 · 746 阅读 · 0 评论 -
C++11新特性总结
C++11新特性 本文章作为作者的笔记文章,也可以供广大程序猿们进行参考。 为保持C++稳定性以及兼容性增加的新特性 noexcept修饰符 C++98中,我们有一套完整的不同于C的异常处理系统,通过这套异常处理系统,C++拥有了很大的异常处理能力。一般使用throw()动态异常声明,但是事实上,该特性很少被使用,于是就被C++11弃用了,被随之的noexcept取代了。 noexcept不会抛出异常,但是如果修饰的函数抛出了异常,则会调用std::terminate()函数来终止程序的运行,这比异常机制的原创 2021-12-06 16:27:20 · 552 阅读 · 0 评论 -
内存分配那些事儿
内存 程序的内存布局 现代的应用程序都运行在一个内存空间里,在32位系统里,这个内存空间拥有2的32次方(4GB)的寻址能力。这种内存模型又称为平坦的内存模型,整个内存是同一个统一的地址空间,用户可以使用一个32位的指针访问任意内存位置。如 int *p = (int*) 0x0018ff44 *p = 10; 这段代码展示了如何直接读写指定地址的内存数据。在4GB的内存空间中,一部分会挪给内核使用,应用程序无法直接访问这内存,这一部分叫做内核空间。windows系统一般会把高地址的2GB内存(或者配置为原创 2021-07-05 01:30:40 · 117 阅读 · 1 评论 -
编译和链接那些事儿
现在流行的集成开发环境(IDE)使我们没有去重视编译和链接的细节,编译链接步骤一步完成,通常将这种编译和链接合并到一起的过程称为构建。二编译链接可以分为四个步骤:预处理,编译,汇编,链接。 预编译 预编译会将.h文件被预编译器cpp预编译成.i文件,而预编译的文件扩展名是.ii,预编译的过程相当于如下指令。 $gcc -E hello.c -o hello.i 或者 $cpp hello.c > hello.i 预编译过程主要处理源代码文件中以“#”开始的预编译指令,处理规则如下: 将所有的原创 2021-04-13 16:41:06 · 173 阅读 · 0 评论