YSTest: ystdex::pmr::resource_pool类 参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

类 | Public 成员函数 | 静态 Public 成员函数 | 静态 Public 属性 | Private 类型 | 静态 Private 成员函数 | Private 属性 | 所有成员列表
ystdex::pmr::resource_pool类 参考

资源池。 更多...

`#include <memory_resource.h>`

类 ystdex::pmr::resource_pool 继承关系图:
[图例]
ystdex::pmr::resource_pool 的协作图:
[图例]

## 类

struct | block_meta_t
| 保存在块末尾的元数据类型。 更多...
class | chunk_t

## Public 成员函数

| resource_pool (memory_resource &, size_t, size_t, size_t=0, size_t=default_capacity)
| 构造：使用上级存储资源、块中最大区块数、区块大小、附加数据和起始区块容量。 更多...
| resource_pool (resource_pool &&)
| ~resource_pool () = yimpl(default)
resource_pool & | operator= (resource_pool &&)
void * | allocate ()
void | clear ()
| 清除指针并释放所有块。 更多...
void | deallocate (void *)
size_t | get_block_size () const
size_t | get_capacity () const
size_t | get_extra_data () const
void | set_capacity (size_t cap)
| 设置下一个分配块使用的区块容量。 更多...
memory_resource & | upstream () const

## 静态 Public 成员函数

static size_t | adjust_for_block (size_t bytes, size_t alignment)
| 调整分配空间大小以适应块。 更多...

## 静态 Public 属性

static const size_t | min_block_size = sizeof(block_meta_t) + 1
| 最小区块大小。 更多...
static const size_t | default_capacity = 4
| 块中的默认区块容量。 更多...

## Private 类型

using | id_t = size_t
| 块标识类型。 更多...
using | chunk_pr_t = std::pair< id_t, chunk_t >
| 块存储对类型。 更多...
using | chunks_t = list< chunk_pr_t, polymorphic_allocator< chunk_pr_t > >
| \build 块集合类型。 更多...
using | chunks_iter_t = chunks_t::iterator
| \build 块集合迭代器类型。 更多...

## 静态 Private 成员函数

static block_meta_t & | access_meta (void *p, size_t blk_size)

## Private 属性

size_t | max_blocks_per_chunk
| 块中最大区块数。 更多...
chunks_t | chunks
| 被池所有的块。 更多...
chunks_iter_t | i_stashed
| 快速待分配贮藏迭代器。 更多...
chunks_iter_t | i_empty
| 快速待分配空块迭代器。 更多...
size_t | next_capacity
| 下一可用的块中分配块的容量。 更多...
size_t | block_size
| 分配块大小。 更多...
size_t | extra_data
| 附加数据。 更多...

## 额外继承的成员函数

Private 成员函数 继承自 ystdex::bases::noncopyable
| noncopyable (const noncopyable &)=delete
| 禁止复制构造。 更多...
| noncopyable (noncopyable &&)=default
| 允许转移构造。 更多...
noncopyable & | operator= (const noncopyable &)=delete
| 禁止复制赋值。 更多...
noncopyable & | operator= (noncopyable &&)=default
| 允许转移赋值。 更多...
| noncopyable ()=default
| `protected` 构造：默认实现。 更多...
| ~noncopyable ()=default
| `protected` 析构：默认实现。 更多...

## 详细描述

资源池。

警告
  非虚析构。

在文件 memory_resource.h 第 479 行定义.

## 成员类型定义说明

## ◆ chunk_pr_t

using ystdex::pmr::resource_pool::chunk_pr_t = std::pair<id_t, chunk_t>

private

块存储对类型。

在文件 memory_resource.h 第 487 行定义.

## ◆ chunks_iter_t

using ystdex::pmr::resource_pool::chunks_iter_t = chunks_t::iterator

private

\build 块集合迭代器类型。

在文件 memory_resource.h 第 493 行定义.

## ◆ chunks_t

