当前位置: 首页 > article >正文

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_regex_init 函数

声明

src/core/ngx_regex.h

void ngx_regex_init(void);

实现

src\core\ngx_regex.c

void
ngx_regex_init(void)
{
#if !(NGX_PCRE2)
    pcre_malloc = ngx_regex_malloc;
    pcre_free = ngx_regex_free;
#endif
}

./nginx-1.24.0/objs/ngx_auto_config.h:432:#define NGX_PCRE2  1

在 objs/ngx_auto_config.h 中

#ifndef NGX_PCRE2
#define NGX_PCRE2  1
#endif

 #if !(NGX_PCRE2)  这里取反

所以这个条件不成立

用 gcc -E 的方式进一步确认

gcc -E src/core/ngx_regex.c \
	-I src/core \
	-I src/event \
	-I src/event/modules \
	-I src/os/unix \
	-I objs \
	> ngx_regex_preprocessed.c

结果:

NGX_PCRE2 是一个宏定义,用于区分 Nginx 使用的正则表达式库是 PCRE (Perl Compatible Regular Expressions)还是 PCRE2 

如果 NGX_PCRE2 被定义,则表示 Nginx 使用的是 PCRE2

如果 NGX_PCRE2 定义了(即使用 PCRE2),则跳过该代码块

pcre_malloc = ngx_regex_malloc;
pcre_free = ngx_regex_free;
  • 这两行代码将 PCRE 的内存管理函数替换为 Nginx 自定义的函数。

  • 如果定义了 NGX_PCRE2(即使用 PCRE2),则跳过这两行代码,因为 PCRE2 的内存管理方式不同,不需要显式设置这些函数指针。


http://www.kler.cn/a/548600.html

相关文章:

  • mysql用户名怎么看
  • 股票数据接口API实例代码python、JAVA等多种语言演示免费获取实时数据、历史数据、CDMA、KDJ等指标数据配有API说明文档
  • PyQt6/PySide6 的 SQL 数据库操作(QtSql)
  • 1-6 gitee提交后绿点
  • Python 视频文本水印批量添加工具
  • 打破AI黑盒,拥抱开源力量:基于openGauss+DeepSeek的本地知识库,打造你的专属AI助手!
  • 清影2.0(AI视频生成)技术浅析(二):自然语言处理
  • 更加通用的Hexo多端部署原理及实现,适用于各种系统之间
  • 【机器学习】催收评分卡模型(Collection Scorecard)
  • springboot项目读取 resources 目录下的文件的9种方式
  • 【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.5 序列标注与命名实体识别】
  • DataWhale 组队学习 Ollama教程 task2 概念梳理
  • DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)
  • Visual Studio Code的键盘快捷键
  • 工作室如何实现一机一IP
  • 基于Go语言 XTA AI聊天界面实现
  • Node.js 中实现多任务下载的并发控制策略
  • 【计算机网络】TCP三次握手
  • CEF132 编译指南 Linux 篇 - 版本控制与脚本语言:Git 与 Python 配置(三)
  • SAP-ABAP:SAP中REPORT程序和online程序的区别对比