`
openxtiger
  • 浏览: 151221 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[APR源码解析]APR源码精髓

阅读更多

APR源码都是一些高人不断持续的开发,很多算法做得非常巧妙,现在把这些精髓慢慢记录,以便将来能用上。

1. 块内存索引

   APR 内存采取的则是“规则块”分配原则。支持的分配的最小空间是 8K,如果分配的空间达不到 8K 的大小,则按照 8K 去分配;如果需要的空间超过 8K,则将分配的空间往上调整为 4K 的倍数。这样内存就可以用索引来决定内存块的大小,索引和实际大小的转换关系为:index = (size >> BOUNDARY_INDEX) - 1;

2. 用二维指针记录上一个节点的next指针

   APR在制作链表结构时,并不是用一个指针分别指向下一个节点和上一个节点。而是采用二维指针变量记录上一个节点的next指针。因为链表插入或删除操作时只是改变next指针而已。

例如:

struct apr_memnode_t的apr_memnode_t **ref;

apr_pool_cleanup_kill函数中的 lastp = &c->next;

3. 所有和链表插入或获取时有关的,都是采用更换链表头节点

   APR对链表中的节点操作时,总是使用到头节点,这样操作时效率是最高的。所以很多链表操作时,最好能转换为这种模式。

例如:

allocator_free函数的freelist链表

  node->next = freelist;freelist = node; 这样node就成为 freelist的头节点了。

apr_pool_cleanup_register函数中p->free_cleanups链表

 

  c = p->free_cleanups;p->free_cleanups = c->next;  这样就从free_cleanups获取头节点

  c->next = p->cleanups;p->cleanups = c;   这样c就成为p->cleanups的头节点了

apr_pool_cleanup_kill函数的p->free_cleanups

  c->next = p->free_cleanups;p->free_cleanups = c;

 

这些例子很多.....

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    Tomcat源码解析.pdf

    ### Tomcat源码解析知识点概览 #### 一、Tomcat概述 - **定义**:Apache Tomcat是一款开源的Servlet容器,它实现了Servlet规范,并且提供了作为Web服务器的一些特性,但其提供的性能远不及专业的Web服务器,如...

    apache基本配置含有源码包安装需要apr,apr-util,httpd 安装包.zip

    1. 下载apr源码包:从官方网站或镜像站点下载最新版本的apr源码。 2. 解压源码:`tar -zxvf apr-x.x.x.tar.gz` 3. 进入源码目录:`cd apr-x.x.x` 4. 配置、编译和安装:`./configure && make && sudo make install` ...

    linux和windows:apr,apr-iconv和apr-util安装包

    3. 下载源码:访问Apache官网下载APR、APR-Iconv和APR-Util的最新源码包,如apr-1.5.x.tar.gz、apr-iconv-1.2.x.tar.gz和apr-util-1.6.x.tar.gz。 4. 解压源码:使用`tar -zxvf 文件名`解压下载的源码。 5. 配置、...

    linux:apr-util安装包 apr-util-1.5.2.tar.gz

    从Apache官方网站获取最新版本的APR源码包,如`apr-1.x.y.tar.gz`,然后按照以下步骤安装: 1. 解压源码包: ```bash tar xvf apr-1.x.y.tar.gz cd apr-1.x.y ``` 2. 配置、编译和安装: ```bash ./...

    apr-util-1.5.4.tar.gz

    它的扩展库apr-util则提供了更高级的服务,如数据库接口、加密、XML解析等功能。 在描述中,我们看到同样的文件名"apr-util-1.5.4.tar.gz",这通常意味着这是该软件版本的源代码包,用于开发者下载、编译和安装。...

    apr-1.7.0.zip

    apache-http源码编译 1、httpd-2.4.41.tar 2、apr-1.7.0.tar 报错: rm: cannot remove `libtoolT': No such file or directory 解决: configure中#$RM "$cfgfile" 3、apr-util-1.6.1.tar 报错: fatal error:...

    apache-tomcat-8.5.100-src Tomcat源码解析

    下面将对源码解析的关键知识点进行详细介绍。 首先,你需要了解的是Tomcat的架构。Tomcat由几个主要组件构成,包括Catalina(核心Servlet容器)、Coyote(HTTP/1.1协议处理器)、Jasper(JSP引擎)以及Apr(Apache ...

    apr库交叉环境搭建,编译,stomp 协议解析

    1. **下载源码包**:从官方网站下载适用于Windows的APR源码包(如apr-1.4.2)并解压。 2. **配置开发环境**:使用Visual Studio 2008作为IDE,配置好相应的开发环境。 3. **编译APR库**:找到解压后的`libapr`目录,...

    apr-util-1.3.9-win32-src.zip_APR-util_apr 1.3._apr-uti_apr.1.3.9

    《深入理解APR-util 1.3.9:在SecondLife中的应用与源码解析》 APR(Apache Portable Runtime)是Apache HTTP服务器项目的一部分,它提供了一个跨平台的、可移植的C语言库,用于处理低级别的I/O、线程、内存管理等...

    apr-1.4.6.tar.gz、apr-iconv-1.2.1.tar.gz、apr-util-1.4.1.tar.gz

    本文将详细解析标题和描述中提到的几个关键压缩包:`apr-1.4.6.tar.gz`、`apr-iconv-1.2.1.tar.gz` 和 `apr-util-1.4.1.tar.gz`,这些都是Apache安装的重要组成部分。 首先,`apr-1.4.6.tar.gz` 是APR库的主要版本...

    计算机网络编程APR地址解析协议实现

    计算机网络编程中的ARP(Address Resolution Protocol)地址解析协议是连接IP层与数据链路层的重要桥梁,它在TCP/IP协议栈中起着至关重要的作用。ARP协议的主要功能是通过已知的IP地址来获取对应的物理(MAC)地址,...

    apr-1.6.3.tar

    apr-1.6.3.tar,是Apache部署过程中用到的一个工具,是在linux上用的。

    基于java的开发源码-Tomcat 安装apr 支持 Tomcat Native.zip

    基于java的开发源码-Tomcat 安装apr 支持 Tomcat Native.zip 基于java的开发源码-Tomcat 安装apr 支持 Tomcat Native.zip 基于java的开发源码-Tomcat 安装apr 支持 Tomcat Native.zip 基于java的开发源码-Tomcat ...

    apr-1.6.5.tar.gz

    在描述中提到的场景,用户可能在准备安装Apache时,先下载了APR的源码包以便编译和安装。 安装APR的步骤通常包括以下几个阶段: 1. 解压:使用`tar -zxvf apr-1.6.5.tar.gz`命令解压缩文件,得到源代码目录。 2. ...

    apr安装包以及两个依赖包

    **apr-util**: 这是APR的扩展库,提供了更多的实用工具和功能,如数据库接口(如MySQL、ODBC)、加密支持、XML解析等。apr-util与apr紧密协作,共同为Apache提供强大的底层支持。安装过程类似apr,需要解压、配置、...

    apr-1.6.2.tar

    3. 编译源码:执行`make`命令来编译源代码。 4. 安装库:使用`sudo make install`将编译好的库安装到系统指定的位置。 5. 链接到项目:在项目中通过编译选项 `-I/path/to/apr/include` 指定头文件位置,`-L/path/to/...

    apr.rar_APR 服务器

    《Apache服务器核心源码解析——聚焦于APR》 Apache HTTP Server(简称Apache)是全球最广泛使用的Web服务器,其背后的稳定性和安全性得益于其强大的核心组件之一:Apache Portable Runtime(APR)。APR是一个跨...

    apr-1.6.3.tar.gz

    《Apache Portable Runtime (APR) 1.6.3 深度解析》 Apache Portable Runtime(APR)是Apache软件基金会的一个项目,它提供了一组底层系统接口库,使得跨平台开发Apache HTTP服务器和其他软件变得更为简单。APR的...

Global site tag (gtag.js) - Google Analytics