自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++箭头(->)运算符的重载

箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针(this),右操作数为该对象的成员名称。定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用。重载箭头操作符必须定义为类成员函数。箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名。对对象解引用以获取成员。不管外表如何,箭头操作符不接受

2014-04-14 21:52:41 1195

转载 CFS 调度器

首先简单介绍一下基本的设计思路,CFS思路很简单,就是根据各个进程的权重分配运行时间(权重怎么来的后面再说)。进程的运行时间计算公式为:分配给进程的运行时间 = 调度周期 * 进程权重 / 所有进程权重之和   (公式1)调度周期很好理解,就是将所有处于TASK_RUNNING态进程都调度一遍的时间,差不多相当于O(1)调度算法中运行队列和过期队列切换一次的时间(我对O(1)调度算法看得不

2014-04-11 08:48:01 643

转载 ASp.net 剖析三层架构

转自:http://blog.sina.com.cn/s/blog_5ea9354f0100dea0.html

2014-04-11 08:42:19 858

原创 C&C++混合编程

首先,混合编程不是指在同一个文件里写C与C++。混合编程包括:1,C++引用C的头文件;2,g++生成的.o与gcc生成的.o相链接。一、extern“C”的作用(最重点)    1. extern "C"的真实目的是实现类C和C++的混合编程。extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。extern “C”后面的函数不使用的C++的名字修

2014-04-09 23:46:40 1040

转载 NULL, 0, 空格与'0','\0'

NULL其实是一个宏,定义为0,#include 里是:#ifndef NULL#ifdef  __cplusplus#define NULL    0#else#define NULL    ((void *)0)#endif#endif  判断指针是否为空时,p==NULL, 或p==0是一样的意思,但习惯用NULL更好。  后面的空格(' ')与'0',

2014-04-07 11:18:22 629

原创 Linux文件共享(六)——描述符传递

注:转载请注明出处   作者:lvyilong3165.1 进程间描述符传递首先,我们先来讨论一个问题——进程间传递文件描述符究竟传递的是什么?我们从传递描述符函数的参数来看是个fd,我们知道fd是打开文件指针的在数组中的下标,是一个整数,那么我们仅仅是把一个整数传递给另一个进程吗?答案肯定是否定的,因为仅仅是传递整数值,没有必要专门去实现一个api。至于深层次的的原因,我们可

2014-04-07 10:48:20 1397

原创 Linux文件共享(五)——线程共享文件

注:转载请注明出处   作者:lvyilong3164.1 Linux线程实现在谈论线程之间共享文件之前,我想首先简单的介绍下linux线程的实现。最初的进程定义都包含程序、资源及其执行三部分,其中程序通常指代码,资源在操作系统层面上通常包括内存资源、IO资源、信号处理等部分,而程序的执行通常理解为执行上下文,包括对cpu的占用,后来发展为线程。在线程概念出现以前,为了减小进程切换的开

2014-04-07 10:43:03 1130

原创 Linux文件共享(四)——父进程与子进程之间的文件共享

注:转载请注明出处   作者:lvyilong316由fork产生的进程为子进程。fork的一个特性是父进程所有的打开文件描述符(file_struct)都被复制到子进程中,父子进程的每个相同的打开描述符共享一个文件表项如图。 在linux系统中的具体实现可用下图表示(说明:进程的fs_struct也会被复制,图中没有画出)。这种共享的方式使父、子进程对同一个文件使用了

2014-04-07 10:36:37 1674

原创 Linux文件共享(三)——dup

dup返回的新文件描述符是当前可用文件描述符中的最小值。它返回的新描述符与参数fd共享一个文件表项(file对象)。调用dup会使file的引用计数增1,即增加“打开文件”引用计数。图3-3是apue中的原图。 我们用以下程序测试并说明:#include #include #include #include #define FILE_MODE (S_IRUSR|S_IWUSR|

2014-04-07 10:30:33 931

原创 Linux文件共享(二)——两个独立进程打开同一个文件

如果两个独立进程各自打开了同一文件,则有图3-2中所示的安排。我们假定第一个进程使该文件在文件描述符3上打开,而另一个进程则使此文件在文件描述符4上打开。打开此文件的每一个进程都得到一个文件对象,但对一个给定的文件只有一个v节点表项。每个进程都有自己的文件对象的一个理由:这种安排使每个进程都有它自己对该文件的当前位移量。这种情况不会增加对应的打开文件引用计数,而会增加dentry的引用。 

2014-04-07 10:16:14 3556

原创 Linux文件共享(一)——进程与打开文件

Linux支持在不同进程间共享打开文件。为了说明文件共享,先来说明内核用于所有I/O的数据结构。 他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。0.1和文件有关的对象(1) inode(i节点): 保存一个文件的通用信息,每个inode有一个inode number,在文件系统中,一个inode number能够唯一地标识一个文件。(2) dentry(目录项对

2014-04-06 12:29:11 3076

原创 C++虚继承

首先看一段代码:class B{public :int b;};class D: virtual public B{public :int d;}; int _tmain(int argc, _TCHAR* argv[]){cout<<sizeof(D)<<endl;};    在vs输出12,当将virtual关键字去掉之后,输出8;可见虚拟继承需要额

2014-04-04 00:24:03 810

原创 C++数据成员

Static成员class B{public :static int val;};int B::val=0;class D :public B{ };int _tmain(int argc, _TCHAR* argv[]){B::val=5;cout <<D::val<<endl;//5}说明:static成员变量在继承体系中只有一份,其访问方式限制(

2014-04-04 00:13:58 930

转载 C语言中的字节对齐

一、什么是字节对齐一个基本类型的变量在内存中占用n个字节,则该变量的起始地址必须能够被n整除,即: 存放起始地址 % n = 0,那么,就成该变量是字节对齐的;对于结构体、联合体而言,这个n取其所有基本类型的成员中占用空间字节数最大的那个;内存空间是以字节为基本单位进行划分的,从理论上讲,似乎对任何类型的变量的访问都可以从任何地址处开始,但实际情况是在访问特定类型变量的时候经常是从特定的内

2014-04-01 20:11:17 672

原创 漫谈析构函数(一)——从一个面试题开始

漫谈析构函数(一)——从一个面试题开始

2014-03-31 23:01:40 801

原创 C++构造函数、拷贝构造函数、赋值运算符漫谈(三)——NRV

//首先看下面一段程序:class X{public: X() { cout<<"X()"<<endl; }; X(int v):val(v) { cout<<"X(int)"<<endl; } X(const X& x) { cout<<"X(const X& x)"<<endl; } X& operator=(const X&) { cout<<"="

2014-03-27 00:10:42 718

原创 C++构造函数、拷贝构造函数、赋值运算符漫谈(二)——函数返回值

首先我们先看一下C程序的返回值处理情况,我们知道当C函数返回int等小型数据时直接将返回值放入eax寄存器。那当返回大的数据结构又是如何处理呢?看如下一段代码:#include typedef struct big_thing{char buf[128];}big_thing;big_thing return_test(){big_thing b;b.buf[0]=0;r

2014-03-26 23:44:06 627

原创 C++构造函数、拷贝构造函数、赋值运算符漫谈(一)——函数参数传递

在讨论C++函数参数之前,我们先来看一下C程序是如何调用函数的。 如图,为C语言的函数调用记录,C++也类似。当有如下函数:void foo(X x0);如果有如下调用方式:X xx;foo(xx);    编译器(对于C)会将实参xx以“位逐次拷贝”方式复制给形参x0(注:X0即在上图函数活动记录中的参数位置)。在C++中,如果一个Class也展现了“位逐次拷贝语义”

2014-03-26 23:03:21 649

原创 linux文件系统(四)——软连接与硬连接

声明:本Linux文件系统博客,共分四节,是根据网上多个相关博客,以及自己的理解加上相关资料总结而成。(作者:lvyilong316)1. 特点概述(1)软连接可以 跨文件系统 ,硬连接不可以 。实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 连接成功 。ln aa.tx

2014-03-11 00:12:25 1415

原创 linux文件系统(三)——进程与VFS的关系

声明:本Linux文件系统博客,共分四节,是根据网上多个相关博客,以及自己的理解加上相关资料总结而成。(作者:lvyilong316)  系统中的每一个进程都有自己的一组打开的文件 ,像根文件系统,当前目工作目录,安装点等。有四个数据结构将VFS层和系统的进程紧密联系在一起,它们分别是:files_struct,fs_struct,file_system_type 和namespace结构

2014-03-11 00:05:44 872

原创 linux文件系统(二)——VFS四个主要对象的实现

声明:本Linux文件系统博客,共分四节,是根据网上多个相关博客,以及自己的理解加上相关资料总结而成。(作者:lvyilong316)VFS采用的是面向对象的设计思想,使用一簇数据结构来代表通用文件对象。所有内核中的数据结构都使用C结构体实现。1.superblock(超级块)对象保存一个挂在的文件系统的相关信息(Stores information concerning a

2014-03-10 23:54:24 1132

原创 linux文件系统(一)——VFS的概念

声明:本Linux文件系统博客,共分四节,是根据网上多个相关博客,以及自己的理解加上相关资料总结而成。(作者:lvyilong316)Linux 之所以能支持除了Ext2文件系统之外的各种文件系统,是因为Linux提供了一种统一的框架,就是所谓的虚拟文件系统转换(Virtual FilesystemSwitch),简称虚拟文件系统(VFS)。这样, 用户程序可以通过同一个文件系统界面,也就

2014-03-10 23:37:09 872

原创 linux 高端内存映射方式

1.1 内核地址空间(线性空间)分布 (1) 直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。(2) 动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。(3

2014-03-09 11:54:50 981

原创 Linux系统虚拟内存空间

首先借用网上一张图,感觉这个比较清晰:Linux系统虚拟内存空间一般布局示意图1.1 线性空间线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。线性空间又分为用户空间和内核空间。1.1.1 用户空间(进程地址空间)用户空间是指从0x00000000到0xBFFFFFFF共3GB的线性地址空间,每个进程都有一个独立的3G

2014-03-09 11:45:29 796

转载 全排列生成算法 .

参考链接: 全排列生成算法(一)原文讲的很详细了,为了完整性,这里粘贴的参考链接中大部分文字,并且在原文的基础上,添加了“给定某个排列,求其字典序中上一个元素”的算法。字典序全排列生成算法的一个重要思路,就是将集合A中的元素的排列,与某种顺序建立一一映射的关系,按照这种顺序,将集合的所有排列全部输出。这种顺序需要保证,既可以输出全部的排列,又不能重复输出某种排列,或者循环输

2013-04-07 18:26:04 557

转载 面试题:大数据查询怎么优化? .

对于百万千万量级别的数据进行查询,如果查询方式不合理的话,会严重影响系统的运行性能及服务器的压力。常见优化查询的方案有如下:1,对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by 涉及的列上建立索引。2,应尽量避免在where子句中进行null的判断,否则将导致查询放弃进行索引进行全表扫描。可以在null上设默认值为0。3,尽量避免在where子句中使用o

2013-04-02 17:51:10 480

转载 "undefined reference to" 问题解决方法

最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func'     关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1.  链接时缺失了相关目标文件(.o)

2013-04-01 10:16:37 535

原创 语言变量声明内存分配

一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全

2013-03-24 22:45:04 526

转载 自动、静态、 寄存器、易失变量的区别 .

(一)自动变量     什么是自动变量呢?自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同

2013-03-19 15:40:36 582

转载 全排列算法原理和实现

全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3

2013-03-19 15:38:01 505

银行家算法实现

本程序采用C语言实现银行家算法,含有设计说明及源代码,将代码直接复制即可运行

2013-04-13

空空如也

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

TA关注的人

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