自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chengonghao的博客

Practice Makes Perfect

  • 博客(62)
  • 资源 (5)
  • 收藏
  • 关注

转载 3.内存连续分配管理方式

转载自:http://c.biancheng.net/cpp/html/2610.html点击打开链接连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。单一连续分配内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。

2016-03-29 11:14:23 3508

转载 2.内存覆盖与内存交换

转载自:http://c.biancheng.net/cpp/html/2609.html点击打开链接覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法。内存覆盖早期的计算机系统中,主存容量很小,虽然主存中仅存放一道用户程序,但是存储空间放不下用户进程的现象也经常发生,这一矛盾可以用覆盖技术来解决。覆盖的基本思想是:由于程序运行时并非任何时候都要访问程序及数据的各个部分

2016-03-28 14:39:13 738

转载 1.内存管理的概念

转载自:http://c.biancheng.net/cpp/html/2608.html点击打开链接内存管理(Memory Management)是操作系统设计中最重要和最复杂的内容之一。虽然计算机硬件一直在飞速发展,内存容量也在不断增长,但是仍然不可能将所有用户进程和系统所需要的全部程序和数据放入主存中,所以操作系统必须将内存空间进行合理地划分和有效地动态分配。操作系统对内存的划分和动

2016-03-28 14:24:51 1384

转载 操作系统典型调度算法

文章出处:http://c.biancheng.net/cpp/html/2595.html 点击打开链接在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。下面介绍几种常用的调度算法。先来先服务(FCFS)调度算法FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度。在作业调度中,

2016-03-25 16:03:47 920

转载 进程调度的概念

调度的概念1. 调度的基本概念在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、髙效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。处理机调度是多道程序操作系统的基础,它是操作系统设计的核心问题。2. 调度的层次一个作业从提交开始直到完成,往往要经历以下三级调度

2016-03-25 16:01:57 10731

原创 函数指针

什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。 一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针(注意:大部分情况下,可以这么认为,但这种说法并不很严格)。 函数指针的声明方法// 定义函数指针pfint (*pf)(const int&, const

2016-03-24 18:44:50 393

原创 将类的方法声明为虚函数的作用

