自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

转载 device与driver的关系

<br />/**<br /> *    driver_register - register driver with bus<br /> *    @drv:     driver to register<br /> *<br /> *    We pass off most of the work to the bus_add_driver() call,<br /> *    since most of the things we have to do deal with the bus<br /> 

2010-08-03 16:02:00 826

转载 linux设备驱动模型 (上)

<br />对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属。<br />顾名而思义就知道设备模型是关于设备的模型,既不是任小强们的房模,也不是张导的炮模。对咱们写驱动的和不写驱动的人来说,设备的概念就是总线和与其相连的各种设备了。电脑城的IT工作者都会知道设备是通过总线连到计算机上的,而且还需要对应的驱动才能用,可是总线是如何发现设备的,设备又是如何和驱动对

2010-08-03 15:55:00 529

转载 详解Linux2.6内核中基于platform机制的驱动模型

<br />原文地址:http://blog.csdn.net/sailor_8318/archive/2010/01/29/5267698.aspx<br />注:本原创文章发表于Sailor_forever 的个人blog,未经本人许可,不得用于商业用途。任何个人、媒体、其他网站不得私自抄袭;网络媒体转载请注明出处,增加原文链接,否则属于侵权行为。如有任何问题,请留言或者发邮件给sailing_9806#163.com) <br /> <br /> <br /> <br /> <br /><br />【

2010-08-02 20:04:00 725

转载 LINUX2.6设备驱动模型详细解释

2.6内核增加了一个引人注目的新特性——统一设备模型(device model)。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,从而使得系统具有以下优点:<br />l.代码重复最小化。<br />2.提供诸如引用计数这样的统一机制。<br />3.可以列举系统中所有的设备,观察它们的状态,并且查看它们连接的总线。<br />4.可以将系统中的全部设备结构以树的形式完整、有效的展 现出来——包括所有的总线和内部连接。<br />5.可以将设备和其对应的驱动联系起来,反之亦然。<br

2010-08-02 20:01:00 962

转载 电脑中的频率问题

一首美妙的乐曲会有一个主旋律,而电脑的主旋律就是CPU的时钟频率。主频、外频和倍频,它们从何而来?锁频、超频,又是怎么回事呢?  电脑中有许许多多的半导体芯片,每个芯片都是在特定的时钟频率下进行工作的。时钟发生器提供给芯片的时钟信号是一个连续的脉冲信号,而脉冲就相当于芯片的脉搏,每一次脉冲到来,芯片内的晶体管就改变一次状态,让整个芯片完成一定任务。  电脑中的芯片绝大多数属于数字逻辑芯片,

2010-05-25 18:25:00 6321

原创 a[100]的问题

关于a[100]的问题A[100]作为全局变量comm symbol , length.comm声明一个符号名为symbol的通用符号(common symbol)。当连接时,目标文件中的通用符号可能被并入其它目标文件中已定义的符号,或者被并入其他目标文件中同名通用符号。如果ld无法找到该符号的定义——只有一个或多个通用符号——则分配length个字节的未初始化内存。Length必须是一个

2010-05-23 21:31:00 997

转载 内存管理

Linux上的内存管理 [ FAQ ]Q:什么是mm?A:这可不是meimei哦!指的是内存管理(memory management)。是内核中的一套软件机制,用于有效管理内存的使用。Q:内存管理的软件实现了什么功能?A:1) 进程的保护,即进程向内存管理请求的物理页,由内存管理系统负责,不会将同一物理页(共享页面除外)映射到不同进程的虚地址空间。?? 2) 虚存的实现,允许所有进程使用的

2010-05-18 17:11:00 452

原创 SMT同步

1.       SMP机器主要支持三种同步操作:互斥、点到点时间、全局事件2.       在基于总线的高速缓存一致的对称多处理机系统中,一般采用硬件原语和软件算法相结合来实现同步。3.       互斥操作(1)     简单的锁算法在处理器指令集中支持某种原子执行的读-修改-写指令,如交换指令。Test&Set指令:内存位置的值被读到指定的寄存器中,并且常数1被存入该内存

2010-05-17 19:15:00 539

转载 C++ new( keyword/operator ) ZZ

C++ new( keyword/operator ) ZZ2007-11-29 11:38一、new 与 opeartor new   首先问大家一个问题:new 与 opeartor new有何区别? 如果你回答:operator new就是new的重载运算符呗!回答错误,new是C++内部定义的一种操作符,总像sizeof一样是一种操作符,而operato

2010-05-06 22:11:00 1058

原创 Effective第三章

1.       为防止内存泄露,请使用RAII对象,他们在构造函数中获得资源并在析构函数中释放资源。两个常被使用的RAII classes分别是trl::shared_ptr和std::auto_ptr;前者通常是较好的选择,因为其COPY行为比较直观。若选择auto_ptr,复制动作会使他(被复制物)指向NULL;注意上面两个指针都是负责管理堆上的资源。2.       以独立语句

2010-05-06 19:59:00 485

转载 vs2005中安装boost

vs2005中安装boost auto_ptr可以在标准库中找到,头文件为“memory”,但是像shared_ptr的则需要安装boost库。        前几篇都涉及到了一点boost的东东,可能有些朋友还没有安装boos库,这里转一个在vs2005中安装boost库的贴子。俺就是按照这个贴操作的,没问题。对朋友们或许有点帮助。     注:安装过程参考外表优美别

2010-05-06 19:01:00 588

转载 shared_ptr简介

shared_ptr简介2008年11月17日 StarsunYzL 发表评论 阅读评论 写的code不够多,知识面确实相当缺乏,若不是VS2008开始支持TR1,真不知道有个shared_ptr,只知道有个auto_ptr,翻了下Google,发现早在两年前(甚至更早)shared_ptr就已经在TR1和Boost里面了。  shared_ptr有何本事?简单说就是用来管理被共享

2010-05-06 18:41:00 1773

转载 C++ autoptr

auto_ptr 类是一个模板类,它被定义在 memory 头文件中。auto_ptr 类可以用于管理由 new 分配的单个对象,但是无法管理动态分配的数组(我们通常不会使用数组,而是使用 vector 代替数组)。auto_ptr 在拷贝和赋值的时候有不寻常的行为,因此 auto_ptrs 不能被保存在 stl 的容器中。当 auto_ptr 离开了自己的作用域或者被销毁,由 auto_ptr

2010-05-06 16:39:00 1249

原创 Effective第二章

1.   编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment 操作符,以及析构函数。至于copy构造函数和copy assignment操作符,编译器创建的版本只是单纯地将来源对象的每一个non-static成员变量拷贝到目标对象。2.   若不想使用编译器自动生成的函数,就该明确拒绝。为驳回编译器自动(暗自)提供的机能,可将相应的成员函

2010-05-06 10:36:00 369

原创 time测试程序执行时间

real     0m0.003suser    0m0.000ssys      0m0.002s  real,就是整个运行这个进程从一开始到结束的整个时间(时钟墙)user,是指在运行这个进程中花在用户模式下的时间,即不包括内核的运行时间sys,是指在运行这个进程,花在内核调用的时间,而不是代码库调用 user+sys=这个进程花的时间 但是real则包含了

2010-05-04 16:35:00 672

转载 OpenMP和MPI比较

     OpenMP和MPI是并行编程的两个手段,对比如下:OpenMP:线程级(并行粒度);共享存储;隐式(数据分配方式);可扩展性差; MPI:进程级;分布式存储;显式;可扩展性好。OpenMP采用共享存储,意味着它只适应于SMP,DSM机器,不适合于集群。MPI虽适合于各种机器,但它的编程模型复杂:需要分析及划分应用程序问题,并将问题映射到分布式进程集合;

2010-04-29 10:20:00 6461

原创 MESI 一致性协议

四态写回无效协议MESIMESI在MSI协议的基础上改进的,增加了一个互斥独占状态E。为什么要引入?考虑当一个顺序先读入一个数据项,然后修改一个数据项时,就要产生一个BusRd事务用来得到内存块,并置为S状态,然后产生一个BusRdX事务,用来将该块状态从S变为M状态。而在顺序程序中数据项不存在共享者,因此只会在一个告诉缓存有该块拷贝,后一个事务是不必要的。所以引入一个E状态,用来

2010-04-26 20:18:00 3934

原创 MSI cache一致性协议

按照高速缓存的写策略的不同,有写直达和写回WB两种高速缓存:1.  写直达高速缓存:一旦高速缓存中的一个字被修改,则在主存中要立即修改2.  写回高速缓存: 并不是立即写回,而是当被修改的字从高速缓存中被替换或清除时,才真正修改主存在侦听协议的设计中,主要有两种设计选择:一是写直达高速缓存还是写回高速缓存,二是写无效WI,还是写更新WU协议 MSI协议三态写回无效MSI(m

2010-04-26 19:39:00 7281 2

转载 自加 左值

1.前置运算符和后置运算符,左值和右值。其实很久以来一直都没有怎么搞清楚左值和右值的区别,只知道左值可以放在等号的左边,也可以放在等号的右边,但是右值却只能放在等号的右边,然后形成一个大概直观的印象,知道怎么样做才不出错而已。不过今天看看C++,却发现有了点新的体会。对于表达式a--=5;这样一个表达式,明显是错误的,究其原因,是因为执行等号左边的自减表达式之后,显示取得a的值,然后才是进

2010-04-25 10:55:00 639

转载 红黑树

(阅读本文之前请先了解二叉搜索树)红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种改进。我们知道二叉搜索树在最坏的情况下可能会变成一个链表(当所有节点按从小到大的顺序依次插入后)。而红黑树在每一次插入或删除节点之后都会花O(log N)的时间来对树的结构作修改,以保持树的平衡。也就是说,红黑树的查找方法与二叉搜索树完全一样;插入和删除节点的的方法前半

2010-04-23 15:10:00 1898

转载 虚基类

如果虚基类中声明了非默认形式的构造函数,并且没有声明默认形式的构造函数,那么在整个继承关系中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化类表中列出对虚基类的初始化。 view plaincopy to clipboardprint?#include   using namespace std;  struct A1  {     

2010-04-21 19:04:00 499

原创 友元函数和友元类代码

#ifndef CHAP_9_H#define CHAP_9_H#include "iostream"using namespace std;class Date;//需要声明一下class Test{public: void show(Date & dt );};class Date{public: Date(int y,int m,int d) {  year=y;  mont

2010-04-18 17:08:00 395

转载 C++中的友元函数

在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点:  通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用 friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员的安全。  

2010-04-18 11:12:00 367

原创 静态数据和静态成员函数

#ifndef CHAP_8_H#define CHAP_8_H#include "iostream"using namespace std;class A{private: int a; static int count;public: static int public_count; static void show();};int A::count=1;//静态数据成员的初始化需放在类外执行

2010-04-18 10:59:00 448

转载 静态成员数据 静态对象初始化

1.静态成员数据的定义,与静态类型的变量的定义方式一样,要在成员数据的定义之前加关键字static。2.静态成员数据必须有确定的值,但由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外部对静态成员数据再声明一次,并进行初始化,此时,前面不需要加关键字static。同时为了保持静态成员数据取值的一致性,一般在类的构造函数中不给静态成员数据设置初值。对静态成员数据初始化的顺序为它们在

2010-04-18 10:45:00 4104

原创 static变量保护作用的探讨

在a.c中static int a=1;int b=2; 在b.c中不能用#include "a.c" 因为这样做的结果是将a.c的代码直接拷贝到b.c中,所以对于static变量是可以访问的,那么extern是如何知道a,b在a.c中的呢?这可以通过编译时运行  gcc -o tet a.c b.c来指定 将a.o 和 b.o链接时就可以找到extern int a;//

2010-04-15 20:30:00 576

转载 变量存放地址问题

原文地址:http://blog.csdn.net/normalnotebook/archive/2006/06/08/781397.aspx你的变量究竟存储在什么地方?作者:杨小华       我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。 

2010-04-15 16:45:00 1630

原创 常对象 常成员函数 的关系

#ifndef CHAP_7_H#define CHAP_7_H#include "iostream"using namespace std;class A{public: A(); void test(); void const_test(); void const_test() const;private: int x; const int y;};A::A():y(10),x(20){ co

2010-04-14 21:58:00 521

转载 面试的一个题

题目:     已知strcpy函数的原型是:         char * strcpy(char * strDest,const char * strSrc);     1.不调用库函数,实现strcpy函数。     2.解释为什么要返回char *。     解说:     1.strcpy的实现代码        char * strcpy(char * strDest,const 

2010-04-14 20:18:00 328

原创 构造函数析构函数调用次序

#ifndef CHAP_6_H#define CHAP_6_H#include "iostream"using namespace std;class sample{public: sample() {  cout } sample(int a) {  cout } sample(const sample& s) {  cout } ~sample() {  cout }};#endif

2010-04-14 19:36:00 364

原创 new delete的问题

#include "stdafx.h"#include "iostream"using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char *p=new char [10]; p="012345678"; delete []p; return 0;}这段程序如果不delete[]p则完全可以打印出cout就导致给P重新指向,

2010-04-14 10:36:00 333

原创 拷贝函数访问本类的私有变量的问题

chap_5.h——————————————————————————————————————————————————————————#ifndef CHAP_5_H#define CHAP_5_H#include "string"#include "iostream"using namespace std;class B{public: B(int a,int b);private: in

2010-04-14 09:48:00 409

转载 拷贝构造函数_2

int a = 10; int b =a;自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如:#include usingnamespacestd; classTest { public: Test(inttemp) { p1=temp; } protected: intp1; }; voidmain() { Test a(99); Test b=a; }普通对象和类对象同为

2010-04-13 21:57:00 305

转载 拷贝构造函数与赋值运算符

关于拷贝构造函数和赋值运算符作者:冯明德重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。  以下讨论中将用到的例子: class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} void Init(int n){ pBuf

2010-04-13 21:12:00 280

原创 构造函数的调用次序问题

chap_4.h_____________________________________________________________________________________________#ifndef CHAP_4_H#define CHAP_4_H#include "iostream"using namespace std;class A{public: A(int a,

2010-04-13 20:55:00 405

转载 关于模板的分离式编译问题

甚至是在定义非内联函数时,模板的头文件中也会放置所有的声明和定义。这似乎违背了通常的头文件规则:“不要在分配存储空间前放置任何东西”,这条规则是为了防止在连接时的多重定义错误。但模板定义很特殊。由template处理的任何东西都意味着编译器在当时不为它分配存储空间,它一直出于等待状态直到被一个模板实例告知。在编译器和连接器的某一处,有一机制能去掉模板的多重定义,所以为了容易使用,几乎总是在头文件中

2010-04-13 11:10:00 389

转载 stdafx.h引起的问题

fatal error C1010: unexpected end of file while looking for precompiled header directive问题详细解释:致命错误C1010,在寻找预编译指示头文件时,文件未预期结束。就是没有找到预编译指示信息的头文件。问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,是标准C

2010-04-13 10:03:00 383

转载 const define inline

(1)#define宏的用法#define用宏名代替一个字符串,这样便于修改,提高了程序的可移植性。编译器在编译预处理时只对宏做文本替换,而不进行类型检查,所以替换后可能产生一些副作用。带参数的宏类似于函数调用,但是宏替换不是函数,二者不是一回事。#define square(n) (n)*(n)for(int i=1;i以上语句执行输出的结果为:1,16因为squar

2010-04-13 09:12:00 403

转载 const

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。  一般常量和对象常量  1. 一般常量  一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。如:  int const x=2;  或  const int x=2;  定义或说明一个常数组可采用如下格式:  co

2010-04-11 19:47:00 323

转载 引用

摘要:介绍C++引用的基本概念,通过详细的应用分析与说明,对引用进行全面透彻地阐述。   关键词:引用,const,多态,指针  引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理

2010-04-11 19:06:00 333

linux kernel精解

linux内核精解,以linux0.11为基础解说

2009-07-15

空空如也

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

TA关注的人

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