using ystdex::pmr::resource_pool::chunks_t = list<chunk_pr_t, polymorphic_allocator<chunk_pr_t> >

private

\build 块集合类型。

自从
  build 864

在文件 memory_resource.h 第 491 行定义.

## ◆ id_t

using ystdex::pmr::resource_pool::id_t = size_t

private

块标识类型。

在文件 memory_resource.h 第 485 行定义.

## 构造及析构函数说明

## ◆ resource_pool() [1/2]

ystdex::pmr::resource_pool::resource_pool | ( | memory_resource & | up_rsrc,
|  | size_t | mbpc,
|  | size_t | blk_size,
|  | size_t | extra = `0`,
|  | size_t | n_cap = `default_capacity`
| ) |  |

构造：使用上级存储资源、块中最大区块数、区块大小、附加数据和起始区块容量。

前置条件
  断言：区块大小不小于 `resource_pool::min_block_size` 。
  断言：区块大小不小于 `resource_pool::min_block_size` 。
  断言：起始区块容量大于 1 。

参见
  get_extra_data
  size_for_capacity

通过参数指定的上级存储资源和块属性构造块。 附加数据是可选的。使用以 2 为底的区块大小的对数可加速对数分布的池的查询过程。

在文件 memory_resource.cpp 第 525 行定义.

引用了 yconstraint.

## ◆ resource_pool() [2/2]

ystdex::pmr::resource_pool::resource_pool | ( | resource_pool && | pl | ) |

自从
  build 867

在文件 memory_resource.cpp 第 534 行定义.

引用了 ystdex::cpp2017::swap().

函数调用图:

## ◆ ~resource_pool()

ystdex::pmr::resource_pool::~resource_pool | ( |  | ) | = yimpl(default)

自从
  build 863

## 成员函数说明

## ◆ access_meta()

static block_meta_t& ystdex::pmr::resource_pool::access_meta | ( | void * | p,
|  | size_t | blk_size
| ) |  |

inlinestaticprivate

前置条件
  参数指向池中块的首字节。

在文件 memory_resource.h 第 568 行定义.

引用了 platform::p, yaligned, yalignof , 以及 yconstraint.

被这些函数引用 allocate() , 以及 ystdex::pmr::resource_pool::chunk_t::~chunk_t().

这是这个函数的调用关系图:

## ◆ adjust_for_block()

static size_t ystdex::pmr::resource_pool::adjust_for_block | ( | size_t | bytes,
|  | size_t | alignment
| ) |  |

inlinestatic

调整分配空间大小以适应块。

自从
  build 863

在文件 memory_resource.h 第 594 行定义.

引用了 alignment , 以及 ystdex::cpp2014::max().

函数调用图:

## ◆ allocate()

void * ystdex::pmr::resource_pool::allocate | ( |  | ) |

参见
  i_stashed

在文件 memory_resource.cpp 第 573 行定义.

引用了 access_meta(), ystdex::list< _type, _tAlloc >::begin(), block_size, chunks, ystdex::list< _type, _tAlloc >::emplace_front(), ystdex::list< _type, _tAlloc >::empty(), ystdex::list< _type, _tAlloc >::end(), i_empty, i_stashed, max_blocks_per_chunk, ystdex::cpp2014::min(), next_capacity, platform::p, upstream(), yassume, YB_UNLIKELY , 以及 ynothrow.

函数调用图:

## ◆ clear()

void ystdex::pmr::resource_pool::clear | ( |  | ) |

清除指针并释放所有块。

自从
  build 864

在文件 memory_resource.cpp 第 619 行定义.

引用了 chunks, ystdex::list< _type, _tAlloc >::clear(), default_capacity, ystdex::list< _type, _tAlloc >::end(), i_empty, i_stashed, next_capacity , 以及 yunseq.

函数调用图:

## ◆ deallocate()

void ystdex::pmr::resource_pool::deallocate | ( | void * | p | ) |

在文件 memory_resource.cpp 第 627 行定义.

