- 博客(20)
- 收藏
- 关注
原创 【C++项目设计】高并发内存池
本项目实现的是一个高并发的内存池,它的原型是Google的一个开源项目tcmalloc,tcmalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替换系统的内存分配相关函数malloc和free。tcmalloc的知名度也是非常高的,不少公司都在用它,比如Go语言就直接用它做了自己的内存分配器。该项目就是把tcmalloc中最核心的框架简化后拿出来,模拟实现出一个mini版的高并发内存池,目的就是学习tcmalloc的精华。
2024-02-21 21:00:56
970
原创 C++ vector了解和使用
在C++中,std::vector是标准模板库(STL)中的一种动态数组容器,它可以存储任意类型的元素,并且能够自动调整大小。std::vector提供了许多方便的成员函数,使得对数组的操作更加简单和高效。这是 std::vector 的一般模板定义。它使用了两个模板参数 T 和 Alloc,其中 T 表示容器中存储的元素类型,Alloc 表示容器的内存分配器类型,默认为 std::allocator。该模板定义了一个通用的 vector 类模板,用于存储任意类型的元素。
2024-01-20 19:30:16
977
原创 C++ string类 模拟实现
public:// const static 语法特殊处理// 直接可以当成定义初始化首先重新定义一个命名空间,防止和库中的string类重定义,或者重新写一个别的名字的string类也可以,类成员包括capacity,size和字符串str,npos定义成公有并初始化。
2024-01-11 19:45:45
821
原创 Linux基础IO
open是一个在 Unix/Linux 系统中用于打开文件的系统调用接口。它是进行文件操作的重要接口之一,用于打开文件以进行读取、写入或其他操作。下面是关于open函数的详细介绍:pathname:要打开的文件路径。flags:打开文件的标志,用于指定打开模式和行为。这些标志可以使用按位或运算组合起来。mode:当使用 O_CREAT 标志时,指定新文件的权限。这个参数通常需要八进制形式的权限值,如 0644。返回值:成功时,返回文件描述符(一个非负整数),用于以后的文件操作。
2023-11-25 22:31:59
919
原创 Linux进程控制
进程等待是指一个进程在执行过程中暂停自己的执行,等待某个特定的条件满足后再继续执行。进程等待的必要性主要体现在以下几个方面:同步操作:在多进程或多线程的环境中,进程之间可能需要进行协调和同步。例如,一个进程可能需要等待其他进程完成某个任务后才能继续执行,或者需要等待某个共享资源的释放。进程等待可以确保进程之间的操作按照正确的顺序进行,避免数据竞争和不一致的结果。资源管理:进程等待还可以用于管理系统资源的分配和释放。
2023-11-06 19:28:21
96
原创 Linux系统进程概念
进程地址空间,即我们常说的虚拟内存虚拟内存是计算机操作系统中的一种技术,它扩展了物理内存(RAM)的大小,使得进程能够访问比实际物理内存更大的地址空间。虚拟内存允许多个进程同时运行,每个进程都有自己独立的地址空间,从而实现了进程之间的隔离和保护。虚拟内存的主要思想是将物理内存和磁盘空间结合起来,形成一个连续的地址空间,称为虚拟地址空间。这个虚拟地址空间对于每个进程都是独立的,每个进程都认为自己在独占使用整个地址空间,而无需关心其他进程的存在。
2023-10-20 22:11:00
51
原创 c++模板初阶
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)
2023-09-11 20:23:15
48
原创 C/C++内存管理
malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与。通过上述两个全局函数的实现知道,operator new 实际也是通过malloc来申请空间,如果。malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现。什么是内存泄漏,内存泄漏的危害。
2023-09-08 21:56:34
49
原创 类和对象(下)
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。3.尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。③自定义类型成员(且该类没有默认构造函数时),与其在初始化列表中的先后次序无关。1.每个成员变量在初始化列表中。(初始化只能初始化一次)就是其在初始化列表中的。②const成员变量。
2023-09-08 15:43:18
48
原创 Linux环境基础开发工具使用
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」分别控制光标左、下、上、右移一格。「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
2023-08-28 17:03:47
76
原创 类与对象(中)
5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦。7. 无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。3. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任。注意:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定。一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值。
2023-08-23 22:07:50
44
原创 Linux权限
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写。可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
2023-08-19 20:47:48
56
原创 Linux基本指令
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。另外,它也可以用来取代exit。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
2023-08-14 21:21:08
81
原创 类与对象(上)
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名。
2023-08-08 09:39:30
47
原创 C++入门
ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2023-08-05 09:17:14
49
原创 指针和数组sizeof,strlen大小
1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。sizeof 计算的是对象所占内存的大小-单位是字节,size_t。求字符串长度,从给定的地址向后访问字符,统计\0之前出现的字符个数。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。不在乎内存中存放的是什么,只在乎内存大小。数组名通常来说是数组首元素的地址。sizeof是一个操作符。strlen 库函数。
2023-07-30 10:13:55
68
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人