- 博客(114)
- 收藏
- 关注
原创 页面置换算法
1.FIFO算法:先进先出算法(类似于队列操作),是最简单的页面置换算法,当页面加载到内存时,记录页面添加加载到内存的时间信息,当发生缺页中断时就会把内存中时间最久的页面置换出去,再把新的页面加载进来。(其实这里记不记录不重要了,替换对头就行了),这里有的说法是链表,不重要了,也是换掉链表的头就可以了。缺点:可能发生Belady(系统抖动),因为这里可能换出的页面是后面将要频繁使用的页面,这时又要不断进行页面置换。解决方法呢:最优置换算法,把最长时间不用的页面置换掉,但是计算机低层难以实现最优算
2020-07-17 18:32:56
309
转载 strtok()和strtok_s()
strtok(), strtok_s() 字符串分割函数 //strtok()函数原型/*_Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s) _CRTIMP char * __cdecl strtok(_Inout_opt_z_ char * _Str, _In_z_ const char * _Delim);*/当strtok()在参数_Str的字符串中发现参数_Delim中包涵的分割字符时,则...
2020-07-17 16:50:27
596
原创 创建三个线程,分别打印 a,b,c.
创建三个线程,分别打印 a,b,c. 现在要求用信号量对线程进行同步,无论程序运行 多少次、如何运行,都能使整个程序依次打印 a b c a b c a b c . . . 一直死循环#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#include<unistd.h>#include<pthread.h>#inclu...
2020-07-17 13:32:40
812
原创 string与char*
c++的string库,解决了很多字符串问题,字符串处理的操作基本包括完了,这里就不说有哪些库函数了。这里我就说说输入为string,输出为const char*的问题。string库用法总结链接:https://blog.csdn.net/liitdar/article/details/80498634string库大全:https://blog.csdn.net/u013046610/article/details/72674185?utm_medium=distribute.pc_releva
2020-07-16 21:26:03
250
原创 如何判断大小端
如图所示:代码测试:int check_sys(int a){ int* p = &a; if (*p == 12345678) return 0; else return 1;}int main(){ int a = 0x12345678; int re = check_sys(a); if (a == 0) { cout << "big" << ...
2020-07-16 18:53:00
245
原创 c++内存划分
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。静态划分。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。静态划分。代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。mallo
2020-07-16 13:44:46
284
原创 二分查找
二分查找有很多变化的题型,现在来总结一下,都是二分查找的变化题型。由于时间伧俗,就直接上代码了, 如有问题或者不懂的地方欢迎留言交流。题目1 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。int SearchValue(const int *br,int n, const int val);参数说明: br 指向连续空间。 n ...
2020-07-15 23:05:12
242
转载 浅谈僵尸进程解决之法
僵尸进程当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止。子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。进程表中代表子进程的数据项是不会立刻释放的,虽然不再活跃了,可子进程还停留在系统里,因为它的退出码还需要保存起来以备父进程中后续的wait调用使用。它将称为一个“僵进程”。如何避免僵尸进程调用wait或者waitpid函数查询子进程退
2020-07-15 13:44:08
542
原创 实现myatoi函数
myatoi()函数堪称经典,我相信很多童鞋都可以做出来,但是要做好却不容易。下面来看看myatoi()函数实现功能:(1)八进制,十进制,十六进制字符分别转整形数字 (2)遇到'.'退出 (3)有正负数 (4)防止整形数字越界,INT_MAX,INT_MIN ...
2020-07-14 19:45:45
1689
原创 return 和 exit
return和exit都表示退出的意思,但是二者大有区别,先来说区别吧。区别:1.retrun是关键字,exit()是函数调用 2.return 返回表示函数的调用结束,释放栈帧。exit表示退出进程,程序的结束。二者在调用函数的区别较明显,在主函数的话,功能一致,都退出程序。不管是return 0还是exit(0),都表示正常退出,1表示非正常退出。return -1,1,0的区别 (1)当表示结果为-1,0时,0表示正常退出,-1表示异常返回。 ...
2020-07-14 12:44:16
485
原创 c++ explict和implict关键字
explict关键字只能修饰拥有一个参数的类的构造函数,在c11中,假如有多个参数,但是除过第一个参数外,都有默认值的情况也算,表示显示类型转换,禁止隐式类型转换。而implict就是可以进行隐式类型转换。具体讲解请看链接:https://blog.csdn.net/guoyunfei123/article/details/89003369...
2020-07-13 01:47:57
524
原创 c语言单链表实现--约瑟夫环
之前我用数组实现过,具体的问题细节我就不细说了,有兴趣的朋友可以看一下,单链表的具体实现操作我也不讲了,之前博文有,这里只讲单链表的实现。注意的事项:链表成环#include <stdio.h>#include<malloc.h>#include <stdlib.h>typedef struct Node{ int data; struct Node* next;}Node, *LinkList; //循环单链表Node* IntCL...
2020-07-12 13:16:15
1267
原创 c++之const解析
之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点。知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自己的印象的同时,也方便以后查阅和学习。菜鸟一个,若有错误,望指正! const关键字 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。不管出现在任何上下文都是为这个目的而服务的。 const使用方法 定义const对象 co...
2020-07-10 15:50:16
289
1
原创 python pip升级安装包
命令:pip install <库名>我们知道python有大量的第三方库,这也是python的优势之一。pip就是python整的软件包管理系统,类似于Linux平台的yum仓库。如果不会用,不就白瞎了,但是作为小白,在学习之中遇到了版本不正确的时候,无法安装,也是上网搜,倒腾了半天终于好了。现在也来写写经验吧。这里讲在windows平台的使用,安装库有两种方式,直接打开windows的cmd窗口,执行命令安装;另外一种,本人用的是Pycharm编辑器,所以在编辑器的终端窗口Termi
2020-06-21 11:24:38
688
转载 Reactor模式和Proactor模式
目录Reactor模式和Proactor模式I/O模型分为以下几种:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞两种IO多路复用方案:Reactor和 Proactor现行做法ACE Proactor 框架怎样发送和接收数据设置事件处理器并发起I/O完成I/O操作建立连接ACE_Proactor完成多路分离器线程池单体模型如何添加一个接口应用Goldensdk模块Goldenserver模块参考文献Reactor模式和Proactor模.
2020-05-16 14:33:32
764
原创 什么是C++初始化列表
为什么要有初始化列表,初始化列表的作用什么,那些情况下必须要用初始化列表,这应该是令c++初学者头疼的问题了。下面就简单介绍一下首先什么初始化列表呢,我们先理解一下这个概念,c++对象的创建首先是开辟内存,然后调用构造函数,这里构造函数就分为隐式初始化和显示初始化,隐式初始化就没有初始化列表,显示就有。我们知道对象...
2020-05-15 10:52:01
1681
转载 C++的cin如何输入
cin输入字符串cin cin.get() cin.getline() gets getchar() gcount get getline ignore peek read readsome putback unget 编写acm题目时遇到一个问题,在输入string类型数据时,出现“错误 1 error C2679: 二进制“>>”: 没有找到接受“s...
2020-04-30 03:37:03
690
原创 c++两个队列实现栈和两个栈实现队列
//两个队列实现栈/*与用两个栈实现队列,思想一样,其实,这样要麻烦一点(栈实现队列时,只要把sa栈(此时为倒叙)的内容出栈,插入到sb(此时为正序),删除时一个一个来),因为在删除操作是总要出队列,入队列,直到剩余一个元素,即队头,删除*///这里用了模板template<class T>//类模板class Stack{public: void pus...
2020-04-29 02:35:04
495
转载 strlen和sizeof的区别
strlen是用来计算字符串的长度,遇到第一个NULL('\0')为止,不包括‘\0’。sizeof是用来计算变量或者对象、类型所占字节的多少。首先来看一个例子:char s1[] = "hello";char* s2 = "hello";char s3[10] = ''hello";sizeof(s1) = 5 strlen(s1) = 5...
2020-04-11 15:22:16
198
原创 c++中的malloc和 new的区别
解题思路:(1)malloc和new都是在堆上开辟内存的malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存,还可以进行初始化,如new int(10);表示在堆上开辟了一个4字节的int整形内存,初始值是10,再如new int[10] ();表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0。(2)malloc是函数,开辟内存需要传入字节数,如mal...
2020-04-11 15:09:05
347
转载 UDP数据报文大小
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层. UDP属于运输层,下面我...
2020-04-02 10:43:46
1181
转载 TCP报文结构
TCP报文是TCP层传输的数据单元,也叫报文段。1、端口号:用来标识同一台计算机的不同的应用进程。1)源端口:源端口和IP地址的作用是标识报文的返回地址。2)目的端口:端口指明接收方计算机上的应用程序接口。TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个...
2020-04-02 10:32:24
584
转载 TCP/IP数据报文长度
MTU:最大传输单元,以太网的MTU为1500BytesMSS:最大分解大小,为每次TCP数据包每次传输的最大数据的分段大小,由发送端通知接收端,发送大于MTU就会被分片TCP最小数据长度为1460Bytes这个跟具体传输网络有关,以太网的MTU为1500字节,Internet的MTU为576字节。MTU是网络层的传输单元,那么MSS = MTU - 20字节(IP首部) - 20字节(TC...
2020-04-02 10:25:41
8777
1
转载 B/B+树
B 树B 树就是常说的“B 减树(B- 树)”,又名平衡多路(即不止两个子树)查找树,它和平衡二叉树的不同有这么几点:平衡二叉树节点最多有两个子树,而 B 树每个节点可以有多个子树,M 阶 B 树表示该树每个节点最多有 M 个子树 平衡二叉树每个节点只有一个数据和两个指向孩子的指针,而 B 树每个中间节点有 k-1 个关键字(可以理解为数据)和 k 个子树( **k 介于阶数 M 和 ...
2020-03-23 17:49:28
687
2
转载 epoll聊天程序
项目介绍本项目是实现一个简单的聊天室,聊天室分为服务端和客户端。本项目将很多复杂的功能都去掉了,线程池、多线程编程、超时重传、确认收包等等都不会涉及。总共300多行代码,让大家真正了解C/S模型,以及epoll的使用。为了方便查看,代码已经改的很小白,绝对比nginx源码好理解(当然大家有兴趣的话,还是要拜读下nginx源码,绝对大有收获)。希望本项目能为大家以后的工作或者学习提供一点帮助! ...
2020-03-19 01:35:49
387
转载 线程同步
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。 静态分配:pthread_mutex_t mutex = PTHREAD_...
2020-03-17 17:59:30
172
转载 fork()写时拷贝技术
COW技术初窥在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才将父进程的内容复制一份给子进程。那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢??在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的...
2020-03-17 14:56:18
698
转载 主机字节序列和网络字节序列
网络字节序和主机字节序1、大端、小端字节序考虑一个16位整数,它由2个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。如下所示:术语“大端”和“小端”表示多个字节值的哪一端(小端或大端)存储在该值的起始地址。...
2020-03-17 14:54:38
586
转载 c/c++区别
一、面向过程语言和面向对象语言我们都知道C语言是面向过程语言,而C++是面向对象语言,说C和C++的区别,也就是在比较面向过程和面向对象的区别。C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算...
2020-03-17 02:06:43
344
转载 指针数组和数组指针的区别
一、指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别。其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针数组呢:A...
2020-03-17 02:04:58
365
转载 const的用法
先我们来看一下为什么要使用const呢?因为采用符号常量写出的代码更容易维护;指针常常是边读边移动,许多函数参数都是只读不谢的,const最常见的用法就是作为数组的界和switch分情况标记(也可以用枚举符代替)。分类:常变量:const 类型说明符 变量名常引用: const 类型说明符 & 引用名常对象:类名::fun(形参) const常数组:类型说明符 ...
2020-03-17 02:02:50
552
转载 #include<stack>的使用
c++ stl栈stack的头文件为:#includestack S;//声明一个对象S.empty();//栈空返回true 否则falseint x=S.size();//返回栈中元素个数于xS.pop();//移除栈顶元素S.push(x);将x置于栈顶x=S.top();返回栈顶元素...
2020-03-15 02:54:50
656
原创 进程和线程解析
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽象成各种数据对象:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数。所以创建一个进程的过程就是这些数据对象的创建过程。 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通...
2020-03-14 16:10:16
344
转载 pthread多线程讲解
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽象成各种数据对象:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数。所以创建一个进程的过程就是这些数据对象的创建过程。 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通...
2020-03-14 05:29:48
1187
翻译 什么是TLB
TLB种类 TLB在X86体系的CPU里的实际应用最早是从Intel的486CPU开始的,在X86体系的CPU里边,一般都设有如下4组TLB: 第一组:缓存一般页表(4K字节页面)的指令页表缓存(Instruction-TLB); 第二组:缓存一般页表(4K字节页面)的数据页表缓存(Data-TLB); 第三组:缓存大尺寸页表(2M/4M字节页面)的指令页表缓存(Instr...
2020-03-14 05:13:38
1389
转载 C语言详解itoa和atoi
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa():将无符号长整型值转换为字...
2020-03-07 19:33:57
1196
原创 C语言--疑问解析
1.局部变量未初始化值不确定,全局变量初始值为0;(vs2017局部变量不初始化报错)2.大小端模式问题:大端模式:高位数据存储在低地址内存单元,数据的低位数保存在高地址内存单元中。即地址由低到高,而数据字节位数由高到低。小端模式:数据的低位字节保存在高地址内存单元,数据的高字节保存在低地址内存单元中。即地址由低到高,数据字节位数由高到低。假设变量x的类型为int,位于地址Ox:1...
2020-03-07 12:06:19
359
原创 堆和栈
堆和栈的区别:作为开发人员,面对堆和栈这两个概念时,在不同的情况下,有不同的含义。一般情况下,有这两种含义:1)在内讲,作为内存的管理方式。2)在数据结构下,堆和栈作为两种常用的数据结构。栈简介:栈由操作系统分配,用来存储局部变量,函数参数等,其操作方式类似与操作系统中的栈。变量根据先后顺序压入栈中,并且相邻的变量之间不会有其他变量,栈的地址由高到低,后定义的变量地址小于先定义的变量地址...
2020-03-06 03:10:02
312
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