英語版
このページの英語版を見る
std.experimental.allocator.building_blocks.stats_collector
アロケータは、グローバルおよび呼び出し点ごとのアロケーションに関する有用な統計情報を収集する。
アロケータである。収集される統計は、 の組み合わせを適切に選択することで、静的に設定することができる。
Options の組み合わせを適切に選ぶことで、静的に設定することができる。
Examples:
import std.experimental.allocator.gc_allocator : GCAllocator; import std.experimental.allocator.building_blocks.free_list : FreeList; alias Allocator = StatsCollector!(GCAllocator, Options.bytesUsed);
- enum
Options
: ulong; - StatsCollector のオプションは以下に定義されている。それぞれ、コンパイル時に を有効にする。
numOwns
- owns への呼び出し回数をカウントする。
numAllocate
- allocate への呼び出し回数をカウントする。すべての呼び出しがカウントされる、 ゼロバイト要求や失敗した要求を含む。
numAllocateOK
- 成功した、つまり、リクエストと同じ大きさのブロックを返したallocate への呼の数をカウントする。 成功した、つまりリクエストと同じ大きさのブロックを返した。(注: ゼロバイトのリクエストは成功としてカウントされる)。 を成功としてカウントする)。
numExpand
- 引数や結果に関係なく、expand 。 の呼び出し回数をカウントする。
numExpandOK
- 展開に成功したexpand の呼び出し回数をカウントする。 展開に成功した。
numReallocate
- 引数や結果に関係なく、reallocate への呼び出し回数をカウントする。 をカウントする。
numReallocateOK
- 成功したreallocate の呼び出し回数をカウントする。 (0バイトへの再割り当ては成功としてカウントされる)。
numReallocateInPlace
- インプレース再割り当て(メモリは移動しない)になったreallocate 。 (メモリは移動していない)。この数値が再割り当ての総数に近い場合 この数値が再割り当ての総数に近い場合、アロケータが現在のブロックの末尾に大きな空きを見つけたことを示す。 アロケータが現在のブロックの端に空きを見つけるケースが多いことを示す。 の典型的なアロケーション・サイズに比べ、アロケーション単位が大きい。 アプリケーションの典型的なアロケーションサイズに比べて大きい)。
numDeallocate
- deallocate への呼び出し回数をカウントする。
numDeallocateAll
- deallocateAll への呼び出し回数をカウントする。
numAlignedAllocate
- alignedAllocate への呼数をカウントする。すべての呼がカウントされる、 ゼロバイトのリクエストや失敗したリクエストも含む。
numAlignedAllocateOk
- 成功した、つまりリクエストと同じ大きさのブロックを返した、alignedAllocate への呼の数をカウントする。 成功した、つまりリクエストと同じ大きさのブロックを返した。(注: ゼロバイトのリクエストは成功としてカウントされる)。 を成功としてカウントする)。
numAll
- すべてのnumXxx フラグを選択する。
bytesUsed
- このアロケータが現在割り当てているバイト数を追跡する。この数は、メモリが割り当てられ メモリが割り当てられたり解放されたりすると、この数値は上下する。 である。
bytesAllocated
- allocate 、および によって割り当てられた累計バイト数を追跡する、 expand およびreallocate (拡張をもたらすとき)によって割り当てられたバイト数の合計を追跡する。この この数値は常に増加し、割り当てのトラフィックを示す。累積割り当て解除バイト数を計算するには からbytesUsed を引く。
bytesAllocated
. bytesExpanded
- 成功した(returndelta )。 expand(b, delta) 成功した(returntrue)。
bytesContracted
- 成功した形式の呼び出しにおいて、すべてのb.length - s とb.length > s の合計を追跡する。 realloc(b, s) を含むすべてのtrue の合計を追跡する( を返す)。コールごとの で割り当て解除されたバイト数も明確にカウントする。 deallocate.
bytesMoved
- realloc で割り当て解除されたバイト数も明確にカウントする。 を呼び出した結果移動した全バイトの合計を追跡する。この数値が大きい場合( bytesAllocated に対して)、アプリケーションはより大きな事前割り当てを使用する必要があることを示す。 を使用する必要があることを示す。
bytesNotMoved
- への呼び出しの結果として移動しなかった全バイトの合計を追跡する。realloc を呼び出した結果、移動しなかったバイトの合計を追跡する。数値が大きい( bytesAllocated と比較して)場合、アプリケーションは拡張を多用し、移動量を節約していることを示す。 が移動量をかなり節約していることを示す。しかし、この数値が比較的小さく、 しかし、この数値が比較的小さく、bytesSlack が高い場合は、アプリケーショ ンがほとんど利益を得ずにオーバーオールしていることを意味する。 オーバーオールしていることを意味する。
bytesSlack
- 要求されたバイト数以上に割り当てられた余分なバイト数の合計を測定する。 すなわち、内部フラグメンテーションである。これは現在の 有効なスラックバイト数であり、時間とともに増減する。
bytesHighTide
- 時間をかけて割り当てられた最大バイト数を測定する。これは アロケータの寸法を決めるのに便利である。
bytesAll
- byteXxx すべてのフラグを選択する。
all
- 上記のすべてのフラグを組み合わせる。
- struct
StatsCollector
(Allocator, ulong flags = Options.all, ulong perCallFlags = 0); - アロケーションに関する追加データを収集するアロケータ。アロケータは、アロケーションに関する追加データを収集する。 各情報はサイズと時間のオーバヘッドを追加するので、統計はコンパイル時 で個別に有効にも無効にもできる。 またはコンパイル時に無効にすることができるflags 。numXxx 形式の統計はすべて、発生したイベントのカウントを記録する。 関数の呼び出しや特定の結果など、発生したイベントのカウントを記録する。形式の統計はbytesXxx 形式の統計は、累積サイズを収集する。 さらに、callerSize 、callerModule 、callerFile 、callerLine 、callerTime というデータが、それぞれの特定の割り当てに関連付けられている。 このデータは各アロケーションの接頭辞となる。Examples:
import std.experimental.allocator.building_blocks.free_list : FreeList; import std.experimental.allocator.gc_allocator : GCAllocator; alias Allocator = StatsCollector!(GCAllocator, Options.all, Options.all); Allocator alloc; auto b = alloc.allocate(10); alloc.reallocate(b, 20); alloc.deallocate(b); import std.file : deleteme, remove; import std.range : walkLength; import std.stdio : File; auto f = deleteme ~ "-dlang.std.experimental.allocator.stats_collector.txt"; scope(exit) remove(f); Allocator.reportPerCallStatistics(File(f, "w")); alloc.reportStatistics(File(f, "a")); writeln(File(f).byLine.walkLength); // 24
- Allocator
parent
; - 親アロケータは、そのアロケータが状態を保持していれば直接のメンバとして、そうでなければ。 Allocator.instance のエイリアスとしてアクセスできる。親アロケータは を使うことができる。
- alias
alignment
= Allocator.alignment
; - 提供されるアラインメントは Allocator.
alignment
. - Ternary
owns
(void[]b
); - numOwns (インスタンスごと、呼ごと)をインクリメントし、 parent.owns(b) に転送する。
- void[]
allocate
(size_tn
); - に転送する。 parent.
allocate
.インスタンスごとに影響する:numAllocate, bytesUsed bytesAllocated ,bytesSlack,numAllocateOK 、 およびbytesHighTide 。呼び出しごとの影響:numAllocate numAllocateOK 、およびbytesAllocated 。 - void[]
alignedAllocate
(size_tn
, uinta
); - 転送先 parent.
alignedAllocate
.インスタンスごとの影響:numAlignedAllocate, bytesUsed bytesAllocated ,bytesSlack,numAlignedAllocateOk 、 およびbytesHighTide 。呼び出しごとの影響:numAlignedAllocate numAlignedAllocateOk 、 およびbytesAllocated に影響する。 - bool
expand
(ref void[]b
, size_tdelta
); - が定義されているかどうかにかかわらず定義される。 Allocator.
expand
が定義されているかどうかに関わらず定義される。影響 インスタンスに影響する:numExpandインスタンスごとに影響する: ,numExpandOK,bytesExpanded 、 bytesSlack bytesAllocated 、およびbytesUsed 。コールごとに影響を与える: numExpand numExpandOK ,bytesExpanded, および bytesAllocated. - bool
reallocate
(ref void[]b
, size_ts
); - が定義されているかどうかにかかわらず定義される。 Allocator.
reallocate
が定義されているかどうかに関わらず定義される。影響 インスタンスに影響する:numReallocate numReallocateOK, numReallocateInPlace,bytesNotMoved,bytesAllocated, bytesSlack,bytesExpanded, およびbytesContracted 。呼び出しごとに影響する: numReallocate numReallocateOK ,numReallocateInPlace 、 bytesNotMoved bytesExpanded ,bytesContracted, および bytesMoved. - bool
deallocate
(void[]b
); - が定義されているかどうかにかかわらず定義される。 Allocator.
deallocate
が定義されているかどうかに関わらず定義される。影響 インスタンスに影響する:numDeallocate bytesUsed およびbytesSlack 。 呼ごとに影響する:numDeallocate およびbytesContracted 。 - bool
deallocateAll
(); - が定義されている場合にのみ定義される。 Allocator.
deallocateAll
が定義されている場合のみ定義される。インスタンスごとおよびコールごとに インスタンスごとおよびコールごとにnumDeallocateAll 。 - pure nothrow @nogc @safe Ternary
empty
(); - Options.bytesUsed が定義されている場合のみ定義される。bytesUsed == 0 を返す。
- void
reportStatistics
(R)(auto ref Routput
); - インスタンスごとの統計を
output
に報告する(例:stdout)。書式は単純である。 書式は単純で、1行に1種類と値、コロンで区切る。 bytesAllocated:7395404 - struct
PerCallStatistics
; - perCallFlags がゼロでない場合に定義される。
- string
file
;
uintline
; - 呼び出しのファイルと行。
- Options[]
opts
; - 収集した統計に対応するオプション。
- ulong[]
values
; - 統計の値。opts と同じ長さである。
- const string
toString
(); - のような文字列にフォーマットする: mymodule.d(655): [numAllocate:21, numAllocateOK:21, bytesAllocated:324202].
- static auto
byFileLine
(); - perCallFlags がゼロでない場合に定義される。監視されているすべての ファイル/行インスタンスを反復する。繰り返しの順序は意味がない(最初の呼び出しでアイテムはリストの先頭に挿入される)。 項目は最初の呼び出し時にリストの先頭に挿入される)。 収集後に統計情報を前処理することが適切かもしれない。
- void
reportPerCallStatistics
(R)(auto ref Routput
); - perCallFlags がゼロでない場合に定義される。出力(例えば、File )。 収集された呼ごとの統計情報の単純なレポート。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku