- 博客(19)
- 收藏
- 关注
原创 C语言文件学习--感受文件顺序(随机)读写速度
功能:1、每次读取文件前清除缓存;2、分别计算一次写一个g文件、分多次写一个g文件、一次读取一个g文件、逆序读取文件、多次从不同起点读取文件的时间;代码如下:#include<stdio.h>#include<sys/time.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#define N 1024*1024*1024#define M 1024*1024#def
2020-12-08 22:34:15
449
原创 多线程学习---创建一个线程读文件?
功能:先创建一个g的文本文件,主线程输入偏移量和需要读取文件的长度,接收到需要读取的文件时创建一个线程从偏移量开始读取文件并打印到屏幕上;代码如下:#include<stdio.h>#include<malloc.h>#include<string.h>#include<pthread.h>#define N 1024*1024*1024struct Th{ long int offset; long int len;};
2020-12-08 22:24:42
283
原创 C语言实现生产者消费者(条件变量和信号量)问题?
条件变量实现如下:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>//节点结构体struct msg{ int num; //数据区 struct msg *next; //链表区};struct msg *head = NULL;//头指针//struct msg *mp = NULL; //节点指针//利用宏定义
2020-12-08 22:14:48
548
原创 C语言实现哲学家(信号量和锁)问题
代码如下:#include<stdio.h>#include<pthread.h>#include<semaphore.h>#define N 5sem_t chopsticks[N];sem_t r;int philosophers[N] = {0,1,2,3,4};pthread_mutex_t mutex[N];void *philosophe1(void *arg){ int i = *(int *)arg; int
2020-12-08 22:09:19
735
原创 TCP拥塞控制?
拥塞控制:TCP模块为了提高网络利用率,降低丢包率,并办证网络资源对每条数据流的公平性而采取的控制手段。拥塞控制包含四部分内容:慢启动、拥塞避免、快速重传、快速恢复。慢启动:网络传输刚开始时,并不知道网络的实际情况,所以采取一种试探的方式控制数据的发送速率。慢启动阶段,数据的发送速率以指数方式增长,即就是拥塞窗口的增长,每次都是收到确认报文段数量的2 倍。可以看出慢启动并不慢,拥塞窗...
2019-08-09 20:33:35
216
原创 同步与异步,阻塞与非阻塞
同步和异步关注的是消息通信机制同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是等被调用者准备好数据后反过来通知调用者。阻塞和非阻塞关注的是程序在等待调用结果(...
2019-08-09 20:13:51
180
原创 三种io复用的总结
io复用的作用是能使程序同时监听多个文件描述符;一般在下面几种情况下要用到io复用:客户端程序要同时处理多个socket。客户端程序要同时处理用户输人和网络连接。TCP服务器要同时处理监听socket和连接socket。服务器要同时处理TCP请求和UDP请求。服务器要同时监听多个端口,或者处理多种服务。Linux下实现I/O复用的系统调用主要有select、poll 和epoll以...
2019-08-09 19:46:07
1005
原创 多线程同步pv操作循环打印ABC
首先根据信号量的值可以将信号量分为二值信号量和计数信号量(计数信号量)就像一间公共厕所,里面一共有十个坑(最大是32767),算是十个资源。在同一时间可以容纳十个人,当满员的时候,外面的人必须等待里面的人出来,释放一个资源,然后才能在进一个,当他进去之后,厕所又满员了,外面的人还得继续等待…。(二值信号量)就像自己家的卫生间,一般只有一个马桶,在同一时间只能有一个人来用。信号量只能进程两个原...
2019-08-08 19:25:02
629
原创 C++的(try catch throw)异常处理的简单总结
设计的关键字: try catch throwtry{}:括起来的是,有可能产生异常的代码;catch:必须跟在try的后面,一个try后面可以跟多个catch块,每一个catch()的参数列表中,都需要填写一种异常的类型,用来捕获代码抛出的相应的异常数据,在catch块进行处理,处理完成后,代码逻辑继续向下正常运行。throw:用来抛出异常数据的,可以是任意类型的异常数据。什么是异常的栈展...
2019-08-08 14:28:14
412
原创 new和delete malloc和free之间的一些总结
首先说一下三种newA.new operator, delete operator : 申请内存+构造函数B.new[], delete[] : 用于数组类的操作C.placement new : 定点new,它用于在给定的内存中初始化对象,也就是说你手中已有一块闲置的内存,例如:void* buffer = operator new(sizeof(string));//那么现在buffer...
2019-08-08 14:04:41
137
原创 C/C++的区别?(总结)
首先在大体上,C 是面向过程的语言,而 C++是面向对象的语言,因此 C++语言中有类和对象以及继承多态这样的 OOP 语言必备的内容,此外 C++支持模板,运算符重载,异常处理机制,以及一个非常强的 C++标准模板库 STL,另外一个 Boost 库现在也归属 C++标准库,提供了很多强大的功能。C++支持类对象,类和类之间的代理,组合,继承,多态等等面向对象的设计,有很多的设计模式可以直接使用...
2019-08-08 12:41:22
186
原创 C&CPP代码编译链接运行过程简单描述
编译 :一个工程的所有源文件(*.c *.cpp *.cc *.h *.hpp)是独立编译的1.预处理(预编译):以#号开头的预处理指令,如#include #defifine #ifdef #else #elif #endif 除#progma(链接so库,需要保留到链接阶段),删除注释等2.编译阶段:语法,语义分析检查,代码优化(gcc -O2),汇总所有的符号(函数符号,变量的符号)...
2019-08-08 12:12:56
304
原创 函数的简单调用过程
ebp和esp指针来标识一个函数的栈底和栈顶 main -> add(int a, int b)从右向左把sum函数的实参入栈把call指令的下一行指令地址压入栈在这里插入代码片push ebp 把main函数栈底地址入栈mov ebp, eap 让ebp指针指向sum函数的栈底sub esp, 4Ch 相当于给sum开辟栈帧rep stos指令(for) 给ebp<-...
2019-08-08 11:47:32
211
原创 进程虚拟地址空间的简单总结
进程地址空间中分为各个不同的部分:(1)由于系统内核中有些代码、数据是所有进程所公用的,所以所有进程的进程地址空间中有一个专门的区域存放公共的内核代码和数据,该区域内的内容相同,且该虚拟内存映射到同一个物理内存区域。(2)进程在执行的时候,需要维护进程相关的数据结构,比如页表、task和mm结构、内核栈等,这些数据结构是进程独立的,各个进程之间可能不同。这些数据结构在进程虚拟地址空间中一个专门...
2019-08-07 19:23:57
809
原创 git的简单上传与clone
在本地通过git clone把远程仓库上的项目代码拉到本地,如下:然后打开本地的Git Bash执行以下命令这样在本地电脑的目录文件下可以看到文件已经下载在上传文件时:git add命令可以把本地修改的代码或者文件,添加到本地暂存区(后面讲详细原理),如下:通过git commit提交命令,把修改的代码文件,从暂存区提交到本地的master分支上去通过gitpush命令,把本地...
2019-08-07 17:54:04
332
原创 C++的继承
继承有3种形式:私有继承、保护继承、公有继承,缺省的继承方式是私有继承。继承的好处是什么?1.基类给所有派生类提供公共的属性(成员变量)和方法(成员函数),通过继承达到代码复用的目的。2.基类可以给所有派生类提供统一的纯虚函数接口,派生类通过函数重写,达到多态调用的目的。(OOP的很多设计模式离不开继承和多态,为了达到良好的软件设计,如高内聚,低耦合,遵循‘开-闭’原则等,继承和多态是必须涉...
2019-07-31 16:57:21
533
原创 浅谈C++多态
什么是多态? C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许...
2019-07-31 13:41:33
150
原创 C++中指针和引用的区别?传值、传址、传引用的区别?
一、概念指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元。引用:引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。举例:int a=10;int* p=&a;//指针,定义了一个整型变量a和指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。int& b=a;//引用,一个整形变量a和这个整形a的引用b,事...
2019-07-31 11:01:07
242
原创 常见的几种排序
目录一、冒泡排序:二 、直接选择排序:三、直接插入排序:四、希尔排序五、快速排序快速排序三种找基准方式及两种优化六、堆排七、归并排序一、冒泡排序: 时间复杂性:一般平均是O(n^2),最好的情况是O(n),最坏的情况是O(n^2)。 空间复杂性:O(1)。 稳定性:稳定排序。 冒泡...
2018-11-20 17:21:55
319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人