把成员函数声明为虚函数的主要目的是为了支持多态,比如我们有一个基类 Shape 和一个派生类 Circle ,代码如下:class Shape{public: Shape(){}; virtual ~Shape(){}; virutal void Draw();};class Circle: public Shape{ Circle(){};

2016-03-24 18:42:48 798

原创 拷贝构造和赋值函数

每个类只有一个赋值函数.由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:1.如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设a.m_data的内容为“hello”,b.m_dat

2016-03-24 18:42:12 318

原创 空类中默认产生的成员函数

默认产生4个类成员函数:构造函数析构函数拷贝构造函数赋值函数

2016-03-24 18:41:34 462

原创 类成员初始化顺序

类的初始化表的初始化顺序是根据成员变量的声明顺序来执行的,而不是按照初始化列表的顺序。#inlude #inlude using namespace std;class base{private: int m_i; int m_j;public: base(int i) : m_j(i),m_i(m_j){} base() : m_j(i),m_i(m_j)

2016-03-24 18:41:13 2061

原创 类的常量成员的初始化

示例:class A{ const int Size = 0;}错误:常量成员不能在类中声明的地方初始化,因为此时类并没有进行实例化(创建对象),因此并没有分配内存,不能进行初始化。类的成员的初始化:1,非static非const成员变量,必须在构造函数中进行初始化;2,static成员变量,必须在类的外面进行初始化;3,const成员变量,必须在类的

2016-03-24 18:40:40 4876 1

原创 类的公有私有保护继承

第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由

2016-03-24 18:40:07 626

原创 类的静态成员

因为类的静态成员变量是所有实例共用的.所以得在类外初始化.调用的时候可以通过对象调用,也可以通过类直接调用class A{public: int i; //有默认值};class B{public: static int n; static A Aobj;};int B::n = 1; //静态成员变量的初始化A B::Aob

2016-03-24 18:38:32 436

原创 内链接和外连接

啥叫内连接 外连接我们知道编译的时候(假如编译器是VS),是以源文件cpp文件为单位,编译成一个个的obj文件,然后再通过链接器把不同的obj文件链接起来.简单的说,如果一些变量或函数的定义是内连接的话,链接器链接的时候就不会拿它们去与obj比较看有重复定义不,一个源文件中的extern声明的变量或函数也不能使用另外一个源文件中的内连接的变量或函数.而如果是外连接的话则需要在不同的ob

2016-03-24 18:37:27 590

原创 全局静态变量和局部静态变量的区别

(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。   (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。     (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值

2016-03-24 18:35:35 1912

原创 深拷贝和浅拷贝

C++中对象的复制就如同“克隆”,用一个已有的对象快速地复制出多个完全相同的对象。一般而言,以下三种情况都会使用到对象的复制:(1)建立一个新对象,并用另一个同类的已有对象对新对象进行初始化,例如:class Rect{private: int width; int height;};Rect rect1;Rect rect2(rect1);  //

2016-03-24 18:34:07 315

原创 什么是类型安全的

什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿

2016-03-24 18:32:44 6275

原创 数据的大端小端表示法

在32位小端的机器上,如下代码输出是什么:char array[12] = {0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08}; short *pshort = (short *)array; int *pint = (int *)array; int64 *pint64 = (int64 *)ar

2016-03-24 18:30:41 1119

原创 数组

一、数组是由类型名、标示符和维数组成的复合数据类型。二、数组的定义和初始化1、数组的维数必须是大于等于1的常量表达式,包括:整数字面值常量、枚举常量、常量表达式初始化的整型const对象。2、如果数组在定义时没有提供显示初始化,则会像普通变量一样初始化:全局:在函数体外定义的内置类型数组,初始化为0;局部:在函数体内定义的内置类型数组,无初始化;类类型:数组元素为类类型时,

2016-03-24 18:29:23 315

原创 数组指针和指针数组

数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。

2016-03-24 17:33:27 269

原创 四种类型转换

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:  TYPE b = (TYPE)a  C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。  const_cast,字面上理解就是去const属性。  static_cast,命名上理解是静态类型转换。如int转换成char。  dynamic_cast,命名上理解是动态类型

2016-03-24 17:20:44 1306

原创 向控制台打印指针

int a = 1;int *p = &a;printf("%p",p);

2016-03-24 12:17:00 370

原创 销毁new的指针

delete 指针实际上释放了指针所指的堆内存,但指针本身是一个32位(在32位机器上)的无符号整数。其值是对象的首地址,这个值并没变。也就是说,你用delete后,不但指针任然存在,而且其内容都没有变换。他本身的释放在超过他生命周期的时候销毁。然而现在指针所指的内存已经不可用了,再次操作其内容将会发生内存错误(比如再次delete)。所以,安全的做法是让指针值等于NULL(如果指针是NULL,d

2016-03-24 12:16:26 1806

原创 虚函数和纯虚函数的区别

1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。  2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(ba

2016-03-24 12:15:52 525 1

原创 虚拟析构函数

1,基类或者父类的析构函数声明为虚函数后,他的子类的析构函数都将变成虚函数。2,无论析构函数是不是虚函数,当子类对象被撤销时,都将自动调用父类的析构函数。3,将父类或者基类声明为虚函数的目的是为了实现多态性,也就是晚绑定。例如:class base{public: base(){} ~base(){}}class child : public base{

2016-03-24 12:14:48 777

原创 指针和const限定符

一、指向const对象的指针1、定义格式:const 类型 *指针名const放在类型名的前面,它是用来限定对象的类型的,即对象的类型是(const 类型)。2、由于对象是const类型,在定义的时候进行了初始化之后就不能被修改,所以通过指向const对象的指针修改对象的值是错误的。3、把一个const对象的地址赋给一个普通的、非const对象的指针也是错误的。因为指向const对

2016-03-22 21:47:06 384

原创 重载和重写的区别

重载( overload) 和重写 (overried ,有的书也叫做“ “ “ “ 覆盖” ” ” ” )的区别?常考的题目。从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同, 或许参数类型不同,或许两者都不同) 。重写:是指子类重新定义父类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后

2016-03-22 21:46:27 306

原创 子类不能从父类继承哪些?

今天突然想起了一个问题,就是C++中,子类能否继承父类的静态成员函数和变量。在网络了解了一下,得到的结论大致是:    子类不能从父类继承的有:       1. 构造函数       2. 拷贝构造函数       3. 析构函数    子类能从父类继承的有:         1、静态成员变量       2、静态成员函数       3、友元函数      

2016-03-22 21:44:28 8132

原创 第三十二讲--数据库的关闭和启动

关闭时先关闭sqlplus和EM,然后关闭监听,最后是关闭DB。启动时先启动监听,再启动DB、EM、SQLPLUS/*--------------------关闭oracle--------------------*/1.关闭sqlplus [oracle@redhat4 ~]$ isqlplusctl stop iSQL*Plus 10.2.0.1.0

2016-03-22 13:16:36 414

原创 第三十三讲--参数文件及数据库的启动和关闭详解

Oracle数据库分为数据库和实例,实例是一堆进程和内存。Oracle启动时如何分配内存,SGA分多大,SGA里面的每个池子改分多大,这些信息全部存在参数文件里面。对oracle进行配置和修改,绝大多数都是对参数文件的操作。         在Linux系统中,参数文件存放在$ORACLE_HOME/dbs目录下。在Windows系统中,参数文件存放在database目录下。[oracle

2016-03-22 13:10:53 1056

原创 第三十一讲--网络原理及配置

Oracle的网络没有负载。         Oracle的监听要独立启动,监听跟数据库的没有太多关系。可以先起监听再起数据库,也可以先起数据库再起监听。数据库崩溃了监听可以存在,监听完蛋了数据库可以存在。虽然监听和数据库没有太多联系,但是它们之间也要互相知道对方在哪。监听知道数据库在什么地方,但是监听和数据库之间没有长连接。         用户通过sqlplus发起的连接连的是监听。L

2016-03-22 13:01:34 794

原创 第三十讲--锁相关视图及相关操作

select xidusn, xidslot,xidsqn,statusfrom v$transactionxidusn是事务使用的回滚段的编号,xidslot事务使用的槽位数,xidsqn是槽位被覆盖的次数,xidusn、xidslot、xidsqn这三个参数唯一的标识了一个事务。Status是事务当前的状态。

2016-03-22 12:42:48 435

原创 第二十九讲--锁基础原理

Oracle实例里面的sharedpool、buffer cache、log buffer在内存的SGA(shared global area)里面,也就是说所有的前台进程(PGA)和后台进程(DBWR、LGWR)都可以访问。后台进程数量有限(十几个),而且后台进程的工作负载并不重,对oracle数据库来讲最多的进程是server process,一个session对应一个链接,一个链接对应一个s

2016-03-22 12:41:14 553

原创 第二十八讲--读一致性(ORA-01555错误机制分析)及Undo表空间大小设置

一个会话读到了另未提交一个事务所修改的数据叫脏读。         假设会话一在08:50读一张有一万行数据的A表,在08:55时会话二删除了A表的第一万行数据,在09:00时会话一读出了A表的全部数据,此时全部数据是9999行还是10000行呢?答案是10000行,虽然会话二删除了第10000行的数据并提交了事务,但是oracle为了满足读一致性要求,会话一依然可以读出10000行数据。

2016-03-22 12:40:15 785

原创 第二十七讲--Oracle IMU及Redo Private Strands技术

Oracle传统的undo机制:在传统里面oracle对undo表空间和普通表空间是一视同仁的。都是在buffer cache里面分配内存区,都是用DBWR进程定时写到磁盘上。一个事务开始时,在一个相对空闲的undo段段头里面获得一个槽位,写上事务信息。1.段头可能不在内存里面,就需要通过IO把段头放在内存里去;2.接下来获得一个undo回滚块,可能undo回滚块不在内存里面,这是会发生I

2016-03-22 12:37:01 1466

原创 第二十六讲--深入剖析事务槽及Oracle多种提交方式

每一个oracle块的头部都有事务槽,oracle块里有一个PCT_free的概念,即oracle会预留块大小的10%作为缓冲,当修改oracle的事务增加时,事务槽向下增长,当更新oracle块的数据时,数据向上增长,PCT_free的空间被压缩。当PCT_free被用完时,oracle就彻底填满了,如果还有事务要修改Oracle块,就需要在事务队列中等待这叫做事务槽的争用。假如一张表占有8

2016-03-22 12:34:52 2741

原创 第二十五讲--图解深入剖析一个事务的操作流程

事务ID:当一个事务开始以后,oracle会给事务分配一个XID。          事务表:undo表空间的undo段的第一个数据块里面放了一个事务表,介于块大小的限制,最多可以放47个事务。 段头块:Undo表空间里的undo段里的第一个块叫做undo段的段头块,这段头块里面有一个事务表,事务表最多有47行,每行放一个事务,也就是说一个undo段最多有47个活动事务

2016-03-22 12:28:31 1494

原创 第二十四讲--Undo段及区的状态和使用

Undo的作用:oracle开始一个事务的时候使用undo表空间。假如执行一个delete语句,oracle会把删除前的数据放到undo表空间的undo段里面。一个事务修改的block越多则占用的undo段越多。Undo的两大作用:1.Oracle的事务有时需要回滚,回滚的作用就是把事务修改前的数据拷贝回来,所以需要修改前的数据,修改前的数据就放在undo表空间里面;2.B会话要读

2016-03-22 12:26:47 1213

原创 第二十三讲--Undo表空间概述

数据库建好以后自动有undo表空间,undo表空间里自动有undo段(这一点与普通表空间不同)。Undo段里的区是自动分配的(这一点和普通表空间一样),块也是自动使用的。Undo表空间与普通表空间的不同:1.      undo段是自动生成的,自动维护的;2.      oracle自动使用undo段,普通表空间的段是手工创建的也是手工使用的; 查看undo表空间:SQL>

2016-03-22 12:17:25 579

原创 第二十二讲--事务ACID及隔离级别

事务的含义(ACID):1.      原子性(automicity):事务中包含的所有操作要么都做要么都不做,保证数据库是一致的;2.      一致性(consistency):数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束;3.      隔离性(Isolation):数据库允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉

2016-03-22 12:14:20 506

Dijsktra 算法的 C/C++ 代码实现

Dijsktra 算法的 C/C++ 代码实现

2016-08-28

STL简单迭代器的实现

介绍博客:http://blog.csdn.net/chengonghao/article/details/51360792

2016-05-10

C# MVC4 easyui datagrid expand row

整理了一个基于 C# MVC4 jQuery-easyui 的datagrid的expand row的demo

2015-05-02

c#的Oracle数据库访问类

很不错的底层访问类,每段函数的注释清楚,使用起来很方便!

2015-03-24

聚类分析--C-平均算法

最近模式识别课程要求编写一个聚类分析的C平均算法,我简单的编写了一个程序。窗体用VS2010写的,语言是C++,其中有断言错误,但是功能基本实现。有空再改吧!

2014-11-06

空空如也

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

TA关注的人

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