自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux设备模型

看LDD3中设备模型一章,觉得思维有些混乱。这里从整体的角度来理理思路。本文从四个方面来总结一些内容:1.底层数据结构:kobject,kset.2.linux设备模型层次关系:bus_type,device,device_driver.3.集成:PCI设备驱动模型实例及设备,设备驱动注册源码的简单分析.4.面向对象的思想在linux设备模型中的应用分析. 一、底层数据结构:k...

2011-03-01 00:22:50 120

原创 C语言高效编程的的四大绝招

编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。  第一招:以空间换时间  计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。  例如:字符串的赋值。  方法A:通常的办法:#define LEN 32char string1 [LEN]...

2011-02-26 00:11:12 180

原创 BSS段、数据段、代码段、堆与栈

 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常...

2011-02-24 23:29:01 139

原创 Linux slab 分配器

动态内存管理内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:最小化管理内存所需的时间 最大化用于一般应用的可用内存(最小化管理开销) 内存管理实际上是一种关于权衡的零和游戏。您可以开发一种使用少量内存进行管理的算法,但是要花费更多时间来管理可用内存。也可以开发一个算法来有效地管理内存,但却要使用更多的内存。最终,特定应...

2011-02-24 23:22:41 146

原创 C语言计算程序运行时间问题

#include "stdio.h" #include "stdlib.h" #include "time.h" int main(void) { long i = 10000000L; clock_t start, finish; double duration; /*测量一个事件持续的时间*/ ...

2011-02-22 23:43:36 665

原创 使用 /proc 文件系统来访问 Linux 内核的内容

/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux 内核空间和用户空间之间进行通信。在/proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。 创建并删除 /proc 项要在 /proc 文件系统中创建一个虚拟文件,请使用 create_proc_entry 函数。这个...

2011-02-22 00:02:26 126

原创 最简单的内核模块例子

 #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> static int __init hello_init(void) { printk(KERN_INFO "Hello world\n"); return 0; ...

2011-02-20 18:47:45 223

原创 Linux内核模块与应用程序的区别

         用户态程序           Linux内核模块运行     用户空间          内核空间入口     main()            module_init()指定;出口     无                module_exit()指定; 编译     gcc –c            Makefile连接     ld               ...

2011-02-19 00:32:07 380

原创 Linux中inittab 文件解析

init的进程号是1,从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序,。init程序需 要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。在Redhat系统中,inittab的内容 如下所示(以“###"开始的中注释为笔者增加的):  # inittab This file describ...

2011-02-17 23:11:27 141

原创 系统引导管理器GRUB

本文重点介绍了GRUB的menu.lst的写法,另外通过GRUB命令行引导系统也做了详述;这些无论是对Windows版本的WINGRUB还是Linux版本的GRUB都是适用的;目录索引一、什么是多重操作系统引导管理器,什么是GRUB;1、什么是多重操作系统引导管理器及工作原理;2、什么是GRUB;为什么我要选择GRUB;1)什么是GRUB;2)“GRUB太不好用”──对GRUB的认...

2011-02-17 00:10:17 127

原创 C语言排序算法汇总

