
基础
文章平均质量分 71
leileicaocao
这个作者很懒,什么都没留下…
展开
-
LINUX0.11内核阅读笔记
我是通过阅读赵炯老师编的厚厚的linux内核完全剖析看完LINUX0.11的代码,不得不发自内心的说Linus真的是个天才。虽然我觉得很多OS设计的思想他是从UNIX学来的,但是他自己很周全很漂亮很巧妙地实现了如此庞大一个系统的绝大多数代码。这里面有太多环节需要注意,很难得。。。读完之后觉得很有收获,虽然版本很低,但是已经对OS有一个很具体的认识了,比理论上的要来得深刻、真实。下面是我自己转载 2013-05-23 09:19:32 · 675 阅读 · 0 评论 -
(3)寻找最小的K个数
/* * 寻找最小的K个 *//* 1.排序,然后遍历前K个 O(nlogn) 2.维护一个K大小的数组 O(K+(n-K)*n) 3.维护一个K大小的最大堆 O(K*logK + (n-k)*logK) = O(nlogK) 4.类似于在一个数组中找第K大的数的算法 5.计数排序 6.将数组建立一个最小堆,然后取K个 7.性质:最小堆:第K层最小堆一定全部小于第(K原创 2013-05-23 09:21:50 · 650 阅读 · 0 评论 -
Linux0.11内核可视化调试方法
先运行start_bochs.bat,敲一下回车,显示waiting for gdb connection on localhost:1234运行bin目录下的insight.exeFile->Open 打开linux-0.11\tools目录下的system.exeFile->Target Settings Target下拉列表中选择Remote/TCP,hostname:local原创 2013-05-24 09:01:52 · 717 阅读 · 0 评论 -
利用 gprof2dot 和graphviz 图形化定位linux c/c++系统性能瓶颈
1 下载 http://code.google.com/p/jrfonseca/wiki/Gprof2Dothttp://jrfonseca.googlecode.com/svn/trunk/gprof2dot/gprof2dot.py 下载gprof2dot.py http://www.graphviz.org/Download_source.php下载源代码graphviz-转载 2013-05-24 09:02:00 · 744 阅读 · 0 评论 -
在windows下调试linux内核
下载part1http://download.youkuaiyun.com/source/404520part2http://download.youkuaiyun.com/source/404526编译过程:1). 解压后默认的文件夹位置是在D:/Linux-0.11,如果你不是将文件解压到该目录下, 你要修改MinGW32目录下的MinGW32.bat文件转载 2013-05-24 09:04:23 · 771 阅读 · 0 评论 -
Vim编辑命令
高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的::qx 开始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的宏命令稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录下来的命令进行重复,此命令后可跟数字,转载 2013-05-25 12:34:59 · 402 阅读 · 0 评论 -
学习操作系统参考的一些网站
MIT cs6.828:http://pdos.csail.mit.edu/6.828/2010/index.htmlMIT-2011-6.828-JOS-Git-Backup:https://github.com/HawxChen/MIT-2011-6.828-JOS-Git-Backup/tree/lab3MIT OS:http://blog.youkuaiyun.com/yunhuang2010原创 2013-05-23 09:19:38 · 737 阅读 · 0 评论 -
pthread-win32在VC下的配置与使用
1、从http://sourceware.org/pthreads-win32/下载pthread 的windows安装包,我下的是pthread-w32-2-9-1-release.zip,其他版本也可以。解压到pthread-w32-2-9-1-release。 2、打开vs2010,项目->属性->配置属性->VC++目录,包含目录里添加inlude路径,如下图所示,如果刚下载的压缩包放原创 2013-06-13 15:08:42 · 2096 阅读 · 0 评论 -
在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
转载:http://blog.youkuaiyun.com/beiyeqingteng/article/details/7167823问题:一个int数组, 比如 array[],里面数据无任何限制,要求求出所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。分析:最原始的方法是检查每一个数 array[i转载 2013-06-04 16:47:19 · 580 阅读 · 0 评论 -
字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
1. 最长回文串一般用后缀数组或者后缀树可以解决,用此方法:http://blog.youkuaiyun.com/v_july_v/article/details/6897097预处理后缀树,使得查询LCA的复杂度为O(1)。这步的开销是O(N),N是单词S的长度 ;对单词的每一位置i(也就是从0到N-1),获取LCA(S(i), S‘(N-i-1)) 以及LCA(S(i),转载 2013-06-04 17:08:16 · 713 阅读 · 0 评论 -
从Trie树(字典树)谈到后缀树
作者:July、yansha。出处:http://blog.youkuaiyun.com/v_JULY_v 。 引言 常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两个问题。 第一个问题: 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,转载 2013-06-04 17:18:22 · 602 阅读 · 0 评论 -
随机算法
http://www.searchtb.com/2010/12/random-algorithm.html void SelectMNumberFromN(int arr[], int n, int m){ for (int i = 0; i < n && m; ++i) { // p(i) < m / (n - i) if (rand() % (n - i) < m)转载 2013-06-04 15:01:48 · 1381 阅读 · 1 评论 -
Linux0.11、source Insight、Bochs
【关于source Insight 和Linux 0.11内核】个人推荐的source insight绿色版下载地址:http://www.sz1001.net/soft/39263.htm使用说明:首先将@绿化.reg文件双击,同意添加注册表,然后就可以使用Insight3.exe了,同理,如果要卸载的话,点击@卸载.reg,然后删除文件夹就可以了。Linux 0.11下原创 2013-05-23 09:19:23 · 1153 阅读 · 0 评论 -
【图解】Linux下C程序进程地址空间布局
作者:沧海猎人 出处:http://blog.youkuaiyun.com/embedded_hunter 转载请注明出处 嵌入式技术交流QQ群:179012822我们在学习C程序开发时经常会遇到一些概念:代码段、数据段、BSS段(Block Started by Symbol) 、堆(heap)和栈(stack)。先看一张教材上的示意图(来源,《UNIX环境高级编程》一书),显示了进程转载 2013-05-22 09:09:55 · 586 阅读 · 0 评论 -
IP地址分类
为了和已存在的IP地址空间及IP数据报兼容,对IP地址的定义在1981年的RFC 791进行了修改。修改后的IP地址共有三种网络地址长度不同的单播地址。如下表所示:Class前缀位网络地址位数剩余的位数网络数每个网络的主机数A类地址0824128原创 2013-05-21 09:05:58 · 539 阅读 · 0 评论 -
Linux进程间通信
管道、消息队列、信号量、信号、共享内存、套接口socketa) 管道(Pipe)及有名管道(namedpipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;b) 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发原创 2013-05-21 09:06:34 · 423 阅读 · 0 评论 -
二叉查找树转换为双向链表
#include using namespace std; struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight; TreeNode(int _nNum, TreeNode *t1, TreeNode *t2) : m_n原创 2013-05-21 09:07:33 · 565 阅读 · 0 评论 -
extern C
前些天,编程序是用到了很久以前写的C程序,想把里面的函数利用起来,连接发现出现了找不到具体函数的错误:以下是假设旧的C程序库C的头文件/*-----------c.h--------------*/#ifndef _C_H_#define _C_H_extern int add(int x, int y);#endifC的源文件/*-----------c.c-----原创 2013-05-21 09:06:24 · 456 阅读 · 0 评论 -
C++函数调用方式
1. _cdecl (1). 是C Declaration的缩写,表示C语言默认的函数调用方法,实际上也是C++的默认的函数调用方法。 (2). 所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。具体所示:调用方的函数调用->被调用函数的执行->被调用函数的结果返回->调用方清除调整堆栈。(3). 被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完原创 2013-05-21 09:04:48 · 626 阅读 · 0 评论 -
除法、取余
一、下面的题目你能全做对吗? 1.7/4=? 2.7/(-4)=? 3.7%4=? 4.7%(-4)=? 5.(-7)/4=? 6.(-7)%4=? 7.(-7)/(unsigned)4=? 答案: 1 -1 3 3 -1 -3 1073741822 二、除法的取整分类 除法的取整分为三类:向上取整、向下取整、向零取整。 1.向上取整:向+∞方向取最接近原创 2013-05-21 09:05:15 · 1561 阅读 · 0 评论 -
linux环境下 C++性能测试工具 gprof + kprof + gprof2dot
1.gprof很有名了,google下很多教程g++ -pg -g -o test test.cc./test //会生成gmon.outgprof ./test > prof.log看一下对于我前面提到的huffman编码压缩+解码解压缩全部过程的一个程序对于生成的prof.log ,wow, 很有用处的但是看起来有点累,不是吗:)C转载 2013-05-21 09:08:44 · 966 阅读 · 1 评论 -
前后++
i++和++i的效率比较简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被适用,而是仅仅简单地用于增加一元操作数,答案是明确的,前缀法和后缀法没有任何区别。编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁地在二者之间制造任何差异。 示例程序如下。 1 #i原创 2013-05-21 09:05:04 · 486 阅读 · 0 评论 -
主定理、static、指针
主定理:主要记住nlogba和f(n)的关系,即可,大于为情况1,等于为情况2,小于为情况3.T(n)=aT(n/b)+f(n)1) e>0, F(n)=O(nlogba-e),复杂度为T(n)=theta(nlogba):例如T(n)=9T(n/3)+ n, theta(n2)2) f(n)=theta(nlogba),复杂度为T(n)=theta(原创 2013-05-21 09:06:11 · 578 阅读 · 0 评论 -
C语言中函数参数的入栈顺序
对技术执着的人,比如说我,往往对一些问题,不仅想做到“知其然”,还想做到“知其所以然”。C语言可谓博大精深,即使我已经有多年的开发经验,可还是有许多问题不知其所以然。某天某地某人问我,C语言中函数参数的入栈顺序如何?从右至左,我随口回答。为什么是从右至左呢?我终究没有给出合理的解释。于是,只好做了个作业,于是有了这篇小博文。#include void foo(int x, int y转载 2013-05-22 09:09:18 · 502 阅读 · 0 评论 -
字节那些事儿
1、 前言作为一名 C/C++ 程序员,字节是我们天天都要与之打交道的一个东西。我们和它熟稔到几乎已经忘记了它的存在。可是,它自己是不甘寂寞的,或迟或早地,总会在某些时候探出头来张望,然后给你一个腿儿绊。其实,只要你真正了解了它的底细,你就会畅行无阻。在本文中,我们将首先简要了解一下字节的概念,然后着重了解一下字节序问题和字节对齐问题。注:笔者已经尽最大努力保证本文信息的正确性,但确实无法转载 2013-05-22 09:09:26 · 699 阅读 · 0 评论 -
微软C编程精粹
作为函数调用使用,指针和数组是相同的,在传递参数时,数组实际上被传递了指针 1. 表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针2. 下标总是与指针的偏移量相同3. 在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针 对一个数组的访问总是可以写成一个指针加一个偏移量的形式 对数组下标的引用总是可以写成“一个指原创 2013-05-21 09:06:47 · 595 阅读 · 0 评论 -
递归将二叉树转换为双向链表
总体思路是递归,将二叉树转换为记录了头尾指针的双向链表,函数如下Void convertTreeToListHelp(TreeNode *root, TreeNode *&head, TreeNode *&tail){ Head = root; tail = root; If (!root) Return; TreeNode *pLeftHead = NULL; TreeNode原创 2013-09-03 16:17:11 · 682 阅读 · 0 评论