当前位置:网站首页 > R语言数据分析 > 正文

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、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等等)也是类似的。

到此这篇ifstream和ofstream和fstream(ifstream fail)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • modbus报文解析RTU(modbus报文解析软件)2025-06-13 07:09:06
  • redhat证书难考吗(redhat证书好就业吗?)2025-06-13 07:09:06
  • lncrna是什么意思(lncrna-atb)2025-06-13 07:09:06
  • 启动docker守护进程(docker维护)2025-06-13 07:09:06
  • topcoder竞赛(topcoder排名)2025-06-13 07:09:06
  • prp离心后分层图(prp离心的转速是多少)2025-06-13 07:09:06
  • ldr指令(ldr指令是什么意思)2025-06-13 07:09:06
  • ewma模型(ewma模型和garch的区别)2025-06-13 07:09:06
  • caltrate怎么读(caltrate英语怎么读)2025-06-13 07:09:06
  • zipentry类 读取乱码(zipoutputstream 乱码)2025-06-13 07:09:06
  • 全屏图片