自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

转载 系统级I/O

一个Unix文件就是一个m个字节的序列:B0,B1,B(\k),B(\m-1)所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,而所有的输入和输出都被当做对相应的文件的读和写来执行。这种将设备优雅的映射为文件的方式,允许Unix内核引出一个简单的、低级的应用接口,称为Unix I/O打开文件。一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,叫

2017-06-24 21:48:30 487

转载 make(9)

实战需求:自动生成target文件夹存放可执行文件自动生成objs文件夹存放编译生成的目标文件(*.o)支持调试版本的编译选项考虑代码的扩展性工具$(wildcard _pattern) 获取当前工作目录中满足_pattern的文件或者目录列表$(addprefix _prefix,_names) 给名字列表_names中的每一个名字增加前缀_prefix关键技巧自动获取当前目

2017-06-18 10:51:32 163

转载 make(8)

makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用在makefile中支持自定义函数,并调用执行通过define关键字实现自定义函数函数定义define func1 @echo "My name is $(0)"endefdefine func2 @echo "My name is $(0)" @echo "Param => $(

2017-06-17 23:17:44 242

转载 make(7)

条件判断语句可以根据条件的值决定make 的执行可以比较两个不同变量或者变量和常量值if xxx (arg1,arg2)# for tureelse#for falseendif注意:条件判断语句只能用于控制make实际执行的语句;但是不能控制规则中命令的执行过程常用形式:ifxxx (arg1,arg2)其他形式ifxxx "arg1" "arg2"ifxxx 'arg1' 'ar

2017-06-17 18:59:40 312

转载 虚拟存储器

一个系统中的进程是与其他进程共享CPU和主存资源的。为了更加有效的管理存储器并且少出错,现在系统提供了一种对主存的抽象概念,叫做虚拟存储(VM)。虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。虚拟存储提供三个重要的能力:它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间

2017-06-17 13:27:53 3063

转载 异常控制流

从给处理器加电开始,直到断电为止,程序计数器假设一个值的序列a\0,a\1,…a\n-1,其中,每个a\k是某个相应的指令I\k的地址。每次从a\k到a(k+1)的过渡称为控制转移。这样的控制转移序列叫做处理器的控制流现代系统通过使控制流发生突变来对这些情况作出反应,这些突变称为异常控制流(ECF)。异常控制流发生在计算机系统的各个层次。比如,在硬件层,硬件检测到的事件会触发控制突然转移到异常处理程

2017-06-16 15:31:40 320

转载 系统的硬件组成

总线:它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(4或8个字节)I/O设备:系统与外部世界的联系通道。每个I/O设备都通过一个控制器或适配器与I/O总线相连主存:一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据处理器:解释或执行存储在主存中指令的引擎。核心是一个字长的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中某条

2017-06-11 14:11:52 363

转载 安全漏洞(缓冲区溢出)

2

2017-06-11 10:03:23 369

转载 存储器系统的层次结构

1

2017-06-11 10:03:02 3287

转载 文件系统(3)

构建简单的文件系统Linux的回环设备可以把一个正式文件当作一个块设备来使用,在构建文件系统映像之后用Linux的回环设备挂载该映像文件,其挂载方法与挂载其他块设备的方法一样首先创建一个大小为512KB的文件,文件内容全为0dd if=/dev/zero of=./my-new-fs-image bs=1k count=512当创建了一个新的映像文件之后,我们通常要格式化该文件,以建立一个指定文

2017-06-10 23:06:52 161

转载 文件系统(2)

ext3文件系统已经成为一个功能强大、高性能并且健壮的日志文件系统。ext3文件系统是对ext2文件系统的扩展,主要增加了日志功能。所谓日志,就是对文件系统的每一个变化进行记录,从而可以从日志记录恢复文件系统的一种技术。当一个系统被意外关闭,例如由于系统电源掉电而引起的系统关闭,系统就会强制文件系统进行连续性检查,而这是一个非常耗时的操作。如果是ext3文件系统,就不需要进行文件系统连续性检查,因为

2017-06-10 22:12:45 239

转载 文件系统(1)

