SGI STL二级空间配置器源码剖析
SGI STL二级空间配置器源码剖析笔者建议配合这两篇博客进行学习 侯捷 | C++ | 内存管理 | 学习笔记(二):第二章节 std::allocator-CSDN博客 施磊C++ | 项目实战 | 手写移植SGI STL二级空间配置器内存池 项目源码-CSDN博客 大块内存都是malloc和free来进行分配回收。 但是要进行大量频繁的小块内存的分配和释放就要用到内存池的思想,因为频繁调用malloc和free的效率并不高。 (具体可以看侯捷 | C++ | 内存管理 | 学习笔记(二):第二章节 std::allocator-CSDN博客) 防止小块内存频繁的分配,释放,造成内存很多的碎片出来,内存没有更多的连续的大内存块。所以应用对于小块内存的操作,一般都会使用内存池来进行管理。 1.SGI STL的vector容器源码如何管理对象C++ STL标准库 =>...
手写移植SGI STL二级空间配置器内存池
手写移植SGI STL二级空间配置器内存池笔者建议配合这两篇博客进行学习 侯捷 | C++ | 内存管理 | 学习笔记(二):第二章节 std::allocator-CSDN博客 施磊C++ | 项目实战 | SGI STL二级空间配置器源码剖析-CSDN博客 考虑的问题:多线程安全 空间配置器是容器使用的,而容器产生的对象是很有可能在多个线程中去操作的 1.大致框架1.四个函数定义 2.重要的类型变量 3.两个辅助函数 4.静态成员函数初始化 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899#pragma once#include<mutex>//移植SGI STL二级空间配置器内存池 源码template<typename...
Day26 | 二叉树 二叉搜索树中的插入操作&&删除二叉搜索树中的节点
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点701.二叉搜索树中的插入操作701. 二叉搜索树中的插入操作 - 力扣(LeetCode) 解法思路:本质就是二叉搜索树的查找,找到插入的地方就行 val比本层结点t的值大,去右子树,小,去左子树,如果左子树或者右子树为空,直接把val赋值给它就完事。 1.函数参数和返回值 1void tra(TreeNode *t,int val) t当前节点,val是插入值 2.终止条件 本题只要赋值操作结束就是终止条件 3.本层代码逻辑 1234567891011121314151617181920//比本层小,去左子树if(t->val>val) if(t->left) tra(t->left,val); //左子树为空,直接赋值返回 else { t->left=new TreeNode(val); ...
侯捷内存管理学习笔记 | C++
侯捷内存管理学习笔记第一章节 primitives零.new和delete概述C++中的new和delete是用于动态内存分配和释放的操作符,它们的底层机制和工作原理相对复杂,但也可以简单清晰地解释。 new的底层机制和工作原理 内存分配: 当使用new操作符时,它首先会调用底层的内存分配函数(如operator new),这个函数通常是对malloc的封装。malloc会从堆中分配足够的内存空间。 如果内存分配失败,operator...
Source insight源码查看工具的使用
Source insight源码查看工具的使用常用的基本操作新建工程点击new project 在源代码同级目录下创建一个insight,将我们的项目工程放在这里(这样只是方便好找) 刚刚创建的文件和源码文件同级,点击源码文件,点击Add Tree 添加完毕后直接关了就行 之后点击project->synchronize Files进行同步,点击start,然后同步完关闭 这样做直接就可以把修改同步到源码文件上面了 点击菜单这个P图标 侧边出现这样的目录 有些.cc文件出不来的更改操作 点击菜单栏options->file type options 在filefilit处加上 ,*.cc 注意是英文的 添加后关闭 之后点击project的add and remove project file重新Add tree一下就有了 查看文件在P图标点击后直接在搜索栏搜索就行 后面的project symbols可以直接搜想看的函数 快捷键设置options-> key...
Day25 | 二叉树 从中序与后序遍历构造二叉树&&最大二叉树
代码随想录 | Day25 | 二叉树:从中序与后序遍历构造二叉树&&最大二叉树主要学习内容:用中序和后序来构建二叉树 106.从中序与后序遍历构造二叉树106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) 解法思路:先想想如果没有这个图的话,我们会如何把根据这两个数组把树画出来。 1.中序是左中右,后序是左右中,说明后序数组的末尾肯定是当前还没构造的部分的根结点 2.接下来再根据这个值去中序里面找,找到的话,那它的前面就是左子树,后面就是右子树 3.根据中序数组左子树结点数量,可以确定后序数组中左右的分界,这样就找到了中序和后序数组中,左子树和右子树的范围 4.也就是分别找到了左子树和右子树他们自己的中序和后序数组 5.递归左子树和右子树的中序后序数组,建立左右子树,知道整棵树构建完毕 比如下面,这张图的构造过程 1.先找到根结点3 2.3前面是左子树9,后面是右子树15,20,7 3.左子树大小为1说明,后序数组前面1个数是左子树,到末尾的根结点前是右子树15,7,20 4.左子树中序 :9 后序:9 右子树中序 :15 20 7 ...
Day24 | 二叉树 二叉树的公共祖先(有个自己的想法)&&二叉搜索树的公共祖先
代码随想录 | Day24 | 二叉树:二叉树的公共祖先(有个自己的想法)&&二叉搜索树的公共祖先主要学习内容: 1.一般需要向上返回下层结点的内容信息或者判断结果的话都是后序遍历 2.二叉搜索树的性质:左右子树和根结点的大小关系 236.二叉树的最近公共祖先236. 二叉树的最近公共祖先 -...
Day23 | 二叉树 二叉搜索树的最小绝对差&&二叉搜索树中的众数
代码随想录 | Day23 | 二叉树:二叉搜索树的最小绝对差&&二叉搜索树中的众数主要学习内容: 1.二叉搜索树性质:中序遍历是递增的有序序列 2.自定义pair排序函数复习 3.双指针在二叉树中的应用(重点) 530.二叉搜索树的最小绝对差530. 二叉搜索树的最小绝对差 - 力扣(LeetCode) 解法:利用二叉搜索树性质进行中序遍历**思路:**总的思路是二叉搜索树的中序遍历是一个递增的有序序列,可以把它看成一个数组。 那么就有了两个思路 1.把遍历的数全都存到一个数组中,然后循环,看相邻两个数的差的大小,记录最小值就是了 2.在遍历的过程中想办法把前一个结点的值给记下来,然后根据遍历顺序进行相减得到最后的结果。可以利用双指针来记录前一个节点 在这里介绍第二种 1.函数参数和返回值 123int minVal=INT_MAX;TreeNode *pre=nullptr;void tra(TreeNode...
Redis
Redis基础一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化 (1) SQL关系性数据库 传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束 (2) NoSql数据库 NoSql对数据库格式没有严格约束,往往形式松散,自由。 可以是key-value,可以是文档,或者图格式 1.1.2关联和非关联 (1) 关系型数据库 (2) 非关系型数据库 12345678910111213141516171819{ id: 1, name: "张三", orders: [ { id: 1, item: { id: 10, title: "荣耀6", price: 4999 } }, { id: 2, item: { id: 20, title:...
LeetCode Hot100 | Day7 | 路径总和III
LeetCode Hot100 | Day7 | 路径总和III看路径总和III之前先看112. 路径总和 - 力扣(LeetCode) 123456789101112131415161718192021class Solution {public: bool flag=false; void tra(TreeNode *t,int target) { if(t==nullptr) return ; target-=t->val; if(t->left==nullptr&&t->right==nullptr) { if(target==0) flag=true; } tra(t->left,target); tra(t->right,target); } bool...













