Home

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...

Read more

atomic 头文件

atomic 1 概念 std::atomic 是C++ 11 引入的原子操作库,定义在 头文件中。它提供了一些用于多线程环境下的无锁同步操作,通过保证共享数据的原子性来避免数据竞争问题,提高并发程序的性能。 原子性在操作系统中有设计,执行过程,一旦开始不可被打断。指令在CPU执行层面被设计为不可中断。 2 内存屏障和内存顺序 内存屏障(Memory Barrier)是为了防止编译器和CPU对指令执行顺序进行优化重排。因为默认情况下,编译器和处理器会出于对性能优化目的,重排指令的执行顺序,可能会导致多线程环境下的内存一致性问题。 为了防止这一现象的出现,atomic提供了一种内存顺序控制。 内存顺序 功能 ...

Read more

C++ 类型转化和拷贝

写一些经常会忘记的知识点 1. 隐式类型转化 1.1 常见的写法 int a = 5; long long b; b = a; 这就是一种常见的类型转化。 基本都是低精度,转化成高精度;小范围转为大范围 上述示例中就是小范围,转为大范围。 类型 位 int 32 long 64 float 32 double 64 上面只是部分,不是全部的基本类型。 1.2 可能会造成精度丢失 int 类型 转为 float 类型 可...

Read more

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会小于限定的最高层数,每一个元素是否会移到上一层全靠运气。...

Read more

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...

Read more

leveldb第二章 Arena 内存池原理

我相信很多人都听到过线程池,内存池这种概念。 你说我知道吗,抱歉,我也不知道。 所以今天一起来学习一下。 为什么讲leveldb先讲内存池呢? 因为源码中,我先看了SkipList其中涉及Arena,所以我就先讲这个了。

Read more