基础组件设计专栏
文章平均质量分 85
拾荒叶
总有人间一两风,填我十万八千梦
展开
-
内存池原理以及代码实现简易版内存池
内存池的应用及其必要性应用场景当客户端连接上服务端的时候,服务端会准备一部分的堆区用来做消息保留。当一个连接成功之后,服务器会在堆区为其分配一段属于这个连接的内存,当连接关闭之后,所分配的内存也随之释放。但是当连接量较大且过于频繁时,不可避免地对内存进行频繁的分配和释放。这会导致堆区出现小窗口,也就是堆区碎片化。1 全局的内存池 用jemalloc或者tcmalloc 开源封装好的2 一个链接做一个内存池 这种场景,链接的生命周期没有那么长,小块没有必要回收3 每一个消息做原创 2022-04-25 17:18:55 · 691 阅读 · 0 评论 -
内存泄露检测方案和代码实现
文章目录1 内存泄露核心及原因2 内存泄露的危害3 常用的检查内存泄露的工具4 内存泄露检测的4种方案和代码实现内存泄露检测围绕两个问题解决定位到代码中行的方法方法1方法2方法3 (此方法不推荐使用,编译时也会出现不推荐使用的编译警告)(了解即可)方法4总结1 内存泄露核心及原因 内存泄露(C/C++) 涉及函数: 1 malloc/calloc/relloc new 2 free delete 其核心是 有分配没有释放 内存分配和释放没有做到匹配2 内存泄露的危害原创 2022-04-24 13:07:55 · 1172 阅读 · 0 评论 -
手撕分布式死锁检测和规避代码
文章目录导读1死锁的构建2pthread 加锁过程中的hook3 图的构建4 三个原语操作6手撕死锁检测代码导读发生死锁时,进程永远不能完成,系统资源被阻碍使用,以致于阻止了其他作业开始执行。在讨论处理死锁问题的各种方法之前,我们首先深入讨论一下死锁特点。死锁,是指多个线程或者进程在运行过程中因争夺资源而造成的一种僵局,当进程或者线程处于这种僵持状态,若无外力作用,它们将无法再向前推进。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁,线原创 2022-04-21 18:21:22 · 426 阅读 · 0 评论