2014年3月12日

"排序二叉树"之探幽

摘要: /*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值; (2)所有右节点的数值都大于此节点的数值。 */ 1 /************************头文件部分**************************/ 2 /******************************************************** 3 filename :tree_head.h 4 time :2013-11-13 5 copyrignt:none 6 author :cheng 7 ***... 阅读全文

posted @ 2014-03-12 20:27 程良 阅读(255) 评论(0) 推荐(0) 编辑

内存管理

摘要: 高效的程序离不开内存的有效管理。在有效的内存资源的前提下,有效的对内存管理的好处不少:减少内存分配、回收开销、避免内存碎片、定位内存位置、方便内存整理、跟踪内存使用等等。V8 的堆内存Heap用于存预编译的code、JS对象内存分配、运行上下文对象分配、垃圾回收等。试题1:1 void test1()2 {3 char string[10];4 char *str1 = "0123456789";5 strcpy( string, str1 );6 }试题2: 1 void test2() 2 { 3 char string[10], str1[10]; 4 i... 阅读全文

posted @ 2014-03-12 20:19 程良 阅读(263) 评论(0) 推荐(0) 编辑

摘要: 前面我们讲到了容器,今天我们接着讨论另外一种数据结构:堆栈。堆栈几乎是程序设计的命脉,没有堆栈就没有函数调用,当然也就没有软件设计。那么堆栈有什么特殊的属性呢?其实,堆栈的属性主要表现在下面两个方面:1)堆栈的数据是先入后出2)堆栈的长度取决于栈顶的高度那么,作为连续内存类型的堆栈应该怎么设计呢?大家可以自己先试一下:#ifndef _stack_h#define _stack_h#include #include #define EMPTYSTACK -1#define MINSTACKSIZE 5typedef struct stackRecord{ int capacity; int t 阅读全文

posted @ 2014-03-12 19:45 程良 阅读(266) 评论(0) 推荐(0) 编辑

Linux 系统下10个查看网络与监听的命令

摘要: 下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令。网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool 用于查看linux服务器ip地址,管理服务器网络配置 ,通过 telnet 和ethernet建立与linux之间的网络链接,查看linux的服务器信息等。下面让我们看看在linux下的网络和监控命令的使用。1. hostnamehostname 没有选项,显示主机名字hostname –d显示机器所属域名host.. 阅读全文

posted @ 2014-03-12 19:24 程良 阅读(4257) 评论(0) 推荐(0) 编辑

Linux下用gdb 调试、查看代码堆栈

摘要: Linux中用gdb 查看代码堆栈的信息core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。调试的话输入: gdb filename core filename就是产生core文件的可执行文件,core就是产生的dump文件查看栈信息—————当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令:backtracebt打印当前的 阅读全文

posted @ 2014-03-12 19:06 程良 阅读(114833) 评论(2) 推荐(2) 编辑

GPIO引脚速度的应用匹配

摘要: GPIO 引脚速度: GPIO 引脚速度又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。) 可理解为:输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。(如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。)如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。关键是: 阅读全文

posted @ 2014-03-12 18:53 程良 阅读(873) 评论(0) 推荐(0) 编辑

编写安全的代码——小心有符号数的右移操作

摘要: 在嵌入式开发当中,做数据运算(乘、除)等表达式时,移位操作是工程师们的最爱。但是也要非常谨慎,比如有符号数和无符号数、变量的取值范围。来看看这样一段小代码:#include #include static void divide_by_two(int num) { while (num){ printf("%d\n", num); num /= 2; } } int main(void) { int num; scanf("%d", &num); divide_by_two(num); return 0;... 阅读全文

posted @ 2014-03-12 18:30 程良 阅读(735) 评论(0) 推荐(0) 编辑

C语言实现类似C++的容器vector

摘要: C语言也能面向对象?不是C++是面向对象的么?其实C语言也能抽象成简单的面向对象方法,在Linux内核源码当中,底层的驱动代码、文件系统等皆采用了面向对象的封装技术,这样的好处是将客观的东西抽象出来,以接口的方式管理。 C++完全包容C语言的语法特点,C++中类:class和C语言中的结构体:struct是等效的,不过C++是一种完全面向对象的模式,其中域、对象名,都封装在类里面,而C语言没有明确规定,只是结构体是一种根据设计需要来构造的一种特殊的数据类型。C++中每个类都提供一个默认的构造函数和析构函数(当然也可以自定义一个构造函数)。下面是用纯C语言实现一个C++的vector容器:... 阅读全文

posted @ 2014-03-12 18:23 程良 阅读(15453) 评论(0) 推荐(0) 编辑

求字符串长度之递归与非递归的C语言实现

摘要: 在上一篇中介绍了字符串拷贝的递归与非递归的实现,这里就不在赘述递归原理。递归求字符串长度_strlen:1 int _strlen(const char *src)2 { 3 if( src == NULL || *src == '\0') 4 return 0;5 6 return (_strlen(++src)+1); 7 } 分析:统计字符串长度的时候,'\0'是不统计的,也就是说遇到'\0'函数就停止递归调用。return (_strlen(++src)+1); 这个语句意思就是*src不为'\0'长度就加上一个1,有多少 阅读全文

posted @ 2014-03-12 15:20 程良 阅读(2054) 评论(0) 推荐(0) 编辑

字符串拷贝函数递归与非递归的C语言实现

摘要: 初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出。既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句......。所以要使用递归,必须每一层的思路要相当清晰。而循环和递归还是挺类似的说,循环的次数可以近似的理解为要递归是次数。那么下面我们看看递归和循环的区别:1.递归实现strcpy函数:1 void _strcpy(char *to,const char *from)2 {3 if('\0' == *from){ 4 *to = '\0';5 return ;6 }7 阅读全文

posted @ 2014-03-12 14:23 程良 阅读(818) 评论(0) 推荐(0) 编辑

导航