自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 有了malloc/free为什么还要new/delete?

有没有这样的疑惑?既然malloc和new都可以正确的申请动态内存,为什么C++要“多次一举”添加了new? new和malloc有什么本质的不同? 首先malloc/free是C++/C语言的标准库 函数,而new/delete是C++的运算符,虽然两者作用相同,但是性质是不同的。对于C++面向对象的特性而言,非内部数据类型的对象,光用malloc/free无法满足动态对象的要求。 对象在

2016-09-28 16:28:37 761

原创 指针参数如何传递内存?

当我们需要调用一个申请内存的函数时,大概想的是将函数的参数定义为一个指针来传递内存吧,但是可以用指针去申请动态内存吗?如下函数GetMemory(str,200):void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char)*num); if(p == NULL) return;}void T

2016-09-28 15:56:32 540

原创 Linux基本命令(一)——安装与登录

安装与登录命令将介绍: login, shutdown, halt, reboot, install, mount, umount, chsh, exit, lastlogin 1.作用 login的作用是登录系统,使用权限是所有用户。 2.格式 login[name][-p][-h主机名称] 3.主要参数 -p : 通知login保持现在的环境参数。 -h

2016-07-18 22:48:34 667

原创 C语言学习笔记(二)

1. 关于数组 下标和数组一起使用,用于标识该集合中某个特定的值; 数组名的值是一个指针常量,也就是数组第一个元素的地址;2. 数组与指针 数组与指针具有一些完全不同的特征。数组具有确定数量的元素,而指针只是一个标量值。只有当数组名在表达式中使用时,编译器才会为他产生一个指针常量。 当数组名作为sizeof操作符或单目操作符&操作数时,指针与数组不同,sizeof返回整个数组

2016-07-18 11:51:58 400

原创 C++ 类的6个缺省函数

在C++中默认产生6个类成员函数,即缺省函数,它们分别是:缺省构造函数缺省拷贝构造函数缺省析构函数缺省赋值运算符缺省取址运算符缺省取地址运算符const很多人以为只有前4个缺省函数,事实上有6个。代码验证如下:#include <iostream>using namespace std;class A{public: A() { cout<<"构造

2016-06-10 20:38:53 3311 1

原创 TCP : 3次握手与4次挥手

TCP协议在运输层工作,当客户端想要连接服务器,TCP协议要求 客户端和服务器共需要3次数据传输,才能确保客户端和服务器已经连通,我们把这个过程称为——3次握手。为什么是3次握手呢?我先来举一个现实中的例子。我给你打电话时,当拨号过去时,相当于我发送了第一次握手,表示我想和你通话。当你提起电话,“喂?”,这是你发送的第二次握手,发送消息给我,表示愿意与我通话,并且你信号正常。我这边再次“喂”,这是我

2016-06-07 17:02:10 462

原创 IO多路复用(select poll epoll)

IO多路复用是高性能网络编程一个重要的手段之一。一,IO多路复用的概念 以前我们用多线程来处理并发的请求,现在可以只用单线程来实现。单线程,通过记录跟踪每个每个I/O流(sock)的状态,来达到同时管理多个I/O流的目的,提高了服务器的吞吐能力。 如图所示,IO多路复用,就如同中间的开关,哪个sock就绪就连上开关,达到了单开关处理了多个I/O流的目的。这就是单线程却能处理多个Sock传

2016-06-05 22:29:03 4159

原创 高性能网络服务(多进程,多线程,线程池)

Linux的一个应用优势是可用于设计各种高性能网络服务程序,高性能得一个特点就是实现并发访问处理,及服务程序能够同时为多个在线用户提供服务,高性能服务程序得应用非常广泛,在当前流行的Web服务器,各种游戏服务器中都能看到它的身影,本次重点讲解多进程网络服务程序,多线程网络服务程序,以及线程池网络服务程序的实现原理。高性能网络服务程序简介 高性能网络服务程序在当前的LINUX环境下应用非常广泛,

2016-06-02 21:58:28 1365

原创 套接字—Socket

网络编程就不得不提大名鼎鼎的套接字—Socket一,什么是Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket。Socket的英文原意是“插座”,通常称之为套接字,来描述IP地址和端口,是一个通信链的句柄,用来实现不同虚拟机或者计算机之间的通信。 在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个S

2016-06-02 20:51:57 7623

原创 网络编程—线程

