games101(01-04)
开个新坑,games101
Part 1
计算机视觉和计算机图形学的区别。
一切需要猜测的东西,是CV 。 需要理解。
那里是马路,那里是斑马线
MODEL -> IMAGE 图形学
IMAGE -> MODEL CV
IMAGE -> IMAGE CV
MODEL -> MODEL 图形学
难道两者结合起来不能作为一个方向吗?为什么要区分的这么严格。
Part 2
主要了解,向量的点积和叉积。
点积:又称标量积,内积
两个向量的点积结果是一个数,规则就是对应元素相乘。
\[\mathbf{a} = \begin{bmatrix} a_1 \\ a_2 \end{bmatrix}, \quad
\mathbf{b} = \be...
atomic 头文件
atomic
1 概念
std::atomic 是C++ 11 引入的原子操作库,定义在 头文件中。它提供了一些用于多线程环境下的无锁同步操作,通过保证共享数据的原子性来避免数据竞争问题,提高并发程序的性能。
原子性在操作系统中有设计,执行过程,一旦开始不可被打断。指令在CPU执行层面被设计为不可中断。
2 内存屏障和内存顺序
内存屏障(Memory Barrier)是为了防止编译器和CPU对指令执行顺序进行优化重排。因为默认情况下,编译器和处理器会出于对性能优化目的,重排指令的执行顺序,可能会导致多线程环境下的内存一致性问题。
为了防止这一现象的出现,atomic提供了一种内存顺序控制。
内存顺序
功能
...
C++ 类型转化和拷贝
写一些经常会忘记的知识点
1. 隐式类型转化
1.1 常见的写法
int a = 5;
long long b;
b = a;
这就是一种常见的类型转化。
基本都是低精度,转化成高精度;小范围转为大范围
上述示例中就是小范围,转为大范围。
类型
位
int
32
long
64
float
32
double
64
上面只是部分,不是全部的基本类型。
1.2 可能会造成精度丢失
int 类型 转为 float 类型
可...
leveldb源码分析第四章 什么是跳表(SkipList)
1. 什么是跳表?
如上图所示,跳表是一种基于多级索引的有序链表,对于查找效率的提高十分明显,常用于有序数据的高效存储和检索。
1.1 跳表的结构
跳表由多个层级(Level)组成:
最底部(Level 0)是一个普通的有序链表,包含所有元素。
每一层的节点是下一层的子集,每隔一定概率(在leveldb中 p = 1/ 4)提升到上一层,形成多级索引。
一般来说,
Level 0:包含所有元素
Level 1:大约包含 1 / 4 的元素
Level 2:大约包含 (1 / 4)^ 2 = 1 / 16的元素
……
Level k:大约包含 (1 / 4) ^ k 的元素
K会小于限定的最高层数,每一个元素是否会移到上一层全靠运气。...
leveldb第三章 Arena源码分析
讲个题外话,这用draw.io画出来的图,导出来后怎么这么糊涂啊,把缩放放大后确实清晰,但也很占地方啊!!
Arena的设计,在leveldb/util 下的arena.cc和arena.h中
上图中,我们可以看到,Arena类的设计。
1. 私有变量的含义
我们先讲解其中三个私有变量的含义,先暂时不讲memory_usage_。
char* alloc_ptr_;
char* alloc_bytes_remaining_;
vector<char*> blocks_;
其中blocks_为vector类型,存储char*的指针,指向内存池中固定大小的内存块——block
在leveldb中block的大小被设置为4096B,4KB
alloc_ptr...
leveldb第二章 Arena 内存池原理
我相信很多人都听到过线程池,内存池这种概念。
你说我知道吗,抱歉,我也不知道。
所以今天一起来学习一下。
为什么讲leveldb先讲内存池呢?
因为源码中,我先看了SkipList其中涉及Arena,所以我就先讲这个了。