引用了 platform::p, ystdex::cpp2017::swap(), YB_UNLIKELY , 以及 yverify.

函数调用图:

## ◆ get_block_size()

size_t ystdex::pmr::resource_pool::get_block_size | ( |  | ) | const

inline

自从
  build 845

在文件 memory_resource.h 第 611 行定义.

## ◆ get_capacity()

size_t ystdex::pmr::resource_pool::get_capacity | ( |  | ) | const

inline

自从
  build 887

在文件 memory_resource.h 第 618 行定义.

## ◆ get_extra_data()

size_t ystdex::pmr::resource_pool::get_extra_data | ( |  | ) | const

inline

在文件 memory_resource.h 第 624 行定义.

## ◆ operator=()

resource_pool & ystdex::pmr::resource_pool::operator= | ( | resource_pool && | pl | ) |

前置条件
  断言：分配器相等。

自从
  build 867

在文件 memory_resource.cpp 第 553 行定义.

引用了 ystdex::cpp2017::swap(), yconstraint , 以及 yunseq.

函数调用图:

## ◆ set_capacity()

void ystdex::pmr::resource_pool::set_capacity | ( | size_t | cap | ) |

inline

设置下一个分配块使用的区块容量。

前置条件
  断言：区块容量大于 1 。

自从
  build 887

在文件 memory_resource.h 第 635 行定义.

引用了 yconstraint.

## ◆ upstream()

memory_resource& ystdex::pmr::resource_pool::upstream | ( |  | ) | const

inline

自从
  build 863

在文件 memory_resource.h 第 643 行定义.

引用了 ystdex::list< _type, _tAlloc >::get_allocator(), platform::p , 以及 yassume.

被这些函数引用 allocate().

函数调用图:
这是这个函数的调用关系图:

## 类成员变量说明

## ◆ block_size

size_t ystdex::pmr::resource_pool::block_size

private

分配块大小。

不变性
  `block_size > 0` 。

在文件 memory_resource.h 第 522 行定义.

被这些函数引用 allocate().

## ◆ chunks

chunks_t ystdex::pmr::resource_pool::chunks

private

被池所有的块。

在文件 memory_resource.h 第 508 行定义.

被这些函数引用 allocate() , 以及 clear().

## ◆ default_capacity

const size_t ystdex::pmr::resource_pool::default_capacity = 4

static

块中的默认区块容量。

自从
  build 887

在文件 memory_resource.h 第 535 行定义.

被这些函数引用 clear().

## ◆ extra_data

size_t ystdex::pmr::resource_pool::extra_data

private

附加数据。

自从
  build 863

在文件 memory_resource.h 第 526 行定义.

## ◆ i_empty

chunks_iter_t ystdex::pmr::resource_pool::i_empty

private

快速待分配空块迭代器。

在文件 memory_resource.h 第 514 行定义.

被这些函数引用 allocate() , 以及 clear().

## ◆ i_stashed

chunks_iter_t ystdex::pmr::resource_pool::i_stashed

private

快速待分配贮藏迭代器。

自从
  build 864

在文件 memory_resource.h 第 512 行定义.

被这些函数引用 allocate() , 以及 clear().

## ◆ max_blocks_per_chunk

size_t ystdex::pmr::resource_pool::max_blocks_per_chunk

private

块中最大区块数。

自从
  build 863

在文件 memory_resource.h 第 506 行定义.

被这些函数引用 allocate().

## ◆ min_block_size

const size_t ystdex::pmr::resource_pool::min_block_size = sizeof(block_meta_t) + 1

static

最小区块大小。

在文件 memory_resource.h 第 530 行定义.

## ◆ next_capacity

size_t ystdex::pmr::resource_pool::next_capacity

private

下一可用的块中分配块的容量。

在文件 memory_resource.h 第 517 行定义.

被这些函数引用 allocate() , 以及 clear().

该类的文档由以下文件生成:

- memory_resource.h
- memory_resource.cpp