自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 makefile的使用

makefile功能:自动化编译。 示例: target … : prerequisites … command … … target也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。 prer...

2018-08-07 15:41:01 245

原创 select,poll,epoll的基本使用

问题:如何让多个客户端连接? 解决方案: I/O复用技术: (同步): 1.循环:循环遍历打开的网络连接列表,来判断是否有要读取的数据 。1)速度缓慢 2)效率低 2.select:首先将第二三四个参数指向的fd_set拷贝到内核,然后对每个被SET的描述符进行调用进行 poll,并记录在临时结果中(fd_set),如果有事件发生,...

2018-08-06 18:27:04 212

原创 四种智能指针

智能指针的原理:智能指针不是指针,它实际上是一个模板,由智能指实例化出来的对象具有和常规指针相似的行为,重点是智能指针负责自动的释放所指对象。智能指针是一个类,它的释放空间是通过析构函数完成的。 智能指针使用了RAII技术。RAII叫做资源获得及初始化,定义一个类来封装资和初始化源的分配和释放,在构造函数内完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。...

2018-08-06 18:24:15 668

原创 TCP协议族及相关协议

什么是网络?把独立自主的计算机连接起来构成了网络。构建网络的目的:资源共享,信息交互。什么是互联网:把网络和网络连接起来就构成了互联网。上层协议使用下层协议提供的服务: 数据链路层: 实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。 ARP:地址解析协议(将目标机器的IP地址转化成物理地址) ...

2018-07-30 09:27:32 303

原创 TCP协议

TCP头部信息:每个TCP报文段,用于指定通信的源端端口号,目的端端口号,管理TCP连接,控制两个方向的数据流 TCP状态转移图 TCP数据流 TCP数据流的控制特点:面向连接,可靠传输,数据流。 TCP协议的使用要求:双方必须先建立连接,再开始数据的读写。 双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。-》全双工,双方的数据读写可以通过一个连接进行,完成数...

2018-07-29 11:03:59 319

原创 八大排序总结-数据结构

排序算法:内部排序和外部排序。 1.内部排序是数据记录在内存中进行排序 2.外部排序因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序:有如下八种。插入排序: 1.将第一待排序序列的第一个元素看作一个有序序列,把第二个元素到最后一个元素当成未排序序列。 2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置(如果待插入的元素...

2018-07-22 15:15:11 226

原创 文本文件和二进制文件

计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的。而从文件的编码方式来看,文件可以分为文本文件和二进制文件。文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。二进制文件:就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放...

2018-07-20 10:22:51 296

原创 字符串库函数

头文件: 1.strlen函数:求字符串的长度size_t strlen(const char *s) { size_t len = 0; while(*s++) len++; return len; }2.strcpy和strncpy函数:复制字符串strcpy:将s2指向的字符串复制到s1指向的数组中。若s1和s2指向的...

2018-07-20 10:21:40 576

原创 nginx内存池的剖析

nginx内存池的主体结构:ngx_pool_s ngx_pool_data_t ngx_pool_large_t ngx_pool_cleanup_s 由 ngx_pool_data_x和ngx_pool_s构成:ngx_pool_data_t:typedef struct { u_char *last; u_char ...

2018-07-19 21:43:04 397

原创 malloc,ptmalloc内存分配及回收原理

malloc函数要求:1.malloc函数分配的内存大小至少为size参数所指定的字节数 2.malloc的返回值是一个void类型的指针,必须强转为我们需要的类型的指针 3.多次调用malloc所分配的地址不能有重叠部分,除非某次malloc所分配的地址被free释放了 4.malloc应尽快完成内存分配并且返回 5.实现malloc的同时实现calloc和realloc和free...

2018-07-16 22:36:23 2212 1

原创 二叉树的代码实现-高级数据结构

头文件:#include<assert.h>#include<stack>#include<queue>#include<iostream>using namespace std;定义二叉树的结点类型:typedef char ELemType;#define END '#'typedef struct

2018-07-15 20:33:29 1807

原创 libevent网络库

Libevent是一个用C语言编写的、轻量级的开源高性能事件通知库。作为底层的网络库,比如 memcached、 Vomit、 Nylon、 Netchat等等。编译库的代码时,编译的脚本将会根据OS支持的处理事件机制,来编译相应的代码,从而在libevent接口上保持一致。主要有以下: 事件驱动( event-driven),高性能; 轻量级,专注于网络,不如 ACE...

2018-07-13 14:53:48 348

原创 Linux的基本命令汇总

1.文件的基本操作:more: 分页显示文件内容(空白键 下一页显示,b键 返回上页) 只能向前浏览 语法:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] -num 一次显示的行数 -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为...

2018-07-12 16:42:32 182

原创 单链表的基本操作-C语言

#include"List.h"#include<stdlib.h>#include<stdio.h>#include<string.h>void Initlist(List plist)//初始化链表{ assert(plist != NULL); plist->next = NULL;}SNode* Getnode(in...

2018-07-11 14:10:50 139

原创 递归算法-高级数据结构

什么是递归?递归是指在函数的定义中使用函数自身的方法。 即:递:向下传递,间接或直接调用自己本身,递归通常把一个大型复杂的问题层层换成规模较小的问题。归:当问题从大到小,由远及近,到达一个明确的终点,从这个临界点开始,原路返回到原点,原问题解决。...

2018-07-10 15:19:02 670

原创 C语言中的数据类型的自动转化

C的隐式转换1.算术运算式中,低类型转换成高类型 2.赋值表达式,右边表达式的值转换为左边变量的类型,并赋值给它 3.函数调用参数传递时,系统将实参转换为形参的类型后,赋给形参 4.函数有返回值,系统将返回表达式类型转换为返回值类型,赋值给调用函数运算表达式中的自动类型转换1.字符必须先转换为整数 2.short型转换为int型 3.float型转换为double型有...

2018-07-10 10:54:14 379

原创 设计模式-单例模式

单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。将默认的构造函数声明为私有的。 单例模式可以分为懒汉式和饿汉式:     懒汉式单例模式:在类加载时不初始化。在getInstance中new instance然后返回。     饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。在静态...

2018-07-09 19:43:23 162

原创 ASCII,UTF-16,UTF-8编码的区别

在计算机中,所有的数据在存储和运算时,都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0)ASCII码ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。 0~31及...

