- 博客(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
原创 类成员初始化顺序
类的初始化表的初始化顺序是根据成员变量的声明顺序来执行的,而不是按照初始化列表的顺序。#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
原创 销毁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
C# MVC4 easyui datagrid expand row
2015-05-02
聚类分析--C-平均算法
2014-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人