
Apache 源代码研究
andylin02
这个作者很懒,什么都没留下…
展开
-
Apache内存池内幕(3)
Apache内存池内幕(3) 2.3.3分配子内存分配使用分配子分配内存是最终的目的。Apache对外提供的使用分配子分配内存的函数是apr_allocator_alloc,然而实际在内部,该接口函数调用的则是allocator_alloc。allocator_alloc函数原型声明如下:apr_memnode_t *allocator_alloc(apr_allocator_转载 2007-03-19 17:48:00 · 755 阅读 · 0 评论 -
Apache内存池内幕(1)
Apache内存池内幕(1) 对于APR中的所有的对象中,内存池对象应该是其余对象内存分配的基础,不仅是APR中的对象,而且对于整个Apache中的大部分对象的内存都是从内存池中进行分配的,因此我们将把内存池作为整个APR的基础。2.1 内存池概述在C语言中,内存管理的问题臭名昭著,一直是开发人员最头疼的问题。对于小型程序而言,少许的内存问题,比如内存泄露可能还能忍受,但是对于转载 2007-03-19 17:46:00 · 782 阅读 · 0 评论 -
Apache内存池内幕(6)
Apache内存池内幕(6) 2.4.4内存池的内存分配 从内存池中分配内存通过两个函数实现:apr_pcalloc和apr_palloc,这两个函数唯一的区别就是apr_pcalloc分配后的内存全部自动清零,而apr_palloc则省去了这一步的工作。apr_palloc的函数原型如下所示:APR_DECLARE (void *) apr_palloc (apr_po转载 2007-03-19 17:51:00 · 661 阅读 · 0 评论 -
环型链表概述
5.1环型链表概述 Apache中很多地方都使用到了环形链表的数据结构,比如存储段组中就是使用环形链表保存所有的存储段数据。为了能够简化对该环形链表的操作,Apache中定义了一系列的宏来方便对链表的操作。因此在继续分析存储段之间的关系之前,我们首先来看一下Apache中环形结构的实现。Apache中环形结构的实现采用了大量的宏,其实现参考了4.4FreeBSD中队列和Dea转载 2007-03-19 17:55:00 · 745 阅读 · 0 评论 -
apache中的文件与目录(2)
4.4 打开文件文件打开应该是使用的最多的文件操作了,任何文件在使用之前都必须首先打开。ANSI C标准库和Unix系统库函数都提供对“打开文件”这个操作语义的支持。他们提供的接口很相似,参数一般都为“文件名+打开标志位+权限标志位”,Apache中提供了apr_file_open函数来支持文件打开操作,该函数只是在原有的标准库的基础上进行了少许的封装。apr_file_open无法忽略习惯的转载 2007-03-19 17:58:00 · 597 阅读 · 0 评论 -
Apache内存池内幕(7)
Apache内存池内幕(7) 2.4.5内存池的销毁由于Apache中所有的内存都来自内存池,因此当内存池被销毁的时候,所有从内存池中分配的空间都将受到直接的影响——被释放。但是不同的数据类型可能导致不同的释放结果,目前Apache中支持三种不同的数据类型的释放:1)、普通的字符串数据类型这类数据类型是最简单的数据类型,对其释放可以直接调用free而不需要进行任何的多余的操作转载 2007-03-19 17:52:00 · 670 阅读 · 1 评论 -
Apache内存池内幕(5)
Apache内存池内幕(5) 2.4.3内存池的创建勿庸置疑,内存池的创建是内存池的核心操作之一。内存池创建函数的原型如下所示:APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, apr_pool_t *par转载 2007-03-19 17:50:00 · 700 阅读 · 0 评论 -
Apache内存池内幕(4)
Apache内存池内幕(4) 2.4 内存池2.4.1内存池概述在了解了内存分配子的概念之后,我们其实已经了解了Apache中内存分配的细节了。不过Apache中内存的层次结构关系则是由内存池负责组织,其数据结构apr_pool_t定义在apr_pools.c中,定义如下:struct apr_pool_t { apr_pool_t *parent转载 2007-03-19 17:49:00 · 733 阅读 · 0 评论 -
Apache数组分析
3.1数组3.1.1数组概述 数组是Apache中最经常也是最普通的数据结构,尽管C语言中已经提供了一定的数组功能,但是C语言数组运用到Apache中还存在下面的一些问题: (1)、C语言中的数组在定义的时候就必须确定维数目,一旦确定,其长度就不可更改。但是Apache中很多情况并不知道数组中能够保存的最大数目,如果预定义的太大,可能会浪费过多的空间;定义的转载 2007-03-19 17:54:00 · 1469 阅读 · 0 评论 -
Apache中的文件与目录(1)
Apache中的文件与目录(1) 4.1 文件概述文件I/O在Unix下占据着非常重要的地位,曾有一句经典语句绝对可以说明file在Unix下的重要性, "In UNIX, everything is a file",APR就是本着这个思想对Unix文件I/O进行了再一次的抽象封装,以提供更为强大和友善的文件I/O接口。APR File I/O源代码的位置在$(APR_HOME)/转载 2007-03-19 17:56:00 · 558 阅读 · 0 评论 -
Apache中的挂钩剖析(1)
5.5 挂钩(HOOK)5.5.1 为什么引入挂钩在Apache1.3版本中,对HTTP请求的处理包括若干个固定阶段,比如地址转换阶段、身份确认阶段、身份认证阶段、权限确认阶段、MIME类型识别阶段等等,这也意味着Apache1.3中的挂钩数目是有限的,固定的。这个反映在模块结构中就是针对每个HOOK都对应一个函数指针。比如如果需要检查用户的身份是否合法则只需要调用ap_check_use转载 2007-03-19 17:58:00 · 626 阅读 · 0 评论 -
Apache内存池内幕(2)
Apache内存池内幕(2) 2.3 内存池分配子allocator2.3.1分配子概述尽管我们可以通过malloc函数直接分配apr_memnode_t类型的结点,不过Apache中并不推荐这种做法。事实上Apache中的大部分的内存的分配都是由内存分配子allocator完成的。它隐藏了内部的实际的分配细节,对外提供了几个简单的接口供内存池函数调用。内存分配子属于内部数据结构转载 2007-03-19 17:47:00 · 910 阅读 · 0 评论