- 博客(15)
- 资源 (5)
- 收藏
- 关注
原创 Linux C自定义内存泄露检测
最近在写个博客爬虫时用mtrace检测时总出现内存泄露,但有些地方的显示信息查看起来不方便,于是顺手写了个内存泄露检测的代码,比较简陋,只涵盖了malloc、free和strdup函数,本想着glibc已经向用户程序提供了malloc钩子,但钩子函数无法直接打印出调用函数及行号等信息,改用宏定义函数实现如下:int nmallocs = 0, nfrees = 0;#define debug
2015-01-23 17:01:50 751
原创 归并排序法求数组中的倒置数量
如果一对元素(A[i], A[j])是倒序的,即i A[j],则他们被称为一个倒置。设计o(nlogn)的算法来计算数组中的倒置数量。利用归并排序实现源码如下:#include #include using namespace std;void Merge(int *left, int leftSize, int *right, int rightSize, int *resul
2015-01-17 22:05:00 5031 1
原创 归并排序的非递归实现
书上归并排序大多都是采用分治的思想,结合递归方式实现,现采用非递归的方式实现,源码如下:#include #include using namespace std;void Merge(int *left, int *right, int *right_end){ int *left_end = right; int *result = left; int temp_size
2015-01-17 20:59:13 688
转载 epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unav
2015-01-17 13:54:42 700
转载 socket阻塞与非阻塞,同步与异步
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理
2015-01-16 21:26:39 748
转载 Linux 虚拟内存和物理内存
首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪
2015-01-13 21:25:30 739
转载 The C10K problem
《The C10K problem》是分析如果编写一个服务器程序来支持上万的客户端连接的。其关注的重点是io效率,目前大规模网络程序的关键瓶颈。作者认为需要权衡利弊的要点有以下:1.单线/进程处理多个I/O的做法: 其可选的方案有 a. 不这样做。 也就是对单线程使用阻塞同步的IO(意为依靠多线/进程来处理多个IO)。 b. 使用非阻塞IO。 即以非阻塞方式启动IO,并
2015-01-13 10:33:38 755
原创 字典树(Trie tree)
Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含
2015-01-12 20:24:13 659
转载 跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前
2015-01-12 16:26:45 681
转载 C语言正则表达式
标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),一般分为三个步骤,如下所示:
2015-01-11 22:24:53 820
转载 糊涂窗口综合症
什么是糊涂窗口综合症当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症发送端引起的糊涂窗口综合症如果发送端为产生数据很慢的应用程序服务(典型的有telnet应
2015-01-07 21:24:21 655
转载 带外数据OOB与紧急模式URG
传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道.linux系统的套接字机制支持低层协议发送和接受带外数据.但是TCP协议没有真正意义上的带外数据.为了发送重要协议,TCP提供了一种称为紧急模式(urgent mode
2015-01-06 20:26:31 895
转载 static_cast, dynamic_cast, const_cast探讨
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。
2015-01-04 12:30:18 576
原创 placement new之返回值
#include #include using namespace std;class A { public: A(int arg = 5) { cout<<"call A constructor"<<endl; a = arg; } ~A() { cout<<"call A de
2015-01-03 20:28:03 883
VIM配置文件
2015-07-05
putty_V0.63.0.0.43510830
2015-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人