本篇文章的主题是想学习一下nginx中的精巧的数据结构定义。
ngx_str_t
带长度的字符串,其定义如下
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 删除。