前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx中巧夺天工的数据结构

nginx中巧夺天工的数据结构

原创
作者头像
Stare
发布2022-02-22 20:26:32
4980
发布2022-02-22 20:26:32
举报
文章被收录于专栏:看一看大海

本篇文章的主题是想学习一下nginx中的精巧的数据结构定义。

ngx_str_t

带长度的字符串,其定义如下

代码语言:javascript
复制
typedef struct {
    size_t      len;
    u_char     *data;
} ngx_str_t;

其中,data指向字符串数据中的第一个字符,字符串的结束用长度表示,而不是由'\0'结束。

为什么nginx要这么做呢?

1、通过长度来表示字符串长度,可以减少strlen的调用次数。

2、nginx可以重复引用一段字符串内存,以长度表示引用到哪个位置。

这样就不用再拷贝出来一个新字符串,减少不必要的分配和拷贝。

试想一下,如果用平常的字符串,以'\0'结束,如果是想截取其中的一段使用怎么办呢?一般是拷贝一个出来,或者保存一个结尾的指针。拷贝一个出来浪费内存,保存一个结尾指针的做法和保存长度本质是一样的,还不如长度方便。

正因为这样的特性,所以在nginx中一般不建议使用glibc中的字符串操作接口,而是使用nginx自己封装的一套接口。

未完

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档