c++随记 今天老师提出的概念问题,搜索了一下# 内存泄漏与内存溢出的区别内存泄漏(Memory Leak)和内存溢出(Memory Overflow/Out of Memory)是两种常见的内存相关问题,但它们的含义和产生原因不同:## 内存泄漏 (Memory Leak)- **定义**:程序中已动态分配的堆内存由于某种原因未能被释放,造成系统内存的浪费- **原因**: - 分配的内存未被正确释放(如忘记调用free/delete) - 对象引用未被及时清除(如集合中的对象不再使用但未被移除) -
三次握手与四次挥手 第一次握手:客户端向服务器端发送报文证明客户端的发送能力正常第二次握手:服务器端接收到报文并向客户端发送报文证明服务器端的接收能力、发送能力正常第三次握手:客户端向服务器发送报文证明客户端的接收能力正常。
进程--信号量 当多个进程同时访问共享资源时,会产生资源竞争,最终最导致数据混乱: 不允许同时有多个进程访问的资源,包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构)访问临界资源代码可以理解为,狼多肉少,假如有5个人要喝水,但只有一个杯子,为了不让他们打起来,你设定了规则,指到谁,谁才能喝水由内核维护的整数,其值被限制为大于或等于0信号量可以执行如下操作:一般信号量分为 二值信号量 与 计数信号量一般指的是信号量的值为1,可以理解为只对应一个资源。
进程--消息队列和共享内存 共享内存是将分配的物理空间直接映射到进程的用户虚拟地址空间中,减少数据在内核空间缓存共享内存是一种效率较高的进程间通讯的方式在 Linux 系统中通过 ipcs -m 查看所有的共享内存。
进程--信号 信号是在软件层面上是一种通知机制,对中断机制的一种模拟,是一种异步通信方式。一般具有如下特点:在Linux系统中 kill -l 可查看该信号在用户键入INTR字符(通常是Ctrl-C)时发出,终端驱动程序发送此信号并送到前台进程中的每一个进程。该信号和SIGINT类似,但由QUIT字符(通常是Ctrl-)来控制。该信号在一个进程企图执行一条非法指令时(可执行文件本身出现错误,或者试图执行数据段、堆栈溢出时)发出。该信号在发生致命的算术运算错误时发出。
进程的退出与等待 exit()属于系统调用,能够使进程停止运行,并释放空间以及销毁内核中的各种数据结构exit()基于_exit()函数实现,属于库函数, 会自动刷新I/O缓冲区waitpid使用阻塞的方式等待任意子进程退出waitpid使用非阻塞的方式等待子进程退出 :while((cpid=waitpid(-1,&status,WNOHANG))==0);如果不关心状态值,子进程退出状态值的指针为NULL;wait(NULL);
菜鸟初学进程 什么是进程?拿一个软件打比方,假如你要玩无畏契约,点击图标,会等待几秒,然后点击“开始游戏”,此时游戏开始运行。程序是静态的,真正运行的是进程。Ctrl+Alt+Delete 可以查看本机进程进程一但产生,cpu就会分配资源,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元,同时进程也是线程的集合体。
初学 多进程多线程 简单来说进程就是程序执行的过程,它代表程序在干嘛。如图,在电脑中的任务管理器中就可查看进程,(程序是静态的,保存在磁盘中它是保存在磁盘上的指令的有序集合,没有任何执行的概念它是程序执行的过程,包括了动态创建、调度和销毁的整个过程进程是受操作系统调度的,一旦有进程产生,就会开辟空间。
数据结构 简单来说,可以理解为一种数据结构类型,可以用结构体来理解(新手,有错大佬请指点)链表由节点(链表中每一个元素叫节点)构成(可以很多),可以理解为在你运行程序时由你决定是否创建这个节点。节点由两个部分:1. 数据域:储存数据元素2.指针域:存放下一个节点的地址如上图,在结构体 node 里存放的 data 就属于数据域,下面的next就是指向下一节点的指针注意:节点的开辟是动态开辟的(malloc),属于堆。
初识函数 在维基百科中,对于函数的定义是子程序。子程序是一个大型程序中的某部分代码,由一个或多个语句块组成,他负责完成某项特定的任务,而且相较于其他的代码,具备相对的独立性。【口语化解释】函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给用户。由于库函数不能干所有的事情,所以更加重要的是自定义函数。
C语言:结构体 结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。结构体成员可以是普通变量,数组,指针,甚至是其它的结构体可以理解为一种数据类型,类似与int ,float可以用来声明变量在使用的过程中,发现结构体类型书写不方便,可以通过typedef关键字给结构体类型起别名。