2018-07-08 13:39:15 5567

原创 32位和64位系统的区别及数据类型

64位系统和32位有什么区别?1.64位bitCPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存。 2.64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。什么是64位处理器? 之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2...

2018-07-08 08:52:25 3525

原创 C++函数的返回值

1.main主函数的返回值: 允许主函数main没有返回值就可结束;可将主函数main返回的值视为状态指示器,返回0表示程序运行成功,其他大部分返回值则表示失败。2.返回非引用类型: 函数的返回值用于初始化在调用函数时创建的临时对象(temporary object),如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。在求解表达式的时候,如果需要一个地方存储其运算结果...

2018-07-06 17:11:34 1122

原创 sizeof和strlen

sizeof与strlen的区别与联系1.sizeof是判断数据类型长度符的关键字; strlen是函数,计算给定字符串的(unsigned int型)长度,不包括’\0’在内。2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。 sizeof还可以用函数做参数,比如: short f(); printf(“%d\n”, sizeof(...

2018-07-05 17:04:13 122

原创 C++中的空指针,野指针

C++中的空指针,野指针空指针不指向任何实际的对象或者函数。 反过来说,任何对象或者函数的地址都不可能是空指针。 空指针是一个特殊的指针,因为这个指针不指向任何地方。 这意味任何一个有效的指针如果和空指针进行相等的比较运算时,结果都是false。 在程序中,得到一个空指针最直接的方法就是运用预定义的NULL,这个值在多个头文件中都有定义。C++中 NULL即为0.空指针指向...

2018-07-05 09:38:37 905

原创 C++的类和对象

类定义:是用户自定义的复杂数据类型,它是将不同类型的数据和这些数据相关的操作封装在一起的集合。类的构成结构体:是c语言的一种自定义的数据类型,它把相关联的元素组成一个单独的统一体。 缺点:一旦建立了一个结构体变量,就可以在结构体外直接访问数据(不同用户对数据访问的权限不同) 无法对数据进行保护和权限控制,安全性不高。 即c++引入了类,它能克服c结构体的这些缺...

2018-05-13 20:53:43 155

原创 malloc,new 及free,delete的区别和联系

内存动态分配方法1.malloc(realloc)/free (1)malloc/free是(libc.soc语言的库函数)。 (2)free释放内存时,不区分单个元素内存和数组分配。 (3)malloc开辟内存失败,返回值和NULL进行判断。 2.new/delete (1)new/delete属于运算符不属于函数。 (2)delete释放内存时,区分单个元素内存和数...

2018-04-15 11:09:14 462 1

原创 const和volatile以及引用

const定义:修饰一个变量,表示不能在作为赋值的左值。 c中: (1)const修饰的变量不一定要初始化。 (2)const修饰的变量变为常变量。 (3)不能作为常量使用,例如定义数组的大小。 (4)常变量的编译方式和普通变量没有区别。 c++中: (1)const修饰的变量必须初始化。 (2)const修饰的变量变为常量。 (3)可定义数组的大小(完全可以当作常量使用)。...

2018-04-15 09:48:13 257

原创 inline函数

简介C++关键字,在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定成内联函数。注意关键字inline必须与函数定义放在一起才能使函数成为内联,仅仅将inline放在函数声明前面不起任何作用。**如下风格的函数Foo 不能成为内联函数: inline void Foo(int x, int y); // inline 仅与函数声明放在一起 void...

2018-04-08 13:16:04 651

原创 函数的调用堆栈过程

代码块int sum(int a,int b) { int temp=0; temp=a+b; return temp; } int main() { int x=10; int y=20; int ret=sum(x,y); printf(“ret=%d\n”,ret); return 0; }...

2018-04-03 10:17:38 539

原创 程序编译,链接,运行过程

进程在内存上的布局:在x86体系32位linux内核/操作系统下:每一个进程在运行的时候,系统会为其分配一个以上构造的4G的虚拟地址空间:3G为用户空间(私有)1G为内核空间(共享)对任何一个普通进程:涉及到5种不同段。代码段:用来存放程序的执行代码,大小在程序运行前已经确定,并且只读不可写,也包含一些只读的常数变量,例字符串常量等。数据段:用来存放程序中已初始化的全局变量(静态内存分配)。BSS...

2018-04-01 11:19:54 1200

原创 作用域,可见性,生存期。

作用域 生存期 可见性

2017-11-14 14:31:20 554

原创 函数实参和形参之间的传递

实参可以是常量,变量或表达式。      实参与形参的类型应相同或赋值兼容。     在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实结合”1.在定义函数中制定的形参,在没有出现函数调用时,它们不占内存中的存储单元。在发生函数调用时,函数的形参被临时分配内存单元。2.将实参的值传递给形参。3.在执行函数时,由于形参已经有值,可以用形参进行计算。4.通过return

2017-10-22 14:24:46 17599

空空如也

空空如也

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

TA关注的人

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