ホームページ >バックエンド開発 >PHPチュートリアル >nginxソースコード学習メモ(11) - 基本コンテナ - ngx_list

nginxソースコード学習メモ(11) - 基本コンテナ - ngx_list

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-29 09:10:55793ブラウズ

ngx_list.{c|h} 構造は非常に単純です。前の配列の概要を読んでいる場合は、このセクションをスキップしてください:

[cpp] ビュー 普通のコピープリント?

  1. typedefstruct ngx_list_part_s ngx_list_part_s {
  2. ngx_uint_t s; //実際のデータ数
  3. ngx_list_part_t *next; /次のデータ ポインター
  4. };
  5. typedef
  6. struct {
  7. ngx_list_part_t *last; ngx_list_part_t パート
  8. //データ部分
  9. ngx_uint_t nalloc; //デフォルトのデータ数
  10. ngx_pool_t *pool;
  11. } ngx_list_t ;
  12. リスト操作: [cpp]ビュー 普通のコピープリント?
    1. //リストを作成します
    2. ngx_list_t *
    3. ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
    4. {
    5. ngx_list_t *リスト;
    6. list = ngx_palloc(pool, sizeof(ngx_list_t)); //リストのメモリ空間を割り当てる
    7. if (list == NULL) {
    8. return NULL;
    9. }
    10. list->part.elts = ngx_palloc(pool, n * size) //リストデータ用にメモリスペースを割り当てます
    11. if (list->part.elts == NULL) {
    12. list->part.nelts = 0; 実際のデータ数は 0 です
    13. list-&g t ;part.next = NULL; list->last = &list->part; /最後のものはデータそのものです
    14. list->size = size; ; データ量
    15. list->pool = pool; return list; // ここで配列の作成を開始したことを意味します。
    16. }
    17. //データの追加 基本的に配列の追加と同じであることがわかりますが、追加するデータのアドレスを返し、操作を実行します
    18. void *
    19. ngx_list_push( ngx_list_t * l)
    20. {
    21. void last = l->last;
    22. if
    23. (last->nelts) == l->nalloc) {
    24. last = ngx_palloc(l->poolのサイズ(ngx_list_パート_t));
    25. elts = ngx_palloc (l-> l-> nalloc * l-> ->nelts;
    26. last->nelts++ return elt; 普通のコピープリント?
    27. //リストの走査方法part = &list.part
    28. data = part->elts; のための
    29. ( i = 0 ;; i++) {
    30. if (i >= 部分->nelts) {
    31. if (部分->次 == NULL ) {
    32. break
    33. ;
    34. }
    35. パート = パート->次へ
    36. データ = パート-> elts;
    37. i = 0 ;
    38. }
    39. ... データ[i]...
    40. 上記は、nginx ソースコード学習メモ (11) - 基本コンテナ - ngx_list を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人の役に立てば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。