自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL树插入的简单实现

avl.h #ifndef _AVL_TREE_H #define _AVL_TREE_H struct avl_node {         avl_node(int k);         int key;         char bf;//Hight(left) - Hight(right), balance factor[-1, 0, 1].         avl_

2012-05-03 09:08:15 550

原创 AVL树基本原理

在算法与数据结构中对平衡二叉搜索树的AVL树的定义是如下, a tree is balanced if and only if for every node the heights of its two subtrees differ by at most 1. Trees satisfying this condition are often called AVL-trees( After

2012-04-19 10:22:33 1796

原创 静态库动态库的配置使用

writing and using libraries 几乎所有的程序都链接一个或多个库。当你运行gcc的时候,系统会默认添加libc库,运行g++的时候会加入stdc++库。库的出现大大增强了程序的可复用性,便于管理。库分为静态库和动态库。使用静态库,程序会变大(加入整个静态

2011-09-21 12:09:12 1187

原创 守护进程,xinetd使用

Definition: In Unix and other computer multitasking operating systems, a daemon is a computer program that runs in the background, rather than under the direct control of a user; they are usually

2011-09-06 15:18:39 956

原创 Linux下malloc/free内存碎片问题

通过对malloc,free源码的分析,发现在堆上分配内存,很容易造成内存碎片。内存碎片在这里可以从两个方面进行分析,物理地址的内存碎片和线性地址(虚拟地址)的内存碎片。 首先是物理地址的内存碎片,malloc_free_list大小依次为8,16,32....。那么我们请求的

2011-08-31 18:13:04 11018

原创 Linux下malloc/free详解

在程序开发中,堆和栈是最常使用的两个内存区,在Linux下栈分为用户栈和内核栈,内核栈具有固定大小,而用户栈可以通过ulimit来设定,最大8M。 堆具有很大的灵活性,程序员可以根据需要获取任意大小的内存(只只是相对于栈来说,对于32位机,它最大能分配2G多的虚拟地址空间)。m

2011-08-30 18:38:31 6819

原创 little endian & big endian (record)

Programmers should strive to make their programs portable across different machines and compilers.For program objects that span multiple bytes, we must establish two conventions: what will be the address of the object, and how will we order the bytes in me

2011-01-06 12:52:00 633

原创 内联函数并不总是内联

Inline function是在C++中引入的一种机制,它可以拓展函数代码,避免调用函数的额外开销。在Linux环境下,gcc编译选项必须加上优化选项才能使inline有效。如inline int fun(int i, int j){        printf("%d/n", i+j);        return i+j;}void main(){fun(3,4);}不带优化编译选项:g++ -S inline.cc产生的汇编代码片断如下:andl    $-16, %esp    ;栈指针对齐sub

2011-01-05 18:55:00 730

翻译 ELF format -- How programs look from the inside

ELF format -- How programs look from the inside ELF 是用于Linux系统下一种文件格式,包括目标文件,二进制文件,共享库和core dump。 它非常简单,而且具有好的输出格式。 ELF针对不同的架构具有相同的布局,但是排列次序(endianness)和字长可能不同;重定位类型,符号类型和可能具有平台相关的值,当然也包括平台相关的代码。

2010-12-21 18:02:00 1213

原创 Regular Expression

<br />Regular expressions(RegEx) are an extremely powerful tool for manipulating text and data. They are now standard features in a wide range of languages and popular tools, including perl, python, ruby, grep, awk and so on.<br />Every languages or too

2010-09-17 12:43:00 554

原创 Linux下C/C++程序内存布局 各种类型数据存储区域及生长方向

<br /><br />在32位系统下,对于一个进程来说,理论上它具有4G的内存空间,那么写一小段代码来看看各个部分在逻辑上是如何分布的。<br />#include <stdio.h><br />#include <stdlib.h><br />int g_i = 3;<br />static int s_i = 4;<br />const int c_i = 5;<br />char* g_p = "abc";<br />void fun()<br />{}<br />static void s_fun

2010-06-25 15:08:00 1800 1

转载 程序员的十层楼 11层(上帝)

第10层 上帝看了上面的小标题,你可能会觉得奇怪,这篇文章不是讲"程序员的十层楼"吗?怎么冒出了第11层来了?其实这并不矛盾,程序员确实只有十层楼,因为爬到第11层时,已经变成上帝,不再是程序员了;所以超出10层楼本身并不重要,关键的问题是看你有没有能力变成上帝。1、谁是上帝?菜鸟们认为Linus Torvalds是程序员中的上帝,看完了前面各层楼的介绍,此时再看到这句话,相信你要忍不住在心里笑起来。当然,你会不会笑起来是事先注定的。Don Knuth也不是上帝,他离上帝还有三层楼的距离。即使是大哲们,他们

2010-06-13 13:46:00 527

转载 程序员的十层楼(8~9层)

<br />第8层 科学家<br /> <br />科学家向来都是一个神圣的称号,因此我把他放在了"大师"之上。要成为科学家,你的贡献必须超越大师,不妨随便举一些例子。<br />如果你象Dijkstra一样设计了ALGOL语言,提出了程序设计的三种基本结构:顺序、选择、循环,那么你可以爬到第8层楼来。顺便说一下,即使抛开这个成果,Dijkstra凭他的PV操作和信号量概念的提出,同样可以进到这层楼。<br />如果你象Don Knuth一样,是数据结构与算法这门学科的重要奠基者,你也可以进到这层楼来。当然

2010-06-13 13:37:00 467

转载 程序员的十层楼(6~7层)

<br />第6层 学者<br /> <br />当"专家"们想继续往上一层楼爬时,他们几乎一眼就可以看到楼梯的入口,不过令他们吃惊的是,楼梯入口处竖了一道高高的门槛,上面写着"创新"二字。不幸的是,大多数人在爬到第5层楼时已经体能消耗过度,无力翻过这道门槛。<br />有少数体能充足者,可以轻易翻越这道门槛,但是并不意味着体力消耗过度者就无法翻越,因为你只是暂时还没有掌握恢复体能的方法而已,当掌握了恢复体能的方法,将体能恢复后,你就可以轻易地翻越这道门槛了。<br />怎么才能将体能恢复呢?我们的老祖宗"

2010-06-13 13:31:00 409

转载 程序员的十层楼(4~5层)

<br />第4层 大牛<br /> <br />从第3层爬到第4层可不像上面说过的那几层一样容易,要成为大牛的话,你必须要能做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统,不会写编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得象模象样的话,那么你就从牛人升级为"大牛"了。<br />当然,由于各个专业领域的差别,这里举操作系统、编译器、TCP/IP协议只是作为例子,并不代表成为"大牛"一定需要掌握这些知识,以时下热门的多核编程来说,如果你能比牛人们

2010-06-13 13:24:00 411

转载 程序员的十层楼(1~3层)

<br />自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。<br />那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没有

2010-06-13 13:20:00 436

原创 指针,引用区别

指针和引用看上去完全不同,但它们似乎具有相同的功能。先看一个小例子,了解下究竟编译器对他们做了什么处理。int main(){ int i = 3; int *p = &i; return 0;}我们生成它的汇编代码,主要部分为:main:.LFB2:        pushl   %ebp.LCFI0:        movl    %esp, %ebp.LCFI1:        subl    $8, %esp.LCFI2:        andl    $-16, %esp        movl

2010-06-11 18:06:00 526

原创 const 小结

<br /><br />通用定义:In computer programming, a constant is a special kind of variable whose value cannot typically be altered by the program during its execution.<br /> <br />const主要用于限制程序员的写行为,限制不是禁止,仍然可以通过各种方式突破这种限制。<br /> <br />1.修饰普通变量<br />const int i; /

2010-06-09 17:38:00 476

原创 异或

1.异或运算具有交换律、结合律。2.一个数和自己做异或的结果是0。xorl %eax, %eax比movl $0, %eax快3.与0做异或,保持原值不变。运用特性1,2,3,常在面试中遇到不用中间变量交换两个变量值。int A=5, B=3;A         B5         3A=A^B   5^3       3B=A^B   5^3  5^(3^3)=5^0=5A=A^B  5^3^5=3 5(这样运算只能帮助更好的理解异或的特性,但是针对效率而言,它不及采用中间变量的办法)。还有一个应用如:

2010-06-08 17:19:00 1571 1

空空如也

空空如也

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

TA关注的人

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