ifstream和ofstream和fstream(ifstream fail)

ifstream和ofstream和fstream(ifstream fail)Nginx 基础组件的使用 一 Nginx 的相关组件介绍 1 1 ngx palloc 相关源码 1 2 ngx array 组件的相关源码 1 3 ngx array 的数据结构 1 4 ngx cycle 简介和相关源码 1 5 ngx list 相关源码 1 6 ngx list 的数据结构 二 Nginx 组件的使用 2 1 makefile 的编写 2 2

大家好,我是讯享网,很高兴认识大家。



Nginx基础组件的使用

  • 一、Nginx 的相关组件介绍
  • 1.1、ngx_palloc相关源码
  • 1.2、ngx_array组件的相关源码
  • 1.3、ngx_array的数据结构
  • 1.4、ngx_cycle简介和相关源码
  • 1.5、ngx_list相关源码
  • 1.6、ngx_list 的数据结构
  • 二、Nginx 组件的使用
  • 2.1、makefile的编写
  • 2.2、ngx_palloc+ngx_array的使用
  • 2.3、ngx_palloc+ngx_list的使用
  • 总结

Nginx自己实现了一个内存池组件。Nginx作为服务器,当客户端 TCP连接 &HTTP请求 到来时,Nginx会为该连接创建一个专属的内存池;这个内存池的生命周期是连接建立时创建,连接断开时销毁。客户端和Nginx通信的所有数据和操作(HTTP协议解析、HTTP数据解析等)都在内存池中完成。

/src/core/ngx_palloc.h。(相关实现在/src/core/ngx_palloc.c文件)

/src/core/ngx_palloc.c

/src/core/ngx_core.h

/src/core/ngx_array.h

array在内存里的布局:

0 : size

1 : size

2 : size

… : size

nalloc -1 : size

ngx_array_t


讯享网

Nginx的每个进程内部都有一个自己的ngx_cycle。

/src/core/ngx_cycle.h

/src/core/ngx_list.h

list 在内存里的布局:

part

part

ngx_list_t

part

part

*elts

nelts

*next

*elts

nelts

*next

*elts

nelts

*next

*last

size

nalloc

*pool

*elts

nelts

*next

Nginx的内存池分成大小块,小块是要么不释放要么全部释放。ngx_create_pool(size_t size, ngx_log_t *log)里的size就是用来区分大小块的,大于size的就是大块,否则就是小块。

注意nginx的源码路径以及所需库的路径,要写正确的。

示例代码:

使用makefile来编译,执行结果:

可以看到:

  1. 代码中分配的内存池是1024,分配之后只有944可以用,有80字节被使用了。这80字节其实是被内存池的头占用了(ngx_pool_t)。
  2. 分配完一个32的数组后,内存池还剩余的内存为648,也就是32*8=256被分配给了数据。
  3. 数组内存分配好之后,使用数组元素已经不会再去申请内存池的内存。
  4. 如果数组元素用完了,还调用ngx_array_push会怎么样?从ngx_array.c的源码中可以发现,它会动态扩容数组,重新分配2*size。

示例代码:

使用makefile来编译,执行结果:

可以发现,ngx_list相比ngx_array少了(nginx stream 记录链接 断开原因_c语言)字节,从源码的ngx_list_create()函数可以发现,是因为多了一个ngx_list_t的头数据。

这里对ngx_string、ngx_array、ngx_list做了简单介绍和提供使用示例,其他的nginx基础组件的使用(比如dequeue、hash、log等等)也是类似的。

小讯
上一篇 2025-06-11 15:06
下一篇 2025-05-10 10:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/197125.html