Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_create_pool函數

ngx_create_pool

聲明在 src\core\ngx_palloc.h 中

ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);

實現在 src\core\ngx_palloc.c 中

ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{ngx_pool_t  *p;p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);if (p == NULL) {return NULL;}p->d.last = (u_char *) p + sizeof(ngx_pool_t);p->d.end = (u_char *) p + size;p->d.next = NULL;p->d.failed = 0;size = size - sizeof(ngx_pool_t);p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;p->current = p;p->chain = NULL;p->large = NULL;p->cleanup = NULL;p->log = log;return p;
}

函數簽名

ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)
  • 功能 :創建一個大小為 size 的內存池,并返回指向該內存池的指針。
  • 參數
    • size:指定內存池的總大小。
    • log:日志對象,用于記錄錯誤信息。
  • 返回值 :成功時返回指向內存池的指針,失敗時返回 NULL

定義局部變量
ngx_pool_t *p;
  • 定義一個指針變量 p,用于存儲新創建的內存池對象的地址。

分配內存
p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
if (p == NULL) {return NULL;
}

調用 ngx_memalign 函數分配一塊對齊的內存,大小為 size,對齊方式為 NGX_POOL_ALIGNMENT

如果分配失敗(返回 NULL),直接返回 NULL,表示內存池創建失敗。


ngx_memalign

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_memalign函數-CSDN博客


NGX_POOL_ALIGNMENT

定義在 src\core\ngx_palloc.h

#define NGX_POOL_ALIGNMENT       16

初始化內存池的 d 域?

p->d.last = (u_char *) p + sizeof(ngx_pool_t);
p->d.end = (u_char *) p + size;
p->d.next = NULL;
p->d.failed = 0;

  • p->d.last:指向當前內存池中可用內存的起始位置,初始值為 p 加上 sizeof(ngx_pool_t),即跳過內存池頭部結構體。
  • p->d.end:指向內存池的末尾,初始值為 p + size
  • p->d.next:指向下一個內存池塊,默認初始化為 NULL
  • p->d.failed:記錄分配失敗的次數,初始值為 0

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_pool_t 類型-CSDN博客

計算最大分配大小?

size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;

size 減去 sizeof(ngx_pool_t),得到實際可用于分配的內存大小。

p->max 設置為較小值:sizeNGX_MAX_ALLOC_FROM_POOL

p->max 表示從內存池中分配的最大塊大小。

如果請求的內存超過 p->max,則會使用大塊內存分配機制(見后續的 large 字段)。


?NGX_MAX_ALLOC_FROM_POOL

Ubuntu 下 nginx-1.24.0 源碼分析 - NGX_MAX_ALLOC_FROM_POOL-CSDN博客


初始化其他字段?

p->current = p;
p->chain = NULL;
p->large = NULL;
p->cleanup = NULL;
p->log = log;
  • p->current:指向當前正在使用的內存池塊,初始值為 p
  • p->chain:指向內存池鏈表,默認初始化為 NULL
  • p->large:指向大塊內存分配鏈表,默認初始化為 NULL
  • p->cleanup:指向清理回調函數鏈表,默認初始化為 NULL
  • p->log:保存日志對象,用于記錄錯誤信息。
返回內存池指針?
return p;
  • 返回指向新創建的內存池對象的指針。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71536.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ac的dhcp池里option43配錯導致ap無法上線問題排查過程

dhcp池里ac地址配錯&#xff0c;導致ap無法上線問題排查過程 問題&#xff1a;ap手動設置ac的ip正常注冊在線&#xff0c;但dhcp獲得ip和ac地址發現無法在ac上注冊成功。 組網&#xff1a; ac旁路結構&#xff0c;路由器lan口地址172.16.1.1&#xff0c;開dhcp服務&#xff0…

IntelliJ IDEA中Maven配置全指南

一、環境準備與基礎配置 1.1 Windows 環境下載并配置 Maven 見此篇博文&#xff1a;環境配置 1.2 IDEA配置步驟 打開設置面板&#xff1a;File → Settings → Build → Build Tools → Maven 關鍵配置項&#xff1a; Maven home path E:\apache-maven-3.9.9 &#xff08;…

存儲區域網絡(SAN)管理

存儲區域網絡&#xff08;Storage Area Network&#xff0c;SAN&#xff09;采用網狀通道&#xff08;Fibre Channel &#xff0c;簡稱FC&#xff09;技術&#xff0c;通過FC交換機連接存儲陣列和服務器主機&#xff0c;建立專用于數據存儲的區域網絡。SAN提供了一種與現有LAN連…

使用vue-office報錯TypeError: ft.createElementVNode is not a function

支持多種文件(.docx、.xlsx、.xls、.pdf、.pptx)預覽的vue組件庫&#xff0c;支持vue2/3。也支持非Vue框架的預覽。 不支持.doc、.ppt&#xff08;2003年及以前的版本&#xff09; 官網&#xff1a;https://www.npmjs.com/package/vue-office/excel?activeTabreadme 官方有實…

Ubuntu部署ktransformers

準備工作 一臺服務器 CPU&#xff1a;500G GPU&#xff1a;48G&#xff08;NVIDIA4090&#xff09; 系統&#xff1a;Ubuntu20.04&#xff08;github的文檔好像用的是22.04&#xff09; 第一步&#xff1a;下載權重文件 1.下載hfd wget https://hf-mirror.com/hfd/hfd.s…

C++初階——簡單實現vector

目錄 1、前言 2、Vector.h 3、Test.cpp 1、前言 簡單實現std::vector類模板。 相較于前面的string&#xff0c;vector要注意&#xff1a; 深拷貝&#xff0c;因為vector的元素可能是類類型&#xff0c;類類型元素可以通過賦值重載&#xff0c;自己實現深拷貝。 迭代器失效…