一般情况下,字符设备以串行方式存储和获取数据,串口或磁带机是最典型的字符设备。相比之下,块设备会一次存取和获取大小相同的一组数据。文件系统是建立在块设备之上的文件系统是存在于一个物理设备的逻辑分区之上的,数据存储在分区中物理设备的最顶端。分区就是对一个物理介质(磁盘、闪存)的逻辑划分。物理设备可以只有一个独立分区包含所有可用空间,也可以被划分为多个分区以满足特定需要。分区可以看做是可以写入一个完整文

2017-06-10 16:33:26 305

转载 深信夫夫服

shell PATH MMU 虚拟内存 二叉有序树 二叉平衡树

2017-06-08 13:49:00 178

转载 TCP/IP常见问题

TCP/IP有几层?应用层(ftp,http,dns)传输层(tcp,udp)网络层(ip)链路层(交换机,网卡)OSI分层:应用层表示层会话层传输层网络层数据链路层物理层TCP:面向连接、传输可靠(保证数据正确性和数据顺序)(端到端通信)、用于传输大量数据、速度慢、建立连接需要开销较多(时间,系统资源)UDP:面向非连接、传输不可靠、用于传输少量数据、速度快组播(群播)地址:

2017-06-07 12:32:31 391

转载 多线程和多进程的区别

1) 对比维度 2) 多进程 3) 多线程 4) 总结a) 资源共享、同步数据共享复杂,需要用IPC;数据是分开的,同步简单因为共享进程资源,资源共享简单,但也是因为这个原因导致同步复杂各有优势b) 内存、CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简单,CPU利用率高线程占优c) 创建销毁、切换创建销毁、切换复杂,速度慢创建销毁、切换简单,速度很快线程占优d) 编程、调试编程

2017-06-07 10:55:36 158

转载 vector

vector是C++标准模板库的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库简单地说,vector就是一个能够存放任意类型的动态数组

2017-06-07 10:38:58 158

转载 软中断

核心元素:软中断状态寄存器软中断向量表软中断守护 流程:某一中断事件发生后,首先需要设置对应的中断标记位,触发中断事务唤醒守护线程去检测中断状态寄存器如果通过查询发现某一中断事务发生之后,那么通过软中断向量表调用软中断服务程序action()一个软中断不会去抢占另一个软中断,只有硬件中断才可以抢占软中断,所以软中断可以保证对时间的严格要求软中断守护是软中断的实现核心,通过查询软中断状

2017-06-07 10:30:29 252

转载 常用内核内存分配方式

alloc_pages类分配一页物理内存并返回该页物理内存page结构指针分配一个连续的物理页并返回分配的第一个物理页的page结构指针此类函数主要通过伙伴分配系统进行分配,它们是linux内核最基本的内存分配函数,一次请求能分配的最大物理页数由变量MAX_ORDER决定kmalloc主要用于分配范围在字节— 字节大小以内的小内存区域并且此函数分配的内存在线形地址和物理地址上都是连续的,

2017-06-07 09:55:29 378

转载 各种排序应用场合

时间复杂度O(n*n)插入排序、选择排序和冒泡排序O(nlgn)快速排序、堆排序和归并排序影响排序效果的因素待排序的数据规模关键字的结构及其初始状态稳定性的要求语言工具的条件存储结构时间和辅助空间复杂度应用场景:若n较小(数据规模较小),插入排序或选择排序较好若数据初始状态基本有序(正序),插入、冒泡或快速排序为宜若n较大,则采用时间复杂度为O(nlogn)的排序方法:快

2017-06-07 09:39:25 5844

转载 遍历

