- 博客(26)
- 收藏
- 关注
原创 高并发内存池——基于Google开源项目tcmalloc的简洁实现
从零实现一个高并发内存池1. 初识高并发内存池1.1 项目介绍1.2 项目所需的知识1.3 了解池化技术1.4 内存池主要解决的问题2. 小试牛刀--设计一个定长内存池2.1 将内存还给定长内存池2.2 向定长内存池中申请内存3. 高并发内存池整体框架设计4. 梳理向内存池中申请内存的步骤4.1 哈希表与内存对齐4.2 ThreadCache结构分析与申请内存流程4.3 CentralCache结构分析与申请内存流程4.3.1 CentralCache结构分析(承上启下,非常关键)4.3.2 Central
2022-04-18 21:08:24 2760 22
原创 【每日一练】---- 3.07 3.08 3.09oj总结(继承、重载、多态、动态与静态绑定)
重载父类派生类成员函数看如下代码,判断输出结果:class A {public: void test(int a) { cout << "1"; }};class B :public A {public: void test(float b) { cout << "2"; }};int main() { A* a = new A; B* b = new B; a = b; b->test(2); a->test(1.1); return.
2022-03-14 11:53:53 709 3
原创 【每日一练】---- 3.02 3.03 3.04oj总结(类知识点)
new与delete的功能问题:为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该()A. 将构造函数设为私有B. 将析构函数设为私有C. 将构造函数和析构函数均设为私有D. 没有办法能做到new一个对象时,本质是:申请一块空间给这个对象调用该对象的构造函数去初始化这块空间显然若将构造函数设为私有则无法通过new来创建对象。delete一个对象的本质是:调用该对象的析构函数回收分配给该对象的空间那么将析构函数设为私有,有办法回收.
2022-03-09 13:25:08 959
原创 【每日一练】---- 3.01oj总结(拷贝构造函数与友元函数)
引用的知识点引用初始化以后不能被改变,指针可以改变所指的对象(对)引用传值,指针传地址(错)对于问题1,看如下代码int main() { int a = 10; int b = 20; int& ra = a; ra = b;}此时ra不会变成变量b的引用,仍是变量a的引用。故引用初始化后不能被改变。这里理解ra=b是将b的值赋值给ra和a对于问题2,引用的底层汇编仍是传的变量的地址,故引用也是一种传址调用。拷贝构造函数的知识点拷贝构造函数的调用.
2022-03-03 19:28:13 328 1
原创 【每日一练】---- 2.28oj总结(类知识点较多)
内联函数在C++编程中,我们常常定义一个函数去实现某种功能,比如:int min(int x , int y){ return x<y?x:y;}调用函数前都要做很多工作:调用前要先保存寄存器,并在返回时恢复,复制实参,程序还必须转向一个新位置执行。C++支持内联函数,其目的是为了提高函数的执行效率,用关键字 inline 放在函数定义(注意是定义而非声明)的前面即可将函数指定为内联函数,内联函数通常就是将它在程序中的每个调用点上“内联地”展开。如下代码:inline int.
2022-03-03 15:44:38 468 3
原创 【Linux学习】认识计算机组成与理解冯诺依曼体系结构
认识计算机组成与理解冯诺依曼体系结构一、认识计算机组成二、理解冯诺依曼体系结构一、认识计算机组成我们所认识的计算机,都是由一个个的硬件组件组成。输入单元:包括键盘,鼠标,扫描仪,写板等中央处理器(CPU):含有运算器和控制器等输出单元:显示器,打印机等什么是计算机呢,通俗来讲就是由输入单元输入,通过计算机的计算,将计算结果显示到输出单元上。其中CPU中运算器的功能为对数据进行算术或逻辑运算CPU中控制器的功能为控制数据什么时候读写到存储器或输出设备、输入设备。二、理解冯诺依曼体系结
2022-02-26 11:26:12 1173
原创 【每日一练】----1.22 oj总结
选择题:执行下面语句后的输出为int I=1;if(I<=0)printf("****\n") ;elseprintf("%%%%\n");考察转义字符,最后打印为“%%”。编程题:【不要二】二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)
2022-02-10 22:24:09 493
原创 【每日一练】----1.21 oj总结
初识动态规划 题目:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:.所有连续子数组中和最大的值输入:31 2 1 输出:3看了解题思路后发现是一道经典的动态规划类题目,解决动态规划类题目应注意好以下几点:dp数组中d
2022-02-10 21:18:40 222
原创 【每日一练】----1.20 oj总结
考点:八进制的表示形式以0开头。十六进制的表示形式以0x开头。考点该程序的目的是求参数的二进制式中有多少个1.一个十进制数转换为二进制数的方法。不断除以2并得出余数。从下至上将余数连起来。考点:求斐波那契递归调用次数。不应从上向下求。应从下向上求。先求fib(2),fib(3)…。...
2022-01-23 19:50:17 326
原创 【每日一练】----1.19 oj总结
考点:大小端的概念,数据在大端机器和小端机器的存储方式函数栈帧的调用输出格式对输出结果的影响解在大端机器下,将低位放置在高地址处。int i = 1的存储在大端机器下即0x00000001;在小端及旗下,将低位放置在低地址处,即int i =1的存储为0x01000000。调用函数时会建立函数栈帧,参数按从右向左的顺序依次入栈,即a在栈顶,c在栈底。在小端机器的情况下,函数栈帧的数据如下:0x0100000000000000 0x0200000000000000 0x030000000.
2022-01-22 19:14:39 244
原创 【每日一练】----1.18 oj总结
常量指针与常量对象。1.const放在号的左侧,代表该指针变量指向的数据不能通过解引用该指针变量修改。2.const放在号的右侧,代表该指针变量不可被修改。int a = 10;const int*p = &a;*p = 20;//错误的int b = 10;int* const pb =&b;pb = &a; //错误的位段的概念unsigned a申请了4个字节,但是只用了19个比特位,余下13个比特位,b只用11个比特位,刚好补充a的剩余。c.
2022-01-21 22:30:08 497
原创 【初阶数据结构】完全二叉树实现堆排序
堆排序算法一、完全二叉树的介绍二、堆向下调整算法三、堆排序算法前言完全二叉树是效率很高的数据结构,用它进行排序算法时时间复杂度大大降低一、完全二叉树的介绍完全二叉树是由满二叉树引出来的。对于深度为K,有n个结点的二叉树,当且仅当其每一个节点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。满二叉树是一种特殊的完全二叉树。如上图示为满二叉树,深度K为3,结点n为7,即满二叉树的结点n与深度K存在关系为:n = 2^k - 1.如上图示为完全二叉树,完全二叉树有如下性质:
2021-09-03 17:06:42 772
原创 【C语言学习】内存操作函数之------->memcpy memmove 详解与手动实现
内存操作函数一、memcpy二、memmoveC语言中有时需要对内存空间进行操作,下面详解三个常用的内存操作函数函数memcpymemmove一、memcpy 1. memcpy函数简介memcpy——————————参数( void *destination , const void *source , size_t num)返回值void *作用从source的位置开始向后复制num个字节的数据到destination的位置
2021-06-20 17:19:57 486 2
原创 【C语言项目】五一假期我竟然做出来了———— 扫雷 (功能完全版)
初级版扫雷(功能无阉割)1. 扫雷整体思路分析2. 初始化数据与雷的放置3. 打印游戏信息4. 排查雷与标记雷5. 排查后附近格子的自动展开6. 判断输赢7. 细节优化8. 各个文件中的原码1. 扫雷整体思路分析扫雷算是一个代码量比较大的程序,需要用到大量我们自定义的函数,故需要不同的文件去声明与实现函数。设置两个二维数组,一个用来储存雷的信息,另一个打印出游戏的信息。各种函数来实现功能。文件功能test.c程序main函数的运行文件game.c实现函数的功能
2021-05-05 16:22:54 1527 10
原创 【C语言项目】好玩又实用的程序——用C语言设计一个随机“捉鳖”程序
捉鳖程序的实现1、随机数的生成2、反复捉鳖与程序设计3、细节优化1、随机数的生成前几天啊,班里要选人去学那什么健美操,采用捉鳖的方式,我突发奇想能不能用c语言设计个随机抽号程序,程序的精髓在如何“随机”。查阅后,rand函数可以生成随机数,于是先跑起来让它生成十个随机数并输出而后让它跑第二次发现和第一次生成的随机数无差别。这不符合我们的需要!于是我认真地查阅了这个函数,发现它在使用前还需要一个srand函数来设置随机数。The srand function sets the star
2021-04-17 22:50:20 944 6
原创 【C语言学习】————操作符、关键字
4_6学习浅谈操作符关键字指针操作符单目操作符++ - - ~ & *++与- -操作符分为前置与后置关系,看如下代码: int a = 10; int b = ++a; printf("%d\n %d", a, b);//看一下a与b的值为多少。这输入一个前置++问题,代表先进行++操作符的运算,而后进行=操作符的运算。故b=11,a=11.下面看一个后置++代码: int a = 10; int b = a++; pri
2021-04-09 23:14:01 1203 3
原创 【C语言学习】链表的反转打印
头部插入与尾部插入链表一、 链表的创建二、反转链表的创建一、 链表的创建前面提到过,链表是由各个结点组成,而每个结点由数据和指针(存储地址)组成,下面上图供理解该链表的实现是基于尾部插入,创建一个结构体指针,随着结点的创建总是指向最后一个结点int n = 0, i = 0, data = 0; scanf("%d", &n); struct a* list = NULL;//如何找到这个链表,用list指向第一个结点 struct a* tail = NULL;//用tail指
2021-04-05 22:43:02 1227 6
原创 【C语言学习】——常量变量字符串
小白学C一、定义常量的方式二、变量的作用域和生命周期三、字符串介绍一、定义常量的方式1.const修饰的常变量,本质上是变量,只不过被const修饰后改变了属性;不能去定义数组的元素个素。编译器对这种处理还是会报错。2.#define定义的标识符常量,可以用来设置数组。define定义后本质发生改变。3.枚举常量,用“enum”来一 一列举例如:用enum列举性别二、变量的作用域和生命周期1.作用域:①局部变量作用域:在{}内部起作用,代码如下②全部变量作用域:作用在整个工程(在
2021-04-04 18:37:19 1921 7
原创 编程学习之路
新的开始自我介绍编程的目标学习编程的方法每周花在编程上的时间就职目标自我介绍鄙人来自一所普通大学,非科班出身,寒假时感兴趣自己浅学了一点,时至今日已经着手报班系统学习,和诸君共勉!编程的目标在为期一年的学习中,熟练掌握c++这门编程语言,为以后做底层软件开发做基础!学习编程的方法实践出真知吧只能说。有老师带着固然是好的,但终究是成事在己,平时多敲代码,多思考,多去看大牛的代码,改进自己的思考方式,同时要专注学习,提升效率。每周花在编程上的时间每周花在编程上的时间为六小时,两小时为一组,分三组
2021-03-31 22:59:14 307
原创 【C语言学习】——————链表的重新链接与动态内存的释放
链表中指定结点的删除书接上回,当时是将指定结点赋予特定指限制输出。原文链接如下:https://editor.csdn.net/md/?articleId=114953286转换下思路:不把该结点的地址保存在上一个结点的指针域中,相当于把指定结点之外的结点再次串为一个新链表。遍历链表查找指定结点int del = 0; scanf("%d", &del); struct a* cur = list; while (cur) { if (cur->data == del)
2021-03-28 16:48:52 1830 3
原创 【C语言学习】——————数据结构之链表
一道数据结构题来认识链表其实用数组也可以来实现该题,但是题目要求链表结构实现,正好浅学一下数据结构。尾部插入实现单链表链表由多个结点链接而成,前一个结点中包含着下一个结点的地址,还包含所存储的数据;由此知,每个结点应该是结构体变量,可根据要存储多少数据,来动态开辟内存空间,这里我们使用malloc函数。结构体和动态内存开辟代码如下:struct a{ int data; struct a* next;};struct a* p = (struct a*)malloc(sizeof(st
2021-03-17 22:51:56 1958 7
原创 【C语言刷题训练】——————图形打印
目录1. 二维数组打印打印指定图形2. 字符串比较3. qsort函数再应用及出现问题(待解决)一、 二维数组如题,打印空心三角形,如果还按照以前的方法直接去输出,也可以,但是用二维数组先将其输入,再输出,这样输入和输出的时候都可以去控制条件,相较于直接输出的一层控制条件,二维数组更优(下面会有例子供证明)。可以发现找空心的规律不是那么容易,那么反着来,把非空心的地方填充进‘*’,剩下的就是空心的。1. 第一列均非空心。2. 行数和列数相等,非空心。3. 最后一行非空心。规律出来了,代
2021-03-02 21:31:20 1083 5
原创 【C语言刷题训练】——————一元二次方程
一元二次方程解法一元二次方程求解有很几种方法是我们在做题中最常使用的;包括:1、直接开平方法;2、配方法;3、公式法;4、因式分解法。如果让计算机去求解,我想公式法应该是直观有效的。使用公式需要△ = b^2 - 4* a *c进行判别,这里面涉及到开方与乘方的问题,还涉及到虚数的问题。上网得知,库函数sqrt与pow分别涉及到开方与乘方,虚数的问题没有解决,自己手动变相反数+i,技术菜无奈(=.=)。如下:突发奇想,给pow函数的变量y传0.5不就相当于开方嘛!实验证明确实可行
2021-02-28 21:52:13 3852 9
原创 【C语言刷题训练】——————水仙花数
void order(int arr[],int s){ int i=0; int j=0; int tmp=0; for(i=0;i<s;i++) { for(j=0;j<s-i-1;j++) { if(arr[j]<arr[j+1]) { tmp=arr[j]; arr[j]=arr[j+1];
2021-02-27 20:51:46 2794 5
原创 【C语言刷题训练】——————ASCII表
仔细读题,题目描述的是“多组输入”,我们可以借助while循环来实现!通过查阅,大写字母的ASCII码值+32为对应的小写字母。看代码:但是,接下来测试时,值却不是我们所期待的。这里多出来个*,于是我去仔细查阅了scanf的用法,而我们输入’A’后敲击回车,缓冲区真正出现的是’A\n’,scanf函数这一次把’A’录走了,下次录走了’\n’,而’\n’的ASCII码值+32后就是*!问题到此算是发现了,可是怎么解决呢。我们可以在进入循环时,可以用getchar()去录入。看下效果:..
2021-02-25 19:08:32 2376 6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人