- 博客(28)
- 收藏
- 关注
原创 运算符重载
运算符重载:1.不能改变运算符的优先级2.满足和系统提供的运算符相同的逻辑3.不能创造新的运算符浅拷贝:将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用用string生成一个对象str1,直接将对象赋给str2,共用一块内存。(原对象和新生成的对象共用一块实体)影响:1.两个对象的_str指向同一片空间,那么析构的时候这片空间必然会析构两次。2.一个的改...
2019-07-30 18:31:39
90
原创 c++类默认函数
构造函数:(初始化对象所占的内存 赋予资源;可以重载 ;不依赖对象调用;不同手动调用 )1.构造函数作用是对对象进行初始化,在堆上new一个对象或在栈上定义一个临时对象时,会自动调用对象的构造函数。有初始化列表和构造函数体内赋值两种方式,初始化列表在初始化对象时更高效(每个成员在初始化列表中只能出现一次),减少了一次赋值操作,推荐此方法;以下成员变量必须在初始化列表中初始化:常量成员变量、...
2019-07-28 15:21:02
102
原创 c/c++关键字,相互调用
一、函数重载:在同一个作用域中,如果有多个函数的名字相同,同一个作用域,但是形参列表不同(参数类型不同或参数个数不同),返回值类型可同也可不同,我们称之为重载函数。重载的函数是通过形参列表区分的,与返回值类型无关。函数重载其实是"一个名字,多种用法"的思想,不仅函数可以重载,函数重载就是重定义;覆盖是重写。二、new和malloc的区别:1.new关键字 malloc函数2.new自由...
2019-07-27 16:35:02
254
原创 死锁
概念:多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行会带来新的问题——死锁。死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。死锁产生的原因:1、系统竞争资源:通常系统中拥有的不可剥夺资源,数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争才可...
2019-07-21 15:52:21
96
原创 函数调用堆栈,调用约定
堆栈的具体作用:1、传递参数(为被调用函数提供参数)2、保存局部变量3、保存中间变量4、在系统中用堆栈保存任务的状态(例如各个寄存器的值)1.什么是堆栈编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员自己定义一个数组作为堆栈。Windows为每个线程自动维护一个堆栈,堆栈的大小可以设置。编译器使用堆栈来堆放每个函数的参数、局部变量等信息。函数调用经常...
2019-07-19 15:21:01
209
原创 c/c++编译链接运行、虚拟地址空间布局
预编译:一、预编译 .i文件1、删除#define文本替换、2、#if #endif #elif3、递归展开#include4、删除注释5、添加行号和文件标识6、#pragma(设定编译器的状态或者是指示编译器完成一些特定的动作)二、编译 .s文件1、词法分析2、语法分析3、语义分析4、代码优化5、生成汇编指令三、汇编 .o1、翻译指令四、链接 .ex...
2019-07-19 14:19:59
444
原创 堆和栈的区别。static关键字用法
堆和栈的区别:1、管理方式不同;2、空间大小不同;3、能否产生碎片不同;4、生长方向不同;5、分配方式不同;6、分配效率不同;管理方式: 栈:系统开辟,系统释放堆:手动开辟,手动释放空间大小:一般来讲在32位系统下,堆内存可以达到2G的空间,栈空间大小是1M。碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来...
2019-04-04 23:18:18
660
原创 虚函数
Virtual 虚函数,编译阶段,类中多了一个vfptr指针指向vftable(虚表,存放虚函数的入口地址)若基类中的函数是虚函数,则派生类中同名同参的函数也是虚函数(系统自动添加)Rtti(运行时类型信息):通过运行时类型识别能够使基类的指针或者引用来件检查这些指针或引用所指对象的实际派生类型即 运行时确定对象的类型里面主要包含了两个函数typeid函数和dynamic_castTyp...
2019-04-03 22:04:46
114
原创 C++设计模式
1.单例模式:只能生成一个对象的类首先需要将生成对象的接口析构函数和拷贝构造函数的接口屏蔽起来,其次在类中提供一个接口来生成唯一的对象为了防止临时对象的生成需要将该接口的返回值设置为类对象的引用或指针而且这个接口应该是静态的,因为如果不是该接口需要依赖函数对象调用而函数对象又要依赖该接口生成最后 静态接口只能访问静态成员变量,所以还需要定义一个静态对象的指针,并在类外初始化但是一般写出...
2019-04-03 22:00:34
168
原创 进程抢占和上下文切换
上下文切换,也就是从一个可运行进程切换到还有一个可运行进程。进程切换schedule函数调用context_switch()函数完毕下面工作:1.调用定义在<asm/mmu_context.h>中的switch_mm(),该函数负责把虚拟内存从上一个进程映射切换到新进程中。2.调用定义在<asm/system.h>中的switch_to(),该函数负责从上一个进程的处理...
2019-04-03 12:58:44
425
原创 进程调度算法
1:可运行队列:调度程序中最主要的数据结构式运行队列(runqueue)。可运行队列是给定处理器上的可运行进程的链表,每一个处理器一个。每一个可投入运行的进程都唯一的归属于一个可运行队列。此外,可运行队列中还包括每一个处理器的调度信息。所以,可运行队列也是每一个处理器最重要的数据结构。为了避免死锁,要锁住多个执行队列的代码必须总是依照相同的顺序获取这些锁:依照可执行队列地址从低向高的顺序。2、优...
2019-04-02 22:31:35
112
原创 进程调度与进程管理
进程管理:1、创建进程:在Linux系统中,全部的进程都是PID为1的init进程的后代。内核在系统启动的最后阶段启动init进程。该进程读取系统的初始化脚本(initscript)并运行其它的相关程序,终于完毕系统启动的整个进程。Linux提供两个函数去处理进程的创建和运行:fork()和exec()。首先,fork()通过拷贝当前进程创建一个子进程。子进程与父进程的差别只在于PID(每一个进...
2019-04-02 22:30:54
385
原创 Linux下的基本命令与gdb调试
15:Linux命令:一:系统目录结构(文件系统)1.与Windows相比Linux是一个多用户的,因此强调权限,几个用户几个家目录,2./bin:可执行程序/命令(二进制可执行程序)3./boot:内核与系统启动有关的文件4./home:所有普通用户的家目录5./etc:系统的配置文件6./lib:存放库文件7./proc:是一个虚拟目录,进程在内存中的映像8./usr:存放系...
2019-04-02 16:32:33
135
原创 http总结
HTTP协议:超文本传输协议,在应用层,使用80号端口(1)http请求方法:HEAD GET和POST:get就是获取资源 post就是提交资源(例如输入密码)(2)http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,(3)HTTP返回码:1xx:指示信息–表示请求已接收,继续处理2xx:成功–表示请求已被成功接收、理解、接受3xx...
2019-04-02 16:28:02
109
原创 select epoll poll 区别(I/O复用)
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用...
2019-04-01 16:33:16
90
转载 HTTP和HTTPS
一,HTTP和HTTPS基本概念 深入学习某个东西时,我们先来从维基百科上看看它俩的概念。 HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的...
2019-04-01 16:31:07
124
原创 IP
IP(网络层)在我看来其实就是复用下层繁多的链路层协议,为上层传输层提供统一的接口,就是说,网络层对下层繁多的协议进行地址管理,每个设备不管它的物理层及其而对应的链路层使用的是什么协议,都对他们统一的使用IP地址进行唯一的标识,进行一跳一跳的传输。而向上,对传输层的协议进行分用(识别IP首部的协议字段),向上分用多个协论(TCP,UDP,ICMP,IGMP),保证不同的协议能被分到不同的协议软件中...
2019-04-01 16:22:01
141
原创 TCP和UDP
UDP为啥不可靠Udp是单向的数据发送,不用确认,不重传,不超时,不设置包的序号,不重排,不会发生队首阻塞,不跟踪链接状态,不必建立连接或重启状态机,不需要拥塞控制,不内置客户端或网络反馈机制TCP为啥可靠在tcp状态转移图,各个状态,tcp可靠性中已总结。tcp和udp的区别:1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供...
2019-04-01 16:10:56
569
原创 类百度网盘功能实现
类ftp文件传输:主要功能:文件的上传与下载、通过客户端修改服务器文件的相关命令。项目描述:运用流式套接字建立客户端与服务器的正常连接,通过多线程编程来实现多个客户端与服务器交互, 客户端从键盘输入命令向服务器发送,服务器端通过分割字符的方式判断用户需要执行的命令,并执行;服务器端创建通过fork()创建一个子进程,用execvp()进程替换,将子进程替换成用户需要实现的功能;文件下载: 客户...
2019-04-01 15:50:43
1570
原创 OSI七层模型
1、OSI七层模型的划分OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。2、各层功能定义这里我们...
2019-04-01 15:49:10
164
原创 tcp状态转移图,各个状态;tcp可靠性
三次握手四次挥手状态转移图:Connect发起链接时三次握手Cli (SYN-SENT) --------> SYN --------> ser<--------ACK.SYN <--------(SYN_RECVIVED)(ESTABLISHED)-------->ACK------>(ESTABLISHED)客户端对服务器说:你可以...
2019-04-01 15:43:18
311
原创 指针的运算
上一篇只是简单的介绍了一下指针,指针还有很多的运算:指针的算术运算+,-指针p加法需要调整,(比如+1,是+1个单元格的大小的字节,即调整的权重为sizeof(p),或者)调整的权重为指针去掉一个号,求sizeof;简述:指针p加(减)法需要调整,调整的权重为指针去掉一个*号,求sizeof指针不可以+指针指针-指针,也需要调整,调整权重同上;上述为指针算数运算的定理;用例子来说明吧:...
2019-04-01 15:19:09
117
原创 printf函数
其实c语言中有很多可变函数,令人头痛,例如printf()函数,其函数原型为:int printf( const char* format, …);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:printf("%d",i);printf("%s",s);printf(“the...
2019-04-01 15:18:21
135
原创 迭代器功能实现
迭代器的模式定义:提供一种方法能都依序访问某个聚合物(容器)内所含的各个元素,而又无需暴露该聚合物的内部表述方式。迭代器是一种类似指针对象,最重要的工作是进行operator和operator->进行重载,除此之外还有++,==,=这一系列运算符的重载,不可避免地曝光了很多结构的实现细节。所以将迭代器的开发任务交给结构的设计者更加高效。迭代器的简单实现:templateclass It...
2019-04-01 15:17:09
152
原创 string容器
实现string容器:string 具有动态性,不必担心string的内存分配;只管添加新内容进去就行了,string会自动扩展并保存新的输入。string 容器简单实现:class Iterator;class String{public:typedef Iterator iterator;String(char* pstr) :mpstr(new charstrlen(pstr)...
2019-04-01 15:16:31
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人