全志A133 android10 適配SLM770A 4G模塊

一&#xff0c;模塊基本信息 1.官方介紹 SLM770A是美格智能最新推出的一款LTE Cat.4無線通訊模組&#xff0c;最大支持下行速率150Mbps及上行速率50Mbps。同時向下兼容現有的3G和2G網絡&#xff0c;以確保即使在偏遠地區也可以進行網絡通信。 SLM770A模組支持分集接收和MIMO技…

微信小程序:多菜單欄設計效果

一、實現效果 二、代碼 wxml 編輯前端界面,步驟 菜單邏輯: 逐步取出數組中的項,首先取出頂部菜單項,然后選中后取出選中的底部數據(左側菜單+右側內容),然后點擊左側菜單取出選中的左側菜單對應的右側內容 ①這里我的數據是全部封裝到一個數組對象的,首先我的循環…

C++基礎知識學習記錄—string類

string實際上是C內置的一個類&#xff0c;內部對char *進行了封裝&#xff0c;不用擔心數組越界問題&#xff0c;string類中&#xff0c;除了上課講解的函數外&#xff0c;還有很多函數可以使用&#xff0c;可以自行查閱文檔。 構造函數原型&#xff1a; string(); //創建一個…

Ollama+DeepSeek+Open-WebUi

環境準備 Docker Ollama Open-WebUi Ollama 下載地址&#xff1a;Ollama docker安裝ollama docker run -d \ -v /data/ollama/data:/root/.ollama \ -p 11434:11434 \ --name ollama ollama/ollama 下載模型 Ollama模型倉庫 # 示例&#xff1a;安裝deepseek-r1:7b doc…

設計模式--訪問者模式【行為型模式】

設計模式的分類 我們都知道有 23 種設計模式&#xff0c;這 23 種設計模式可分為如下三類&#xff1a; 創建型模式&#xff08;5 種&#xff09;&#xff1a;單例模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式。結構型模式&#xff08;7 種&#xff09;&#xff1…

前端循環全解析:JS/ES/TS 循環寫法與實戰示例

循環是編程中控制流程的核心工具。本文將詳細介紹 JavaScript、ES6 及 TypeScript 中各種循環的寫法、特性&#xff0c;并通過實際示例幫助你掌握它們的正確使用姿勢。 目錄 傳統三劍客 for 循環 while 循環 do...while 循環 ES6 新特性 forEach for...of for...in 數組…

數據中心儲能蓄電池狀態監測管理系統 組成架構介紹

安科瑞劉鴻鵬 摘要 隨著數據中心對供電可靠性要求的提高&#xff0c;蓄電池儲能系統成為關鍵的后備電源。本文探討了蓄電池監測系統在數據中心儲能系統中的重要性&#xff0c;分析了ABAT系列蓄電池在線監測系統的功能、技術特點及其應用優勢。通過蓄電池監測系統的實施&#…

Mac端homebrew安裝配置

拷打了一下午o3-mini-high&#xff0c;不如這位博主的超強帖子&#xff0c;10分鐘結束戰斗 跟隨該文章即可&#xff0c;2025/2/19親測可行 mac 安裝HomeBrew(100%成功)_mac安裝homebrew-CSDN博客文章瀏覽閱讀10w次&#xff0c;點贊258次&#xff0c;收藏837次。一直覺得自己寫…

機器學習實戰(8):降維技術——主成分分析(PCA)

第8集&#xff1a;降維技術——主成分分析&#xff08;PCA&#xff09; 在機器學習中&#xff0c;降維&#xff08;Dimensionality Reduction&#xff09; 是一種重要的數據處理技術&#xff0c;用于減少特征維度、去除噪聲并提高模型效率。主成分分析&#xff08;Principal C…

windows環境下用docker搭建php開發環境dnmp

安裝WSL WSL即Linux子系統&#xff0c;比虛擬機占用資源少&#xff0c;安裝的前提是系統必須是win10以上。 WSL的安裝比較簡單&#xff0c;網上有很多教程&#xff0c;例如&#xff1a;WSL簡介與安裝流程&#xff08;Windows 下的 Linux 子系統&#xff09;_wsl安裝-CSDN博客&…

Python網絡爬蟲技術詳解文檔

Python網絡爬蟲技術詳解文檔 目錄 網絡爬蟲概述爬蟲核心技術解析常用Python爬蟲庫實戰案例演示反爬蟲機制與應對策略爬蟲法律與道德規范高級爬蟲技術資源推薦與學習路徑1. 網絡爬蟲概述 1.1 什么是網絡爬蟲 網絡爬蟲(Web Crawler)是一種按特定規則自動抓取互聯網信息的程序…

位運算,雙指針,二分,排序算法

文章目錄 位運算二進制中1的個數題解代碼我們需要0題解代碼 排序模版排序1題解代碼模版排序2題解代碼模版排序3題解代碼 雙指針最長連續不重復子序列題解代碼 二分查找題解代碼 位運算 1. bitset< 16 >將十進制數轉為16位的二進制數 int x 25; cout << bitset<…

一周學會Flask3 Python Web開發-redirect重定向

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 前面我們學過渲染到模板頁面&#xff0c;這個其實是一種內部的轉發&#xff0c;瀏覽器地址欄地址沒有變化。如果我們想重定向…

圖片粘貼上傳實現

圖片上傳 html demo 直接粘貼本地運行查看效果即可&#xff0c;有看不懂的直接喂給 deepseek 會解釋的很清晰 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…