遍历单链表的遍历是指从第一个结点开始(下标为0的结点),按照某种次序依次访问每一个结点(正序(0到n)或逆序(n到0))二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点 (递归实现) 前序遍历若二叉树为空 空操作访问若二叉树不为空 访问根节点的数据前序遍历左子树前序遍历右子树void pre_traverse(BTreeNode* root) { i

2017-06-07 09:09:04 287

转载 创建二叉树

二叉树在结构上不依赖组织链表指路法通过根节点与目标节点的相对位置进行定位#define BT_LEFT 0#define BT_RIGHT 1typedef unsigned long long BTPos;结点指针域定义typedef struct tag_BTressNode BTressNode;struct tag_BTressNode{ BTreeNode* left;

2017-06-07 08:26:37 193

转载 函数调用

建立一个临时栈帧,用于存放函数参数,参数入栈(esp指向的内存) 函数调用,也就是跳转到被调函数入口地址处 进入函数体内部,执行函数体,执行结束,参数出栈,返回函数返回值,返回原来调用函数的地址处,继续向下执行

2017-06-06 22:15:23 133

转载 三次握手

第一次握手:建立连接时,客户端发送syn(同步标志)包到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号第二次握手:服务器接收到同步序列编号包,必须确认客户的SYN,同时发送一个SYN包,也就是SYN+ACK包,此时服务器进入SYN_RECV状态第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器端进入连接状态,完成三次握手

2017-06-06 21:30:48 166

转载 gdb

gcc sample.c -o sample -g使用gdb调试程序需要源代码的相关信息,因此需要使用-g参数将源代码信息编译到可执行文件中gdb命令启动GDBfile sample 载入被调试程序r 命令执行(run)被调试文件,尚未设置任何断点,将直接执行到程序结束b main 命令在函数开头设置一个断点断点设置:b(break)+ 函数名或 b(break)+

2017-06-06 21:21:07 168

转载 Linux常用命令

ls 列出当前工作目录的文件或文件夹-l 列出文件详细信息-a 列出当前目录下所有文件及目录cd [dirName] 切换当前目录至dirNamepwd 查看当前目录路径mkdir 创建一个新目录rm 删除给定的文件或文件夹-r 递归删除,可删除子目录及文件-f 强制删除rmdir 删除给定目录mv 移动文件或修改文件名,根据第二个参数类型(目录:则移动文

2017-06-06 20:11:18 137

转载 mutable和volatile

mutable变量永远处于可变的状态mutable在类中只能修饰非静态数据成员,即使是在const函数中,甚至是const结构体变量或类对象,其mutable成员也可以被修改我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰volatile是

2017-06-06 17:04:46 373

转载 动态类型获取

typeid关键字,用于获取类型信息 typeid返回一个type_info类对象const type_info& tiv = typeid(int);当参数是类型时,返回静态类型信息 当参数是变量时:不存在虚函数表,返回静态类型信息存在虚函数表,返回动态类型信息C++编译器匹配调用优先级重载函数函数模板变参函数

2017-06-06 16:39:42 361

转载 异常

异常:是运行时可预料的执行分支 bug:是程序的错误,是不可预期的运行方式try语句处理正常代码逻辑 catch语句处理异常情况 try语句中的异常由对应的catch语句处理 throw抛出的异常必须被catch处理不同类型的异常由不同的catch语句负责处理 catch(…)用于处理所有类型的异常 任何异常只能被捕获一次异常处理匹配时,不进行任何类型的转换匹配子类异常的catch放在上

2017-06-06 16:29:06 250

转载 单例模式

某些类在整个系统生命周期中最多只能有一个对象存在要想控制类的对象数目,必须对外隐藏构造函数将构造函数访问等级设为private定义instance变量并初始化为NULL当需要创建对象时,访问instance的值空值:创建对象,并用instance标记非空值:返回instance标记的对象

2017-06-06 16:12:56 152

转载 泛型编程

不考虑具体数据类型的编程方式void sw(T& a,T& b){ T c = a; a = b; b = c;}template sw(a, b); sw(a, b);函数模板可以像普通函数一样被重载编译器优先考虑普通函数如果函数模板可以产生一个更好的匹配,那么选择模板可以通过空模板实参列表限定编译器只匹配模板int r1 = MAX(1,2);double

2017-06-06 16:08:29 144

转载 抽象类和接口

c++没有抽象类,通过纯虚函数实现抽象类 - 是一种只能定义类型,而不能产生对象的类 - 只能被继承并重写相关函数 - 只能用作父类被继承 - 子类必须实现纯虚函数的具体功能 - 纯虚函数被实现后成为虚函数 - 如果子类没有实现纯虚函数,则子类为抽象类纯虚函数是指只定义原型的成员函数接口:类中没有定义任何成员变量所有的成员函数都是公有的所有的成员函数都是纯虚函数接口是一种特殊的抽

2017-06-06 15:38:33 134

转载 线程死锁

临界资源:每次只允许一个线程进行访问的资源死锁:线程间相互等待临界资源而造成彼此无法继续执行发生死锁的条件:互斥条件:一个资源每次只能被一个进程使用(临界资源)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺循环等待条件:多个进程因互相等待资源而停止继续执行死锁避免:等待某个资源时,使用超时机制采用消息通

2017-06-04 23:29:18 451

转载 大端小端的理解

void right_shift_r(const char* src, char* result, unsigned int n) { const unsigned int LEN = strlen(src); int i = 0;for(i=0; i < LEN; i++){ result[(n + i) % LEN] = src[i];}result[LEN]

2017-06-04 23:06:47 147

转载 虚函数的作用

简单的说,被virtual关键字修饰的成员函数就是虚函数我们只需要把基类的成员函数用virtual修饰,其派生类的相应的函数也会自动变为虚函数派生类可以定义基类中的同名函数,派生类的成员将隐藏基类中的同名成员,造成同名覆盖虚函数的作用就是实现多态性,多态性是将接口与实现进行分离指向基类的指针在操作它的多态对象时,会根据不同的类对象,来调用相应的函数,这个函数就是虚函数虚析构函数:将基类的析构函数定

2017-06-04 21:46:08 658

转载 宏定义函数和普通函数

宏定义函数:预处理阶段进行简单的文本替换,没有入栈、出栈、参数传递和函数返回等等工作,执行效率明显高于普通函数,因此,简短并且被频繁调用的函数经常用宏定义函数来代替实现没有参数检查,会影响程序安全如果函数比较复杂,函数体规模比较大,使用宏定义函数就会增加程序的大小宏定义函数的调用有可能改变函数的原生语义,比如涉及到运算符优先级的函数时,调用宏定义函数可能会改变函数的原生语义,所以使用时要格外

2017-06-04 16:21:23 5591

转载 二叉树

孩子兄弟表示法:能够表示任意的属性结构每个结点中有且仅有三个指针域 数据指针、孩子结点指针、兄弟结点指针每个结点的结构简单 只有孩子结点指针和兄弟结点指针构成了“树杈”定义:二叉树是由n(n >= 0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成

2017-06-04 16:00:58 182

转载

树一种非线性的数据结构 树是由n(n >= 0)个结点组成的有限集合 根节点:只有直接后继,没有直接前驱树的结点包含一个数据及若干指向子树的分支 结点拥有的子树数称为结点的度度为0的结点称为叶结点度不为0的结点称为分支结点树的度定义为所有结点中的度的最大值树中结点的最大层次称为树的高度或深度创建树销毁树清空树插入结点删除结点获取结点获取根节点获取树的结点数获取树的高度

2017-06-04 11:12:36 141

转载 哈希表

工程中的代码实现常常会需要键-值的映射即给出一个值即可得到其代表的数据哈希的定义:在数据元素的存储位置和它的关键字之间建立一个映射关系f,通过f可以直接得到关键字所代表的数据元素哈希表:哈希技术中用于存储数据元素的数据结构哈希函数:哈希技术中的映射关系f数组时最简单也是最高效的哈希实现哈希技术需要具体的数据结构为基础常用操作:创建哈希销毁哈希清空哈希加入键值对删除键值对根

2017-06-04 10:25:11 153

转载 make(6)

环境变量(全局变量)makefile中能够直接使用环境变量的值 定义了同名变量,环境变量将被覆盖运行make时指定“-e”选项,优先使用环境变量为什么要在makefile中使用环境变量?环境变量可以在所有makefile中使用过多的依赖环境变量会导致移植性降低 变量在不同makefile之间的传递方式定义make命令行变量进行传递(推荐)使用export定义变量进行传递(定义临时环

2017-06-03 15:42:14 261

转载 快速排序

基本思想 1)任取待排序序列中的某个数据元素(例如:第一个元素),作为基准,按照该元素的关键字大小将整个序列划分为左右两个子序列:左侧子序列中所有元素都小于或等于基准元素 右侧子序列中所有元素都大于基准元素基准元素排在这两个子序列中间2)分别对这两个子序列重复实施上述方法,直到所有的对象都排在相应位置上为止int partition(int array[],int low,int

2017-06-03 10:37:03 141

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除