- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 C++的vector正确释放内存方式
尝试三: 在一段段屏蔽代码后发现vector_A在push_back()的时候发生了拷贝,然后临时变量未free,后续添加了临时变量的释放,程序内存占用问题得到解决(其中比较费解的是临时变量没有free掉,为什么会影响vector_A以及其他vector内存的清理)。尝试三:再仔细看每个vector的内部数据结构,发现vector_A的数据是使用malloc申请的内存,故需要特殊处理,free()掉其中每个元素,此次操作后内存占用依旧无变化。
2023-08-04 15:05:54
1850
原创 C++多线程交替打印数字(奇数偶数)
多线程交替打印1,2,3...10使用互斥锁实现#include <iostream>#include <thread>#include <mutex>using namespace std;mutex my_mutx;const int max_num = 10;int num;int num2;//使用锁交替打印-----beginvoid threadfuncjishu(){ while (1) { my_.
2021-03-26 17:22:56
1316
原创 C/C++内存管理
C/C++内存管理 (1)C/C++内存分布 栈:存放非静态局部变量/函数参数/返回值等等,栈是自上向下增长的 堆:用于动态内存分配,堆是自下向上增长的 数据段:存储全局数据和静态数据 代码段:可执行代码/只读常量 (2)new的使用 // 动态申请一个int类型的空间 ...
2019-09-08 15:08:55
215
原创 C/C++程序执行过程
程序执行过程 (1)预处理 预处理就是对源程序进行宏替换,条件编译,头文件展开,去除注释 (2)编译 编译阶段就是将上一步预处理后的文件进行语法分析,语义分析以及优 化后产生汇编代码文件 (3)汇编 汇编就...
2019-09-08 09:59:59
1608
原创 内联函数inline 和 宏define的区别
宏define 定义预编译时的宏只是在编译阶段进行简单的代码替换,多用于定义表达式和常量。 优点:1.定义的宏就是在编译阶段替换,不会像普通函数那样涉及到 2.参数的出栈和入栈,这样效率就高 缺点:1.这种宏定义在形式上类似于一个函数,但是在使用的时候,仅仅 是在做预处理器符...
2019-09-07 18:01:09
342
原创 GitHub基本使用
GitHub基本使用目的:根据github托管项目代码一、GitHub基本概念: 仓库(Respository):仓库用来存放项目代码,每个项目一个仓库 收藏(Start):收藏项目 复制克隆项目(Fork): 复制别人写好的项目 发起请求(Pull Request):克隆别人的项目自己做了改动,觉得比以前好,就 ...
2019-08-01 11:34:25
471
原创 IO多路转接(select/poll/epoll)
IO多路转接:多路复用 IO事件控制对大量描述符进行是否具备IO条件的事件(可读/可写/异常)进行监控 作用:处理描述符的高并发事件 多路转接模型: 就绪: 读事件就绪:缓冲区有数据可读取 写事件就绪:缓冲区有空闲空间/ select:内核中通过遍历描述符集合中的描述符,判断是否相应时间就绪;若描述 符就绪了,...
2019-06-30 08:50:09
221
原创 高级IO(五种IO模型)
五种IO模型: 阻塞IO 非阻塞IO 信号驱动IO 异步IO 多路转接IO1.阻塞IO 为了完成功能发起调用,若不具备完成条件,则等待完成后返回2.非阻塞IO 为了完成功能发起调用,若不具备完成条件,则立即报错返回阻塞与非阻塞的最大区别:发起调用之后是否立即返回3.1同步 ...
2019-06-30 08:38:21
359
原创 TCP网络通信三次握手与四次挥手
为什么三次握手是三次? 三次握手指的是客户端在与服务端建立连接时发送三次信号,首先客户端给服务端发送SYN请求,并且客户端进入SYN_SENT状态,这时候服务端监听到有新来的客户端要进行连接,于是服务端就给客户端回复SYN和ACK请求,并且服务端进入SYN_RCVD状态;接下来客户端收到消息后就进入ESTABLISHED状态,并且客户端给服务端发送ACK请求,当服务端接收...
2019-06-29 16:10:40
251
原创 网络通信--链路层
链路层:负责相邻设备间的数据帧传输---Ethernet--交换机 以太网协议字段:源mac地址,目的mac地址,网络层协议,数据,CRC校验和 相邻设备之间传输定位--通过mac地址来完成 mac地址:uint8_t mac[6]--48位--定位标识相邻的物理设备的物理网卡地址 ...
2019-06-29 15:38:51
629
原创 网络通信--网络层(路由器)
网络层 现在网络通信依然使用IPV4;IPV4 中的ip地址信息只有4g个;ip地址不够用;使用私网共同使用同一个ip地址 上网加上DHCP动态地址分配技术实现全民上网; 为了避免局域网中ip地址和互联网中的ip地址冲突,因此组建局域网必须使用一些指定的地址; 这些地址不能在互联网中出现...
2019-06-29 15:37:55
352
原创 网络通信----传输层:负责端与端之间的数据传输----TCP/UDP
传输层:负责端与端之间的数据传输----TCP/UDP 一、 UDP: UDP协议:无连接,不可靠,面向数据报(不会产生粘包问题) UDP协议报头:源端口,目的端口,数据包长度,校验和 校验和:二进制反码求和 面向数据报不会产生粘包问题:因为UDP数据包中...
2019-06-29 15:34:42
1815
转载 网络通信----应用层(http协议)
应用层知名协议HTTP URL:统一资源定位符 协议名称://用户名:密码@服务器地址:服务器端口/请求的资源路径?查询字符串#片段标识符 urlencode/urldecode: url的编码和解码 url为什么要编码:编码通常针对的是查询字符串,因为url中特殊字符都有特...
2019-06-29 15:28:32
347
原创 基于UDP/TCP网络套接字编程
套接字网络编程 : IP地址:唯一标识网络上的一台主机 IPV4:uint32_t ---为了便于记忆,以点分十进制字符串形式展示 IPV6:uchar addr[16]---不向下兼容IPV4---没有发展起来 saddr(源IP地址)--> daddr(目的IP地址) 从哪个主机发送...
2019-06-29 15:06:23
365
原创 网络的协议分层
网络协议分层OSI七层参考模型 TCP/IP五层参考模型 对网络通信过程进行了分层: 每一层用什么协议,实现什么功能 应该提供什么服务,应该提供什么接口,方便形成标准,便于使用OSI---开放系统互联 应用层->表示层->会话层->传输层->网络层->链路层->物理层 TCP/IP五层模...
2019-05-14 19:52:00
495
原创 多线程
多线程 **** 1.线程概念:什么是线程,与进程的关系 进程就是一个运行中的程序,在操作系统中,一个程序运行起来,程序被加载到内存中, 操作系统创建一个进程描述符(进程控制块)PCB 对程序进行描述控制,因此进程就是pcb, 在Linux下就是task_struct结构体 Linux线程用进程pcb模拟,因此Linux的线程...
2019-05-14 19:47:38
134
原创 C++基本语法
一、命名空间1.概念 由于在C或C++中变量函数都是大量存在的,使用命名空间就是对标识符名称进行本地化,以避免命名冲突或名字污染2.定义 定义命名空间需要使用 namespace 关键字,后面跟命名空间的名称,最后面接一对{}即可,{}中的是命名空间中的成员//1. 普通的命名空间namespace N1 // N1为命名空间的名称{//...
2019-05-11 16:46:58
183
原创 用栈实现队列
使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1qu...
2019-04-20 17:48:52
167
原创 二叉树的前序遍历(非递归写法)
给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶:通过迭代完成/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode ...
2019-04-20 17:46:59
495
原创 linux--进程信号
进程信号 ** 信号:事件通知---软中断 信号基本认识:每个信号都对应了一个事件 linux信号的种类:kill -l 查看信号种类--62种信号 1 ~31 是非可靠信号(非实时信号) 34~64 是可靠信号(实时信号) 信号的生命周期 (1)信号的产生...
2019-04-19 23:27:02
250
原创 Linux基础IO
基础I/O ** 回顾C库的 IO 接口 linux下 IO 的系统调用接口 文件流指针 文件描述符 文件重定向 linux下ext2文件系统 indoe节点 软链接/硬链接 动态库/静态库生成 1.回...
2019-04-19 23:19:17
145
原创 Linux进程间通信
进程间通信 IPC ** 熟悉进程概念,掌握进程间通信机制 基本介绍:干什么,如何通信,为何这么复杂 进程间进行交流(数据传输,数据共享,进程间的控制,事件通知) 因为进程的独立性,因此通信需要双方拥有公共的媒介才能通信 而这个媒介由操作系统提供;因为通信场景不同,因此操作系统也...
2019-04-19 22:11:03
153
原创 C语言文件相关操作(fclose fopen.....)
文件的打开和关闭 文件的典型操作:打开文件 读文件 写文件 关闭文件 文件在读之前应该先打开文件,在使用结束之后应该关闭文件ANSIC规定使用 fopen 函数来打开文件,用 fclose 来关闭文件FILE *fopen( const char *filename, const char *mode );//打开文件//filename ...
2019-04-11 17:19:17
727
原创 C语言指针还可以这样理解
什么是指针?指针就是一个变量,用来存放地址,地址唯一标识一块内存空间 指针的大小是固定的4/8个字节(32位平台/64位平台)常见的指针都有哪些? 字符指针 数组指针 指针数组 函数指针 回调函数1.字符指针 字符指针类型char*,用法如下:int main(){ //字符指针两种使用方式 //第一种 char ch =...
2019-04-10 19:46:18
150
原创 自写mini-shell深入理解shell原理
获取命令行参数->对数据进行解析->创建子进程->程序替换 scanf 解析出命令名和参数 fork execvp/execlp
2019-01-13 14:44:13
309
原创 linux系统编程—进程
进程概念 *** 冯诺依曼体系结构:现代计算机的硬件结构 五大硬件单元: 输入设备:键盘等 输出设备:显示器 存储器:内存:30Gbps 硬盘:...
2019-01-13 14:43:37
286
原创 Linux常用工具
常用工具: 1. yum 软件包管理器 2. vim 文本编辑器 3. gcc 编译器 4. makefile 项目编译工具 5. gdb 调试器 6. git 1. yum 软件包管理器 1.1查看可安装的软件包 安装软件包 移除软件包 ...
2019-01-13 14:40:57
253
原创 初识linux以及基本操作
1.初识: linux,发展背景 multics--飞机大战 肯.汤普森--- unix(用汇编代码写的) 李娜丝--linux----开源 ,免费 发行版linux 操作系统=linux内核+外部应用 dabian ubuntu centos r...
2018-11-30 22:28:32
255
cnwizards.rar
2020-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人