之前的博客介绍了管道通信,进程间的通信,今天来介绍线程。 介绍线程前先要搞清楚线程与进程的区别。进程可以理解为正在运行的程序,进程管理和调度资源,而线程就是受进程调度的最小单位,也就是说进程给一个或多个线程资源并调度线程的运行。要运用线程,要包含头文件 pthread.h 。线程的属性标识符:pthread_attr_t。 线程的属性结构如下:typedef struct {

2016-05-25 23:46:15 431

原创 快速掌握Makefile

要想成为一个”资深”程序员,gcc, gdb, make这三个命令是必须要熟练掌握的。今天介绍Makefile即make操作。一,什么是Makefile make 操作必须先编写Makefile文件。什么是Makefile? 可以将Makefile理解为脚本。这种脚本就是在多文件编译时的一个“自动化编译程序”。在大型工程中,常常成百上千的源文件需要编译链接,我们一个个编译太耗时间,而且当其中一

2016-05-21 23:15:54 345

转载 UNIX网络编程之管道与FIFO

管道是最初的Unix IPC形式,它们的最大局限是没有名字,所以,管道只能用于有亲缘关系的进程之间使用。之后,慢慢随着FIFO的加入,这点才有所改观。FIFO也成为有名管道。管道和FIFO的共同点就是它们都是通过read和write函数进行访问的。管道: 管道是由pipe函数创建,提供一个单路数据流。也就是说,所有的管道都是半双工。 管道创建方法: #include <unistd.h> i

2016-05-17 16:19:29 524

原创 IPC—进程间的通信(信号量,共享内存,消息队列)

IPC是进程间的通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统上的不同的进程间各种消息传递(message passing)。 IPC分为两代,初代System V IPC比较全面,现在用的Posix IPC更加易懂。不管是哪代IPC,重点都是这3点: 1. 信号量 2. 共享内存 3. 消息队列 Linux下命令

2016-05-16 21:04:45 3043

原创 进程—僵尸进程与孤儿进程

在探讨这个问题之前,我们先来弄清什么是进程。 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 进程是一个具有独立功能的程序关于某个数据集合的一

2016-05-13 23:20:25 564

原创 智能指针之 shared_ptr

shared_ptr是一个最像指针的“智能指针”,是boost.smart_ptr库中最有价值、最重要的组成部分,也是最有用的,Boost库的许多组件–甚至还包括其他一些领域的智能指针都使用了shared_ptr。抱歉,我实在想不出什么更恰当的词汇来形容它在软件开发中的重要性。再强调一遍,shared_ptr非常有价值、非常重要、非常有用。——《Boost程序库完全开发指南》shared_ptr与s

2016-05-12 13:28:15 11220 1

原创 智能指针之 scoped_ptr

scoped_ptr是一个类似于auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确的删除。但是scoped_ptr的所有权更加严格,不能转让,一旦scoped_pstr获取了对象的管理权,你就无法再从它那里取回来。正如scoped_ptr(局部指针)名字的含义:这个智能指针只能在作用域里使用,不希望被转让。代码实现如下:template

2016-05-12 00:46:24 4842 3

原创 智能指针之 auto_ptr (pc版与gcc版)

内存管理一直是令程序员头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微的不小心就会导致内存泄漏(memory leak),野指针(wild pointer),访问越界(access denied)等问题。曾几何时,C++程序员无比羡慕JAVE,C#等语言的垃圾回收机制。但C++后来有了更高效的内存管理方法,智能指针的出现,使得C++在内存管理方面做得甚至比JAVE,C#更好。智能指针(s

2016-05-11 23:16:46 924

原创 List (单链表17个函数讲解)

链表时一种常用的数据结构,是通过“链”来建立起数据元素之间的逻辑关系,这种用链接方式储存的线性表简称链表(Link List)。一,链表与顺序表的对比 在接触链表之前大家想必已经了解过了顺序表的储存结构方式,顺序表与链表的不同之处如下: 1.顺序表是物理位置上相邻来表示数据元素之间的逻辑关系;但链表不是,物理地址不相连,通过指针来链接。 2.顺序表储存密度高,且能够随机的存取数据(

2016-05-10 17:12:34 5106

原创 字符串匹配(BF,BM,Sunday,KMP算法解析)

字符串匹配一直是计算机领域热门的研究问题之一,多种算法层出不穷。字符串匹配算法有着很强的实用价值,应用于信息搜索,拼写检查,生物信息学等多个领域。 今天介绍几种比较有名的算法: 1. BF 2. BM 3. Sunday 4. KMP—,BF算法 BF(Brute Force)算法又称为暴力匹配算法,是普通模式匹配算法。其算法思想很简单,从主串S的第pos个字符开

2016-05-06 13:43:50 9992 5

原创 C语言学习笔记

以前学习《C和指针》做的一些笔记,主要是一些不太注意的小知识点。 1.C 语言文件的编译的4个阶段: 源代码(.c / .cpp文件) -> (1.) 预编译阶段(操作符 gcc -E)。 预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入由#include指令包含的文件内容。 -> (2.)编译阶段(操作符 gcc -S)。 源代码经过

2016-05-02 22:11:32 324

原创 文件编译执行的4个阶段

C 语言文件的编译的4个阶段:源代码(.c / .cpp文件) -> (1.) 预编译阶段(操作符 gcc -E)。 预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入由#include指令包含的文件内容。-> (2.)编译阶段(操作符 gcc -S)。 源代码经过解析,判断它的意思。这个阶段是产生绝大多数错误和警告信息

2016-05-01 21:28:23 957

原创 剖析八种经典排序算法

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。 我整理了以前自己所写的一些排序算法结合网上的一些资料,共介绍8种常用的排序算法,希望对大家能有所帮助。八种排序算法分别是: 1.冒泡排序; 2.选择排序; 3.插入排序; 4.快速排序; 5.归并排序; 6.希尔排序; 7.二叉排序; 8.基

2016-04-29 23:50:02 12461 2

原创 内存解析(stack,heap,static)

在C/C++中,编译程序占用的内存分成5个部分,它们分别是堆(heap),栈(stack),全局/静态储存区(static) ,常量储存区和程序代码区。栈:由编译器在需要时分配,在不需要的时候自动清除变量的储存区。比如程序中 int,float,char等原始类型定义变量时就是在栈上给变量分配空间,不需malloc也不需free,程序结束时,编译器会自动释放。堆: 就是需要人为申请(malloc,n

2016-04-29 10:55:24 704

原创 引用和指针的比较

引用(&)是C++中的概念,初学者容易把引用和指针混淆。在一下程序中,n是m的引用,p是m的指针:int m;int &n = m;int *p = &m;n相当于m的别名,对n操作就是对m操作,n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。引用的一些规则如下: 1.引用被创建的同时必须被初始化(指针则可以在任何时候被初始化). 2.不能有NULL引用,引用必须与合法的储

2016-04-27 21:05:28 342

原创 const, volatitle, mutable的用法

本文参照于wuliming_sc博主所写的同名博文。const :不变的,不可被修改的。const修饰普通变量时,一般有两种写法: 1. const TYPE value; 2. TYPE const value; 这两种写法本质上没有区别。含义是:const修饰的类型为TYPE的变量value是不可被修改的。const修饰指针类型时,有三种写法: char* const ptr; 指针

2016-04-26 22:46:18 670

原创 STL 二级空间配置器

当程序需要在堆上申请空间时,我们常用的做法是直接malloc / new一块新的内存空间,这块被申请的空间需要我们手动释放,频繁的申请释放必然会导致系统产生大量内存碎片,尤其是小额区块的申请,内存碎片和额外负担很大的损害了我们的内存空间。 在STL中对于内存的申请,有着更高明的手法——allocator(空间配置器)。 一级空间配置器很简单,只是简单的将malloc进行封装,加入了异常处

2016-04-25 18:30:19 650

原创 浅谈萃取技术

在STL中,以泛型技术为中心的设计贯穿着整个设计,模板类的运用,使得代码的复用率大大提高。萃取技术是在模板的基础上,采用相同的方式,却可以将不同的东西提取出来。为什么要有萃取技术? 模板实现了程序的泛型化,但当有非模板类型传递时,我们就不能只套用模板,还需要对模板的参数进行加设。template<class T1, class T2>class MyClass{public: M

2016-04-24 21:23:25 644

原创 yum源的配置

Yum(全称为Yellow dog Updater , Modified)是一个在Fedora,RedHad以及SUSE,CentOS中的shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,无需频繁地一次次从网上下载,安装。下面我们介绍redhat7.0的本地yum源的安装步骤: 1,在安装之前我们需要与系统版本匹配的iso镜像(版

2016-04-21 11:42:48 409

原创 explicit关键字的运用

在C++提供了关键字explicit,可以阻止不被允许的经过构造函数进行的隐式转换的发生。C++中,一个参数的构造函数,承担两个角色。1.是构造器 2.是默认且隐含的类型转换操作。所以当我们定义出 int AAA; 而当恰好将XXX赋给类时,且XXX的类型也是int。那编译器就会自动调用这个构造器,创建一个AAA的对象。在程序中隐式转换为程序员提供了一些便利,但也产生了一些“深度bug”,如以下

2016-04-18 22:08:11 322

原创 重载运算符

C++ 重载运算符

2016-04-12 16:57:31 809

原创 c++继承与多态

C++ 继承与多态

2016-04-12 16:09:19 725

原创 顺序表的实现

顺序表的实现    顺序表

2016-04-09 20:37:06 804

空空如也

空空如也

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

TA关注的人

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