摘要: 先来看一个小例子 : 编写函数遍历一个整型数组的元素,数组最后一个元素为-1标志数组的结束。 #include <stdio.h> void test(int *a){ int x; while((x = *a++) != -1) { printf("%d\n",x); } } int main(v 阅读全文
posted @ 2022-11-16 14:30 arthurzyc 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 目录 传统同步方案的缺点 folly/Synchronized.h 简单使用 Synchronized的模板参数 withLock()/withRLock()/withWLock() —— 更易用的加锁方式 升级锁 ulock()和 withULockPtr() Timed Locking Sync 阅读全文
posted @ 2022-11-16 13:41 arthurzyc 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 介绍 folly/small_vector.h folly/small_vector.md 行为与std::vector类似,但是使用了small buffer optimization(类似于fbstring中的SSO),将指定个数的数据内联在对象中,而不是像std::vector直接将对象分配在 阅读全文
posted @ 2022-11-16 13:40 arthurzyc 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 在引入fbstring之前,我们首先再回顾一下 string 常见的三种实现方式。 string 常见的三种实现方式 string 中比较重要的 3 个字段: char *data. 指向存放字符串的首地址(在 SSO 的某些实现方案中可能没有此字段)。 size_t size. 字符串长度。 si 阅读全文
posted @ 2022-11-16 13:38 arthurzyc 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 最近在研究计算机里的基本逻辑电路,想到一个问题:为什么CPU需要时钟这样的概念? 首先考虑如下逻辑电路: 当A=B=1时,Q=0。当输入信号发生变化时,逻辑元件不会立即对输入变化做出反应,会有一个传播时延(propagation delay)。当B变化为0时,由于B也作为XOR的直接输入,所以XOR 阅读全文
posted @ 2022-11-16 13:26 arthurzyc 阅读(328) 评论(0) 推荐(0) 编辑
摘要: IBM 360/91浮点单元最先实现Tomasulo算法从而允许乱序执行。360体系只有4个双精度浮点寄存器,限制了编译器调度的有效性。而且,IBM 360/91的访存和浮点延迟都很长,如果顺序执行指令,虽然只有RAW hazard,但是后面无关的指令只能被stall。如果乱序执行,还会额外引入WA 阅读全文
posted @ 2022-11-16 13:25 arthurzyc 阅读(697) 评论(0) 推荐(0) 编辑
摘要: 1.1 定义函数模板 1.2 使用函数模板 1.3 两阶段翻译 Two-Phase Translation 1.3.1 模板的编译和链接问题 1.4 多模板参数 1.4.1 引入额外模板参数作为返回值类型 1.4.2 让编译器自己找出返回值类型 1.4.3 将返回值声明为两个模板参数的公共类型 1. 阅读全文
posted @ 2022-11-16 12:02 arthurzyc 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 之前在看汇编的时候一直是肉眼看GCC -S的结果,缺点是很不直观,无法实时的看到寄存器的值,所以研究了下如何用GDB调试汇编。当然,写这篇文章更重要的一个目的是半年没有写博客了,博客要长草了。_ 我调试汇编的需求有几点: 能够单步进行汇编调试。 能够实时看到寄存器值的变化。 能够看到源代码和对应汇编 阅读全文
posted @ 2022-11-16 11:28 arthurzyc 阅读(1134) 评论(0) 推荐(0) 编辑
摘要: 人们一直追求CPU分支预测的准确率,论文Simultaneous Subordinate Microthreading (SSMT)中给了一组数据,如果分支预测的准确率是100%,大多数应用的IPC会提高2倍左右。 为了比较不同分支预测算法的准确率,有个专门的比赛:Championship Bran 阅读全文
posted @ 2022-11-16 11:21 arthurzyc 阅读(2995) 评论(0) 推荐(1) 编辑
摘要: 所有的stdio库函数,比如包括getchar/putchar/getc/putc之类的,都会经过stdio buffer: 如果从最简单的实现来说,可以把FILE结构体定义成下面这样 : typedef struct _iobuf{ int fd; //文件描述符 int cnt; //缓冲区剩余 阅读全文
posted @ 2022-11-16 11:15 arthurzyc 阅读(258) 评论(0) 推荐(0) 编辑