- 博客(16)
- 收藏
- 关注
原创 C++内存管理:引用计数
C++中的引用计数是一种用于管理资源(例如内存)的技术,它通过计数指向某个对象的引用数量来自动控制该对象的生命周期。当对象的引用计数变为零时,就意味着没有引用在使用它,可以安全地释放资源。引用计数通常用在智能指针中,尤其是std::shared_ptr。这种方法适合管理动态分配的内存,并可以避免内存泄漏。但引用计数在存在循环引用时会失效,例如两个对象相互引用且引用计数都不为零,但实际上它们都不再被其他部分使用,这种情况就会导致内存泄漏。当对象的引用次数为0时,调用Unref删除对象。
2024-11-04 21:57:27
393
原创 C++ 语法笔记
assert 是一个在 C 和 C++ 中使用的宏,它的作用是在程序运行时检查一个条件是否为真。在 Slice 类中,拷贝构造函数可能会简单地复制 data_ 指针和 size_ 成员变量,这样新创建的 Slice 对象就会拥有与原始 Slice 对象相同的数据和大小。我们将源对象的资源直接转移到目标对象中,同时将源对象恢复到一种可安全销毁或重新赋值的状态。,用于指定一个函数不会抛出异常。在代码中,移动构造函数使用右值引用作为参数,并且我们将原始对象的资源直接转移到新对象中,而不是进行复制。
2024-10-25 22:13:34
400
原创 CMU15445 Column compression
运行长度编码将同一列中连续出现的相同值压缩为三元组:值、开始位置(offset)和运行长度(length)。
2024-10-16 17:39:35
650
原创 CMU15445 RoaringBitmaps
空间效率高:通过使用分段存储和稀疏数据的特殊编码,Roaring Bitmaps 能有效压缩稀疏位图,减少内存占用。操作效率高:支持快速的集合操作(如交集、并集、补集等),能够在大规模数据下保持高效的运行速度。灵活性强:适用于多种场景,尤其在高基数属性和稀疏数据集的处理方面非常出色。Roaring Bitmaps 目前被广泛应用于数据库系统、大数据平台以及搜索引擎中,尤其在需要高效处理和压缩稀疏位图数据的场景下具有很大的优势。
2024-10-16 17:38:32
660
原创 CMU15445 压缩粒度(Compression Granularity)
对同一个表的一个块(block)中的多个元组(tuple)进行压缩。适用场景:主要用于基于磁盘的DBMS,尤其是在需要批量处理大量数据时。一个块通常包含多个元组,因此压缩一个块可以有效减少磁盘存储的需求。
2024-10-16 17:05:57
1547
原创 CMU15445 Late Materialization(延迟物化)
*Late Materialization(延迟物化)**是一种优化技术,常用于列式数据库中(例如DSM模型或PAX模型)。它的核心思想是推迟实际获取完整的记录(元组)数据的时间,直到查询的最后阶段,以避免在查询过程中处理大量不必要的数据。这种技术能够提升查询性能,尤其是涉及到多个列的大型数据库查询。
2024-10-16 16:36:12
1795
原创 CMU15445 PAX存储模式
Partition Attributes Across (PAX) 是一种混合存储模型,它结合了行存储(NSM)和列存储(DSM)的优势,旨在平衡两者的性能。这种模型在数据库页面内对数据进行垂直分区,以便在提供列式存储的高速查询的同时,保留行式存储的空间局部性优势。让我详细解释一下各个概念,帮助你理解。
2024-10-16 16:11:33
637
原创 CMU15445 (NSM)
N-Ary Storage Model (NSM) 又叫行存储,将每一行的所有属性放在一起存储。适合OLTP场景,即高频率的插入、更新、删除操作,因为整行数据存储在一起,读取和写入效率高。一次性读取整行:当查询需要完整的行数据时,NSM可以快速返回所有相关字段。局限性:在分析型查询(只需要部分列的数据)中,NSM的效率不如列存储模型。
2024-10-15 19:44:42
886
原创 交通灯oj
有一条长度为 x 的街道,其位置编号为 0,1,…,x。起初没有交通灯,但街道上陆续增加了 n 组交通灯。你的任务是计算每次增加红绿灯后最长的无红绿灯通道的长度。
2024-06-20 01:11:10
212
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人