几种排序算法的比较和选择1. 选取排序方法需要考虑的因素:(1) 待排序的元素数目n;(2) 元素本身信息量的大小;(3) 关键字的结构及其分布情况;(4) 语言工具的条件,辅助空间的大小等。小结:(1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。(2) 若文件的初始状...

2011-01-13 00:09:14 139

原创 C语言排序算法之“希尔排序法”

算法思想简单描述:在直接插入排序算法中,每次插入一个数,使有序序列只增加1个节点,并且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一...

2011-01-13 00:07:07 332

原创 C语言排序算法之“插入排序法”

插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。 void insert(int *a,int n) { int i,j,temp; for(i=1;i<n;i++) { temp=a; /*temp为要插入的元素*/ j=i-1; ...

2011-01-13 00:04:53 229

原创 C语言排序算法之“快速排序法”

快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码: void quick(int *a,int i,int j) { int ...

2011-01-13 00:04:02 150

原创 C语言排序算法之“选择排序法”

选择排序法是源自冒泡法但更有效率的方法。 选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a,这样就比冒泡法省下许多无用的交换,提高了效率。 void choise(int *a,int n) { int i,j,k,temp; ...

2011-01-13 00:02:10 921

原创 C语言排序算法之“冒泡排序法”

冒泡排序法大家都较熟悉。先定义一个整型数组a[n],其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a,则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:  void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ { int i,j,temp; ...

2011-01-12 23:56:22 237

原创 Eratosthenes筛选求质数的C语言实现

“除了自身之外,无法被其它整数整除的数”称之为质数,要求质数很简单,但如何快速的求出质数则一直是程序设计人员与数学家努力的课题,在这边介绍一个著名的 Eratosthenes求质数方法。解法首先知道这个问题可以使用循环来求解,将一个指定的数除以所有小于它的数,若可以整除就不是质数,然而如何减少循环的检查次数?如何求出小于N的所有质数?首先假设要检查的数是N好了,则事实上只要检查至N的开根号...

2010-07-04 12:14:31 1678

原创 背包问题的C语言实现

假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量如下所示:0 李子 4KG NT$4500 1 苹果 5KG NT$5700 2 橘子 2KG NT$2250 3 草莓 1KG NT$1100 4 甜瓜 6KG NT$6700 ...

2010-07-04 12:02:12 244

原创 八枚银币问题的C语言实现

 现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币比真币较轻或较重。解法单就求假币的问题是不难,但问题限制使用最少的比较次数,所以我们不能以单纯的回圈比较来求解,我们可以使用决策树(decision tree),使用分析与树状图来协助求解。一个简单的状况是这样的,我们比较a+b+...

2010-07-04 11:34:59 392

原创 三色棋解法的C语言实现

三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰人),而多数的作者则使用Three-Color Flag来称之。假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。 ...

2010-07-04 11:30:07 351

原创 巴斯卡三角形算法的C语言实现

巴斯卡(Pascal)三角形基本上就是在解 nCr ,因为三角形上的每一个数字各对应一个nCr,其中 n 为 row,而 r 为 column,如下:    0C0   1C0 1C1  2C0 2C1 2C2 3C0 3C1 3C2 3C34C0 4C1 4C2 4C3 4C4 对应的数据如下图所示:  解法巴斯卡三角形中的 nCr 可以使用以下这个公式来计算,以避免阶乘运算...

2010-07-04 11:25:31 590

原创 费式数列的C语言实现

Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:“若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......”。 如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯称...

2010-07-04 11:15:59 142

原创 八皇后问题的C语言实现

西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。 解法关于棋盘的问题,都可以用递回求解,然而如何减少递回的次数?在八个皇后的问题中,不必要所有的格子都检查过,例如若某列检查过,该该列的其它格子就不用再检查了,这个方法称为分支...

2010-07-04 11:09:38 406 1

原创 C语言常见算法实现

C语言常见算法主要收集一些经常用到的算法,有些笔试面试中经常考到,自己在学习的过程中与大家分享,希望对学习算法和C语言的朋友有帮助。1,汉诺塔算法的C语言实现 2,八皇后问题的C语言实现3,费时数列的C语言实现4,八枚硬币问题的C语言实现 5,三色旗解法的C语言实现6,巴斯卡三角形算法的C语言实现7,背包问题的C语言实现8,Eratosthenes筛选求质数的C语言...

2010-07-04 11:03:37 3513 2

原创 汉诺塔(河内塔)算法的C语言实现

河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第...

2010-07-04 10:55:52 641

原创 C语言入门:指针的慨念

指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必...

2010-06-10 23:01:28 113

原创 C语言内存管理

程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 7.1内存分配方式 内存分配方式有三种: (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 ...

2010-06-09 23:13:18 70

空空如也

空空如也

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

TA关注的人

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