英語版
このページの英語版を見る

core.internal.array.utils

このモジュールには、ランタイムフックの実装を支援するユーティリティ関数が含まれている。
License:
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)
enum auto isNoThrow(alias F);
関数Fnothrow スコープで呼び出し可能かどうかをチェックする。
Parameters:
F パラメータを取らない関数
Returns:
その関数がnothrow スコープで呼び出し可能であるかどうか。
template isPostblitNoThrow(T)
T"型"のpostblitがnothrowで呼び出されるかどうかをチェックする。
Parameters:
T チェックする型
Returns:
postblitがnothrow のスコープで呼び出されるかどうかをチェックする。 存在しない場合はtrueを返す。
pure nothrow void __arrayClearPad()(ref BlkInfo info, size_t arrSize, size_t padSize);
GCによってゼロにされないかもしれないパディングをクリアする(GCは、それが最初から要求されたサイズ内にあると仮定するが、実際には割り当てられたサイズの末尾にある)。 パディングをクリアする。 ブロックの末尾にある)。
Parameters:
BlkInfo info 配列割り当てデータ
size_t arrSize 配列のサイズ(バイト
size_t padSize パディングのサイズ(バイト
@trusted BlkInfo __arrayAlloc(T)(size_t arrSize);
適切なパディングを適用し、既存のブロックから継承されていない場合はブロック属性を割り当てる。 ブロック属性を割り当てる。
Parameters:
size_t arrSize 割り当てられた配列のサイズ(バイト
Returns:
BlkInfo 割り当てメタデータを含む
pure nothrow void* __arrayStart()(return scope BlkInfo info);
与えられたブロックの配列の先頭を取得する。
Parameters:
BlkInfo info 配列のメタデータ
Returns:
配列の開始位置へのポインタ。
bool __setArrayAllocLength(T)(ref BlkInfo info, size_t newLength, bool isShared, size_t oldLength = ~0);
配列ブロックの確保された長さを設定する。 これは、配列 が追加されたり、その長さが設定されたりしたときに呼び出される。
ブロック < PAGESIZE の場合、確保されたブロックは以下のようになる: |elem0|elem1|elem2|...|elemN-1|emptyspace|N*elemsize|
最後に確保される長さのサイズはブロックサイズに依存する: 16〜256バイトのブロックは8ビット長である。 512からpagesize/2バイトのブロックは16ビット長である。
ブロック >= pagesizeの場合、長さはsize_tであり、ブロックの先頭にある。 ブロックの先頭にある。 なぜこのようにしなければならないかというと、ブロックはもっと多くのページに広がる可能性があるからだ。 そのため、ブロックの長さがブロックの末尾にある場合は信用できない。 というのも、ブロックはさらにページが伸びる可能性があるからだ。 もし将来 将来、ブロックが共有されていないことを証明できれば、これを変更できるかもしれない。 しかし、それが重要かどうかはわからない。
長さを先頭に置くためには、ブロックが正しく整列されるように16バイトのバッファスペースを用意しなければならない。 のバッファスペースを用意しなければならない。 x86では、ある種の x86では、ある種のSSE命令は、データが16バイトにアライメントされていなければ動作しない。 さらに さらに、次のブロックへの偶発的なポインタを防ぐために、センチネルバイトが必要である。 余分なオーバーヘッドが発生するため、これはページ・サイズ以上の場合にのみ行う。 ブロック・サイズに比べればオーバーヘッドは最小である。
つまり、これらのブロックでは次のようになる: N*elemsize|padding|elem0|elem1|...|elemN-1|emptyspace|sentinelbyte|``のようになる。
ここでelem0 、最初のバイトの16バイト後から始まる。