diff options
| author | Gareth Rees | 2013-05-11 20:07:28 +0100 |
|---|---|---|
| committer | Gareth Rees | 2013-05-11 20:07:28 +0100 |
| commit | eaad4493d48f015c98331b92ff73434e100bcf09 (patch) | |
| tree | d31caa2abbe84c9151069510bd2ed01ab4a536b7 | |
| parent | e03ccc98ac3a29acd2856ba8f6022b23b0131665 (diff) | |
| download | emacs-eaad4493d48f015c98331b92ff73434e100bcf09.tar.gz emacs-eaad4493d48f015c98331b92ff73434e100bcf09.zip | |
Bring html up to date.
Copied from Perforce
Change: 181731
ServerID: perforce.ravenbrook.com
78 files changed, 2796 insertions, 2258 deletions
diff --git a/mps/manual/html/_downloads/scheme-advanced.c b/mps/manual/html/_downloads/scheme-advanced.c index 7e6754be1d0..2c86aade2dd 100644 --- a/mps/manual/html/_downloads/scheme-advanced.c +++ b/mps/manual/html/_downloads/scheme-advanced.c | |||
| @@ -4470,9 +4470,9 @@ int main(int argc, char *argv[]) | |||
| 4470 | 4470 | ||
| 4471 | /* Create an MPS arena. There is usually only one of these in a process. | 4471 | /* Create an MPS arena. There is usually only one of these in a process. |
| 4472 | It holds all the MPS "global" state and is where everything happens. */ | 4472 | It holds all the MPS "global" state and is where everything happens. */ |
| 4473 | res = mps_arena_create(&arena, | 4473 | res = mps_arena_create_k(&arena, mps_arena_class_vm(), |
| 4474 | mps_arena_class_vm(), | 4474 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = 32 * 1024 * 1024}, |
| 4475 | (size_t)(32ul * 1024 * 1024)); | 4475 | {MPS_KEY_ARGS_END}}); |
| 4476 | if (res != MPS_RES_OK) error("Couldn't create arena"); | 4476 | if (res != MPS_RES_OK) error("Couldn't create arena"); |
| 4477 | 4477 | ||
| 4478 | /* Create the object format. */ | 4478 | /* Create the object format. */ |
| @@ -4488,31 +4488,29 @@ int main(int argc, char *argv[]) | |||
| 4488 | 4488 | ||
| 4489 | /* Create an Automatic Mostly-Copying (AMC) pool to manage the Scheme | 4489 | /* Create an Automatic Mostly-Copying (AMC) pool to manage the Scheme |
| 4490 | objects. This is a kind of copying garbage collector. */ | 4490 | objects. This is a kind of copying garbage collector. */ |
| 4491 | res = mps_pool_create(&obj_pool, | 4491 | res = mps_pool_create_k(&obj_pool, arena, mps_class_amc(), |
| 4492 | arena, | 4492 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = obj_chain}, |
| 4493 | mps_class_amc(), | 4493 | {MPS_KEY_FORMAT, .val.format = obj_fmt}, |
| 4494 | obj_fmt, | 4494 | {MPS_KEY_ARGS_END}}); |
| 4495 | obj_chain); | ||
| 4496 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); | 4495 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); |
| 4497 | 4496 | ||
| 4498 | /* Create an allocation point for fast in-line allocation of objects | 4497 | /* Create an allocation point for fast in-line allocation of objects |
| 4499 | from the `obj_pool`. You'd usually want one of these per thread | 4498 | from the `obj_pool`. You'd usually want one of these per thread |
| 4500 | for your primary pools. This interpreter is single threaded, though, | 4499 | for your primary pools. This interpreter is single threaded, though, |
| 4501 | so we just have it in a global. See topic/allocation. */ | 4500 | so we just have it in a global. See topic/allocation. */ |
| 4502 | res = mps_ap_create(&obj_ap, obj_pool); | 4501 | res = mps_ap_create_k(&obj_ap, obj_pool, mps_args_none); |
| 4503 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); | 4502 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); |
| 4504 | 4503 | ||
| 4505 | /* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to | 4504 | /* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to |
| 4506 | manage the leaf objects. */ | 4505 | manage the leaf objects. */ |
| 4507 | res = mps_pool_create(&leaf_pool, | 4506 | res = mps_pool_create_k(&leaf_pool, arena, mps_class_amcz(), |
| 4508 | arena, | 4507 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = obj_chain}, |
| 4509 | mps_class_amcz(), | 4508 | {MPS_KEY_FORMAT, .val.format = obj_fmt}, |
| 4510 | obj_fmt, | 4509 | {MPS_KEY_ARGS_END}}); |
| 4511 | obj_chain); | ||
| 4512 | if (res != MPS_RES_OK) error("Couldn't create leaf pool"); | 4510 | if (res != MPS_RES_OK) error("Couldn't create leaf pool"); |
| 4513 | 4511 | ||
| 4514 | /* Create allocation point for leaf objects. */ | 4512 | /* Create allocation point for leaf objects. */ |
| 4515 | res = mps_ap_create(&leaf_ap, leaf_pool); | 4513 | res = mps_ap_create_k(&leaf_ap, leaf_pool, mps_args_none); |
| 4516 | if (res != MPS_RES_OK) error("Couldn't create leaf objects allocation point"); | 4514 | if (res != MPS_RES_OK) error("Couldn't create leaf objects allocation point"); |
| 4517 | 4515 | ||
| 4518 | /* Create the buckets format. */ | 4516 | /* Create the buckets format. */ |
| @@ -4521,17 +4519,21 @@ int main(int argc, char *argv[]) | |||
| 4521 | 4519 | ||
| 4522 | /* Create an Automatic Weak Linked (AWL) pool to manage the hash table | 4520 | /* Create an Automatic Weak Linked (AWL) pool to manage the hash table |
| 4523 | buckets. */ | 4521 | buckets. */ |
| 4524 | res = mps_pool_create(&buckets_pool, | 4522 | res = mps_pool_create_k(&buckets_pool, arena, mps_class_awl(), |
| 4525 | arena, | 4523 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = buckets_fmt}, |
| 4526 | mps_class_awl(), | 4524 | {MPS_KEY_AWL_FIND_DEPENDENT, |
| 4527 | buckets_fmt, | 4525 | .val.addr_method = buckets_find_dependent}, |
| 4528 | buckets_find_dependent); | 4526 | {MPS_KEY_ARGS_END}}); |
| 4529 | if (res != MPS_RES_OK) error("Couldn't create buckets pool"); | 4527 | if (res != MPS_RES_OK) error("Couldn't create buckets pool"); |
| 4530 | 4528 | ||
| 4531 | /* Create allocation points for weak and strong buckets. */ | 4529 | /* Create allocation points for weak and strong buckets. */ |
| 4532 | res = mps_ap_create(&strong_buckets_ap, buckets_pool, mps_rank_exact()); | 4530 | res = mps_ap_create_k(&strong_buckets_ap, buckets_pool, |
| 4531 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_exact()}, | ||
| 4532 | {MPS_KEY_ARGS_END}}); | ||
| 4533 | if (res != MPS_RES_OK) error("Couldn't create strong buckets allocation point"); | 4533 | if (res != MPS_RES_OK) error("Couldn't create strong buckets allocation point"); |
| 4534 | res = mps_ap_create(&weak_buckets_ap, buckets_pool, mps_rank_weak()); | 4534 | res = mps_ap_create_k(&weak_buckets_ap, buckets_pool, |
| 4535 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_weak()}, | ||
| 4536 | {MPS_KEY_ARGS_END}}); | ||
| 4535 | if (res != MPS_RES_OK) error("Couldn't create weak buckets allocation point"); | 4537 | if (res != MPS_RES_OK) error("Couldn't create weak buckets allocation point"); |
| 4536 | 4538 | ||
| 4537 | /* Register the current thread with the MPS. The MPS must sometimes | 4539 | /* Register the current thread with the MPS. The MPS must sometimes |
diff --git a/mps/manual/html/_downloads/scheme.c b/mps/manual/html/_downloads/scheme.c index 3d595e0f641..2bac9c0042d 100644 --- a/mps/manual/html/_downloads/scheme.c +++ b/mps/manual/html/_downloads/scheme.c | |||
| @@ -4391,9 +4391,9 @@ int main(int argc, char *argv[]) | |||
| 4391 | 4391 | ||
| 4392 | /* Create an MPS arena. There is usually only one of these in a process. | 4392 | /* Create an MPS arena. There is usually only one of these in a process. |
| 4393 | It holds all the MPS "global" state and is where everything happens. */ | 4393 | It holds all the MPS "global" state and is where everything happens. */ |
| 4394 | res = mps_arena_create(&arena, | 4394 | res = mps_arena_create_k(&arena, mps_arena_class_vm(), |
| 4395 | mps_arena_class_vm(), | 4395 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = 32 * 1024 * 1024}, |
| 4396 | (size_t)(32 * 1024 * 1024)); | 4396 | {MPS_KEY_ARGS_END}}); |
| 4397 | if (res != MPS_RES_OK) error("Couldn't create arena"); | 4397 | if (res != MPS_RES_OK) error("Couldn't create arena"); |
| 4398 | 4398 | ||
| 4399 | /* Create the object format. */ | 4399 | /* Create the object format. */ |
| @@ -4409,18 +4409,17 @@ int main(int argc, char *argv[]) | |||
| 4409 | 4409 | ||
| 4410 | /* Create an Automatic Mostly-Copying (AMC) pool to manage the Scheme | 4410 | /* Create an Automatic Mostly-Copying (AMC) pool to manage the Scheme |
| 4411 | objects. This is a kind of copying garbage collector. */ | 4411 | objects. This is a kind of copying garbage collector. */ |
| 4412 | res = mps_pool_create(&obj_pool, | 4412 | res = mps_pool_create_k(&obj_pool, arena, mps_class_amc(), |
| 4413 | arena, | 4413 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = obj_chain}, |
| 4414 | mps_class_amc(), | 4414 | {MPS_KEY_FORMAT, .val.format = obj_fmt}, |
| 4415 | obj_fmt, | 4415 | {MPS_KEY_ARGS_END}}); |
| 4416 | obj_chain); | ||
| 4417 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); | 4416 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); |
| 4418 | 4417 | ||
| 4419 | /* Create an allocation point for fast in-line allocation of objects | 4418 | /* Create an allocation point for fast in-line allocation of objects |
| 4420 | from the `obj_pool`. You'd usually want one of these per thread | 4419 | from the `obj_pool`. You'd usually want one of these per thread |
| 4421 | for your primary pools. This interpreter is single threaded, though, | 4420 | for your primary pools. This interpreter is single threaded, though, |
| 4422 | so we just have it in a global. See topic/allocation. */ | 4421 | so we just have it in a global. See topic/allocation. */ |
| 4423 | res = mps_ap_create(&obj_ap, obj_pool); | 4422 | res = mps_ap_create_k(&obj_ap, obj_pool, mps_args_none); |
| 4424 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); | 4423 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); |
| 4425 | 4424 | ||
| 4426 | /* Register the current thread with the MPS. The MPS must sometimes | 4425 | /* Register the current thread with the MPS. The MPS must sometimes |
diff --git a/mps/manual/html/_sources/design/cbs.txt b/mps/manual/html/_sources/design/cbs.txt deleted file mode 100644 index 0956be703a0..00000000000 --- a/mps/manual/html/_sources/design/cbs.txt +++ /dev/null | |||
| @@ -1,695 +0,0 @@ | |||
| 1 | .. sources: | ||
| 2 | |||
| 3 | `<https://info.ravenbrook.com/project/mps/master/design/cbs/>`_ | ||
| 4 | |||
| 5 | |||
| 6 | .. mps:prefix:: design.mps.cbs | ||
| 7 | |||
| 8 | Coalescing block structure | ||
| 9 | ========================== | ||
| 10 | |||
| 11 | |||
| 12 | Introduction | ||
| 13 | ------------ | ||
| 14 | |||
| 15 | :mps:tag:`intro` This is the design for :mps:ref:`impl.c.cbs`, which | ||
| 16 | implements a data structure for the management of non-intersecting | ||
| 17 | memory ranges, with eager coalescence. | ||
| 18 | |||
| 19 | :mps:tag:`readership` This document is intended for any MM developer. | ||
| 20 | |||
| 21 | :mps:tag:`source` :mps:ref:`design.mps.poolmv2`, :mps:ref:`design.mps.poolmvff`. | ||
| 22 | |||
| 23 | :mps:tag:`overview` The "coalescing block structure" is a set of | ||
| 24 | addresses (or a subset of address space), with provision for efficient | ||
| 25 | management of contiguous ranges, including insertion and deletion, | ||
| 26 | high level communication with the client about the size of contiguous | ||
| 27 | ranges, and detection of protocol violations. | ||
| 28 | |||
| 29 | |||
| 30 | History | ||
| 31 | ------- | ||
| 32 | |||
| 33 | :mps:tag:`hist.0` This document was derived from the outline in | ||
| 34 | :mps:ref:`design.mps.poolmv2(2)`. Written by Gavin Matthews | ||
| 35 | 1998-05-01. | ||
| 36 | |||
| 37 | :mps:tag:`hist.1` Updated by Gavin Matthews 1998-07-22 in response to | ||
| 38 | approval comments in :mps:ref:`change.epcore.anchovy.160040` There is | ||
| 39 | too much fragmentation in trapping memory. | ||
| 40 | |||
| 41 | :mps:tag:`hist.2` Updated by Gavin Matthews (as part of | ||
| 42 | :mps:ref:`change.epcore.brisling.160158`: MVFF cannot be instantiated | ||
| 43 | with 4-byte alignment) to document new alignment restrictions. | ||
| 44 | |||
| 45 | :mps:tag:`hist.3` Converted from MMInfo database design document. | ||
| 46 | Richard Brooksby, 2002-06-07. | ||
| 47 | |||
| 48 | :mps:tag:`hist.4` Converted to reStructuredText. Gareth Rees, | ||
| 49 | 2013-04-14. | ||
| 50 | |||
| 51 | |||
| 52 | Definitions | ||
| 53 | ----------- | ||
| 54 | |||
| 55 | :mps:tag:`def.range` A (contiguous) range of addresses is a semi-open | ||
| 56 | interval on address space. | ||
| 57 | |||
| 58 | :mps:tag:`def.isolated` A contiguous range is isolated with respect to | ||
| 59 | some property it has, if adjacent elements do not have that property. | ||
| 60 | |||
| 61 | :mps:tag:`def.interesting` A block is interesting if it is of at least | ||
| 62 | the minimum interesting size specified by the client. | ||
| 63 | |||
| 64 | |||
| 65 | Requirements | ||
| 66 | ------------ | ||
| 67 | |||
| 68 | :mps:tag:`req.set` Must maintain a set of addresses. | ||
| 69 | |||
| 70 | :mps:tag:`req.fast` Common operations must have a low amortized cost. | ||
| 71 | |||
| 72 | :mps:tag:`req.add` Must be able to add address ranges to the set. | ||
| 73 | |||
| 74 | :mps:tag:`req.remove` Must be able to remove address ranges from the set. | ||
| 75 | |||
| 76 | :mps:tag:`req.size` Must report concisely to the client when isolated | ||
| 77 | contiguous ranges of at least a certain size appear and disappear. | ||
| 78 | |||
| 79 | :mps:tag:`req.iterate` Must support the iteration of all isolated | ||
| 80 | contiguous ranges. This will not be a common operation. | ||
| 81 | |||
| 82 | :mps:tag:`req.protocol` Must detect protocol violations. | ||
| 83 | |||
| 84 | :mps:tag:`req.debug` Must support debugging of client code. | ||
| 85 | |||
| 86 | :mps:tag:`req.small` Must have a small space overhead for the storage | ||
| 87 | of typical subsets of address space and not have abysmal overhead for | ||
| 88 | the storage of any subset of address space. | ||
| 89 | |||
| 90 | :mps:tag:`req.align` Must support an alignment (the alignment of all | ||
| 91 | addresses specifying ranges) of down to ``sizeof(void *)`` without | ||
| 92 | losing memory. | ||
| 93 | |||
| 94 | |||
| 95 | Interface | ||
| 96 | --------- | ||
| 97 | |||
| 98 | :mps:tag:`header` CBS is used through :mps:ref:`impl.h.cbs`. | ||
| 99 | |||
| 100 | |||
| 101 | External types | ||
| 102 | .............. | ||
| 103 | |||
| 104 | .. c:type:: typedef struct CBSStruct CBSStruct, *CBS; | ||
| 105 | |||
| 106 | :mps:tag:`type.cbs` :c:type:`CBS` is the main datastructure for | ||
| 107 | manipulating a CBS. It is intended that a :c:type:`CBSStruct` be | ||
| 108 | embedded in another structure. No convenience functions are provided | ||
| 109 | for the allocation or deallocation of the CBS. | ||
| 110 | |||
| 111 | .. c:type:: typedef struct CBSBlockStruct CBSBlockStruct, *CBSBlock; | ||
| 112 | |||
| 113 | :mps:tag:`type.cbs.block` :c:type:`CBSBlock` is the data-structure | ||
| 114 | that represents an isolated contiguous range held by the CBS. It is | ||
| 115 | returned by the new and delete methods described below. | ||
| 116 | |||
| 117 | :mps:tag:`type.cbs.method` The following methods are provided as | ||
| 118 | callbacks to advise the client of certain events. The implementation | ||
| 119 | of these functions should not cause any CBS function to be called on | ||
| 120 | the same CBS. In this respect, the CBS module is not re-entrant. | ||
| 121 | |||
| 122 | .. c:type:: typedef void (*CBSChangeSizeMethod)(CBS cbs, CBSBlock block, Size oldSize, SizeNewSize); | ||
| 123 | |||
| 124 | :mps:tag:`type.cbs.change.size.method` :c:type:`CBSChangeSizeMethod` | ||
| 125 | is the function pointer type, four instances of which are optionally | ||
| 126 | registered via CBSInit. | ||
| 127 | |||
| 128 | These callbacks are invoked under :c:func:`CBSInsert`, | ||
| 129 | :c:func:`CBSDelete`, or :c:func:`CBSSetMinSize` in certain | ||
| 130 | circumstances. Unless otherwise stated, ``oldSize`` and ``newSize`` | ||
| 131 | will both be non-zero, and different. The accessors | ||
| 132 | :c:func:`CBSBlockBase`, :c:func:`CBSBlockLimit`, and | ||
| 133 | :c:func:`CBSBlockSize` may be called from within these callbacks, | ||
| 134 | except within the delete callback when ``newSize`` is zero. See | ||
| 135 | :mps:ref:`.impl.callback` for implementation details. | ||
| 136 | |||
| 137 | .. c:type:: typedef Bool (*CBSIterateMethod)(CBS cbs, CBSBlock block, void *closureP, unsigned long closureS); | ||
| 138 | |||
| 139 | :mps:tag:`type.cbs.iterate.method` :c:type:`CBSIterateMethod` is a | ||
| 140 | function pointer type for a client method invoked by the CBS module | ||
| 141 | for every isolated contiguous range in address order, when passed to | ||
| 142 | the :c:func:`CBSIterate` or :c:func:`CBSIterateLarge` functions. The | ||
| 143 | function returns a boolean indicating whether to continue with the | ||
| 144 | iteration. | ||
| 145 | |||
| 146 | |||
| 147 | External functions | ||
| 148 | .................. | ||
| 149 | |||
| 150 | .. c:function:: Res CBSInit(Arena arena, CBS cbs, CBSChangeSizeMethod new, CBSChangeSizeMethod delete, CBSChangeSizeMethod grow, CBSChangeSizeMethod shrink, Size minSize, Align alignment, Bool mayUseInline) | ||
| 151 | |||
| 152 | :mps:tag:`function.cbs.init` :c:func:`CBSInit` is the function that | ||
| 153 | initialises the CBS structure. It performs allocation in the supplied | ||
| 154 | arena. Four methods are passed in as function pointers (see | ||
| 155 | :mps:ref:`.type.*` above), any of which may be ``NULL``. It receives a | ||
| 156 | minimum size, which is used when determining whether to call the | ||
| 157 | optional methods. The ``mayUseInline`` Boolean indicates whether the | ||
| 158 | CBS may use the memory in the ranges as a low-memory fallback (see | ||
| 159 | :mps:ref:`.impl.low-mem`). The alignment indicates the alignment of | ||
| 160 | ranges to be maintained. An initialised CBS contains no ranges. | ||
| 161 | |||
| 162 | :mps:tag:`function.cbs.init.may-use-inline` If ``mayUseInline`` is | ||
| 163 | set, then ``alignment`` must be at least ``sizeof(void *)``. In this | ||
| 164 | mode, the CBS will never fail to insert or delete ranges, even if | ||
| 165 | memory for control structures becomes short. Note that, in such cases, | ||
| 166 | the CBS may defer notification of new/grow events, but will report | ||
| 167 | available blocks in :c:func:`CBSFindFirst` and :c:func:`CBSFindLast`. | ||
| 168 | Such low memory conditions will be rare and transitory. See | ||
| 169 | :mps:ref:`.align` for more details. | ||
| 170 | |||
| 171 | .. c:function:: void CBSFinish(CBS cbs) | ||
| 172 | |||
| 173 | :mps:tag:`function.cbs.finish` :c:func:`CBSFinish` is the function | ||
| 174 | that finishes the CBS structure and discards any other resources | ||
| 175 | associated with the CBS. | ||
| 176 | |||
| 177 | .. c:function:: Res CBSInsert(CBS cbs, Addr base, Addr limit) | ||
| 178 | |||
| 179 | :mps:tag:`function.cbs.insert` :c:func:`CBSInsert` is the function | ||
| 180 | used to add a contiguous range specified by ``[base,limit)`` to the | ||
| 181 | CBS. If any part of the range is already in the CBS, then | ||
| 182 | :c:macro:`ResFAIL` is returned, and the CBS is unchanged. This | ||
| 183 | function may cause allocation; if this allocation fails, and any | ||
| 184 | contingency mechanism fails, then :c:macro:`ResMEMORY` is returned, | ||
| 185 | and the CBS is unchanged. | ||
| 186 | |||
| 187 | :mps:tag:`function.cbs.insert.callback` :c:func:`CBSInsert` will invoke callbacks as follows: | ||
| 188 | |||
| 189 | * ``new``: when a new block is created that is interesting. ``oldSize == 0; newSize >= minSize``. | ||
| 190 | |||
| 191 | * ``new``: when an uninteresting block coalesces to become interesting. ``0 < oldSize < minSize <= newSize``. | ||
| 192 | |||
| 193 | * ``delete``: when two interesting blocks are coalesced. ``grow`` will also be invoked in this case on the larger of the two blocks. ``newSize == 0; oldSize >= minSize``. | ||
| 194 | |||
| 195 | * ``grow``: when an interesting block grows in size. ``minSize <= oldSize < newSize``. | ||
| 196 | |||
| 197 | .. c:function:: Res CBSDelete(CBS cbs, Addr base, Addr limit) | ||
| 198 | |||
| 199 | :mps:tag:`function.cbs.delete` :c:func:`CBSDelete` is the function | ||
| 200 | used to remove a contiguous range specified by ``[base,limit)`` from | ||
| 201 | the CBS. If any part of the range is not in the CBS, then | ||
| 202 | :c:macro:`ResFAIL` is returned, and the CBS is unchanged. This | ||
| 203 | function may cause allocation; if this allocation fails, and any | ||
| 204 | contingency mechanism fails, then :c:macro:`ResMEMORY` is returned, | ||
| 205 | and the CBS is unchanged. | ||
| 206 | |||
| 207 | :mps:tag:`function.cbs.delete.callback` :c:func:`CBSDelete` will | ||
| 208 | invoke callbacks as follows: | ||
| 209 | |||
| 210 | * ``delete``: when an interesting block is entirely removed. ``newSize == 0; oldSize >= minSize``. | ||
| 211 | * ``delete``: when an interesting block becomes uninteresting. ``0 < newSize < minSize <= oldSize``. | ||
| 212 | * ``new``: when a block is split into two blocks, both of which are interesting. ``shrink`` will also be invoked in this case on the larger of the two blocks. ``oldSize == 0; newSize >= minSize``. | ||
| 213 | * ``shrink``: when an interesting block shrinks in size, but remains interesting. ``minSize <= newSize < oldSize``. | ||
| 214 | |||
| 215 | .. c:function:: void CBSIterate(CBS cbs, CBSIterateMethod iterate, void *closureP, unsigned long closureS) | ||
| 216 | |||
| 217 | :mps:tag:`function.cbs.iterate` :c:func:`CBSIterate` is the function | ||
| 218 | used to iterate all isolated contiguous ranges in a CBS. It receives a | ||
| 219 | pointer, unsigned long closure pair to pass on to the iterator method, | ||
| 220 | and an iterator method to invoke on every range in address order. If | ||
| 221 | the iterator method returns ``FALSE``, then the iteration is | ||
| 222 | terminated. | ||
| 223 | |||
| 224 | .. c:function:: void CBSIterateLarge(CBS cbs, CBSIterateMethod iterate, void *closureP, unsigned long closureS) | ||
| 225 | |||
| 226 | :mps:tag:`function.cbs.iterate.large` :c:func:`CBSIterateLarge` is the | ||
| 227 | function used to iterate all isolated contiguous ranges of size | ||
| 228 | greater than or equal to the client indicated minimum size in a CBS. | ||
| 229 | It receives a pointer, unsigned long closure pair to pass on to the | ||
| 230 | iterator method, and an iterator method to invoke on every large range | ||
| 231 | in address order. If the iterator method returns ``FALSE``, then the | ||
| 232 | iteration is terminated. | ||
| 233 | |||
| 234 | .. c:function:: void CBSSetMinSize(CBS cbs, Size minSize) | ||
| 235 | |||
| 236 | :mps:tag:`function.cbs.set.min-size` :c:func:`CBSSetMinSize` is the | ||
| 237 | function used to change the minimum size of interest in a CBS. This | ||
| 238 | minimum size is used to determine whether to invoke the client | ||
| 239 | callbacks from :c:func:`CBSInsert` and :c:func:`CBSDelete`. This | ||
| 240 | function will invoke either the ``new`` or ``delete`` callback for all | ||
| 241 | blocks that are (in the semi-open interval) between the old and new | ||
| 242 | values. ``oldSize`` and ``newSize`` will be the same in these cases. | ||
| 243 | |||
| 244 | .. c:function:: Res CBSDescribe(CBS cbs, mps_lib_FILE *stream) | ||
| 245 | |||
| 246 | :mps:tag:`function.cbs.describe` :c:func:`CBSDescribe` is a function | ||
| 247 | that prints a textual representation of the CBS to the given stream, | ||
| 248 | indicating the contiguous ranges in order, as well as the structure of | ||
| 249 | the underlying splay tree implementation. It is provided for debugging | ||
| 250 | purposes only. | ||
| 251 | |||
| 252 | .. c:function:: Addr CBSBlockBase(CBSBlock block) | ||
| 253 | |||
| 254 | :mps:tag:`function.cbs.block.base` The :c:func:`CBSBlockBase` function | ||
| 255 | returns the base of the range represented by the :c:type:`CBSBlock`. | ||
| 256 | This function may not be called from the delete callback when the | ||
| 257 | block is being deleted entirely. | ||
| 258 | |||
| 259 | .. note:: | ||
| 260 | |||
| 261 | The value of the base of a particular :c:type:`CBSBlock` is not | ||
| 262 | guaranteed to remain constant across calls to :c:func:`CBSDelete` | ||
| 263 | and :c:func:`CBSInsert`, regardless of whether a callback is | ||
| 264 | invoked. | ||
| 265 | |||
| 266 | .. c:function:: Addr CBSBlockLimit(CBSBlock block) | ||
| 267 | |||
| 268 | :mps:tag:`function.cbs.block.limit` The :c:func:`CBSBlockLimit` | ||
| 269 | function returns the limit of the range represented by the | ||
| 270 | :c:type:`CBSBlock`. This function may not be called from the delete | ||
| 271 | callback when the block is being deleted entirely. | ||
| 272 | |||
| 273 | .. note:: | ||
| 274 | |||
| 275 | The value of the limit of a particular :c:type:`CBSBlock` is not | ||
| 276 | guaranteed to remain constant across calls to :c:func:`CBSDelete` | ||
| 277 | and :c:func:`CBSInsert`, regardless of whether a callback is | ||
| 278 | invoked. | ||
| 279 | |||
| 280 | .. c:function:: Size CBSBlockSize(CBSBlock block) | ||
| 281 | |||
| 282 | :mps:tag:`function.cbs.block.size` The :c:func:`CBSBlockSize` function | ||
| 283 | returns the size of the range represented by the :c:type:`CBSBlock`. | ||
| 284 | This function may not be called from the ``delete`` callback when the | ||
| 285 | block is being deleted entirely. | ||
| 286 | |||
| 287 | .. note:: | ||
| 288 | |||
| 289 | The value of the size of a particular :c:type:`CBSBlock` is not | ||
| 290 | guaranteed to remain constant across calls to :c:func:`CBSDelete` | ||
| 291 | and :c:func:`CBSInsert`, regardless of whether a callback is | ||
| 292 | invoked. | ||
| 293 | |||
| 294 | .. c:function:: Res CBSBlockDescribe(CBSBlock block, mps_lib_FILE *stream) | ||
| 295 | |||
| 296 | :mps:tag:`function.cbs.block.describe` The :c:func:`CBSBlockDescribe` | ||
| 297 | function prints a textual representation of the :c:type:`CBSBlock` to | ||
| 298 | the given stream. It is provided for debugging purposes only. | ||
| 299 | |||
| 300 | .. c:function:: Bool CBSFindFirst(Addr *baseReturn, Addr *limitReturn, CBS cbs, Size size, CBSFindDelete findDelete) | ||
| 301 | |||
| 302 | :mps:tag:`function.cbs.find.first` The :c:func:`CBSFindFirst` function | ||
| 303 | locates the first block (in address order) within the CBS of at least | ||
| 304 | the specified size, and returns its range. If there are no such | ||
| 305 | blocks, it returns ``FALSE``. It optionally deletes the top, bottom, | ||
| 306 | or all of the found range, depending on the ``findDelete`` argument | ||
| 307 | (this saves a separate call to :c:func:`CBSDelete`, and uses the | ||
| 308 | knowledge of exactly where we found the range), which must come from | ||
| 309 | this enumeration:: | ||
| 310 | |||
| 311 | enum { | ||
| 312 | CBSFindDeleteNONE, /* don't delete after finding */ | ||
| 313 | CBSFindDeleteLOW, /* delete precise size from low end */ | ||
| 314 | CBSFindDeleteHIGH, /* delete precise size from high end */ | ||
| 315 | CBSFindDeleteENTIRE /* delete entire range */ | ||
| 316 | }; | ||
| 317 | |||
| 318 | .. c:function:: Bool CBSFindLast(Addr *baseReturn, Addr *limitReturn, CBS cbs, Size size, CBSFindDelete findDelete) | ||
| 319 | |||
| 320 | :mps:tag:`function.cbs.find.last` The :c:func:`CBSFindLast` function | ||
| 321 | locates the last block (in address order) within the CBS of at least | ||
| 322 | the specified size, and returns its range. If there are no such | ||
| 323 | blocks, it returns ``FALSE``. Like :c:func:`CBSFindFirst`, it | ||
| 324 | optionally deletes the range. | ||
| 325 | |||
| 326 | .. c:function:: Bool CBSFindLargest(Addr *baseReturn, Addr *limitReturn, CBS cbs, CBSFindDelete findDelete) | ||
| 327 | |||
| 328 | :mps:tag:`function.cbs.find.largest` The :c:func:`CBSFindLargest` | ||
| 329 | function locates the largest block within the CBS, and returns its | ||
| 330 | range. If there are no blocks, it returns ``FALSE``. Like | ||
| 331 | :c:func:`CBSFindFirst`, it optionally deletes the range (specifying | ||
| 332 | ``CBSFindDeleteLOW`` or ``CBSFindDeleteHIGH`` has the same effect as | ||
| 333 | ``CBSFindDeleteENTIRE``). | ||
| 334 | |||
| 335 | |||
| 336 | Alignment | ||
| 337 | --------- | ||
| 338 | |||
| 339 | :mps:tag:`align` When ``mayUseInline`` is specified to permit inline | ||
| 340 | data structures and hence avoid losing memory in low memory | ||
| 341 | situations, the alignments that the CBS supports are constrained by | ||
| 342 | three requirements: | ||
| 343 | |||
| 344 | - The smallest possible range (namely one that is the alignment in | ||
| 345 | size) must be large enough to contain a single ``void *`` pointer (see | ||
| 346 | :mps:ref:`.impl.low-mem.inline.grain`); | ||
| 347 | |||
| 348 | - Any larger range (namely one that is at least twice the alignment in | ||
| 349 | size) must be large enough to contain two ``void *`` pointers (see | ||
| 350 | :mps:ref:`.impl.low-mem.inline.block`); | ||
| 351 | |||
| 352 | - It must be valid on all platforms to access a ``void *`` pointer | ||
| 353 | stored at the start of an aligned range. | ||
| 354 | |||
| 355 | All alignments that meet these requirements are aligned to | ||
| 356 | ``sizeof(void *)``, so we take that as the minimum alignment. | ||
| 357 | |||
| 358 | |||
| 359 | Implementation | ||
| 360 | -------------- | ||
| 361 | |||
| 362 | :mps:tag:`impl` Note that this section is concerned with describing | ||
| 363 | various aspects of the implementation. It does not form part of the | ||
| 364 | interface definition. | ||
| 365 | |||
| 366 | |||
| 367 | Size change callback protocol | ||
| 368 | ............................. | ||
| 369 | |||
| 370 | :mps:tag:`impl.callback` The size change callback protocol concerns | ||
| 371 | the mechanism for informing the client of the appearance and | ||
| 372 | disappearance of interesting ranges. The intention is that each range | ||
| 373 | has an identity (represented by the :c:type:`CBSBlock`). When blocks | ||
| 374 | are split, the larger fragment retains the identity. When blocks are | ||
| 375 | merged, the new block has the identity of the larger fragment. | ||
| 376 | |||
| 377 | :mps:tag:`impl.callback.delete` Consider the case when the minimum | ||
| 378 | size is ``minSize``, and :c:func:`CBSDelete` is called to remove a | ||
| 379 | range of size ``middle``. The two (possibly non-existant) neighbouring | ||
| 380 | ranges have (possibly zero) sizes ``left`` and ``right``. ``middle`` is part | ||
| 381 | of the :c:type:`CBSBlock` ``middleBlock``. | ||
| 382 | |||
| 383 | :mps:tag:`impl.callback.delete.delete` The ``delete`` callback will be | ||
| 384 | called in this case if and only if:: | ||
| 385 | |||
| 386 | left + middle + right >= minSize && left < minSize && right < minSize | ||
| 387 | |||
| 388 | That is, the combined range is interesting, but neither remaining | ||
| 389 | fragment is. It will be called with the following parameters: | ||
| 390 | |||
| 391 | * ``block``: ``middleBlock`` | ||
| 392 | * ``oldSize``: ``left + middle + right`` | ||
| 393 | * ``newSize``: ``left >= right ? left : right`` | ||
| 394 | |||
| 395 | :mps:tag:`impl.callback.delete.new` The ``new`` callback will be | ||
| 396 | called in this case if and only if:: | ||
| 397 | |||
| 398 | left >= minSize && right >= minSize | ||
| 399 | |||
| 400 | That is, both remaining fragments are interesting. It will be called | ||
| 401 | with the following parameters: | ||
| 402 | |||
| 403 | * ``block``: a new block | ||
| 404 | * ``oldSize``: ``0`` | ||
| 405 | * ``newSize``: ``left >= right ? right : left`` | ||
| 406 | |||
| 407 | :mps:tag:`impl.callback.delete.shrink` The shrink callback will be | ||
| 408 | called in this case if and only if:: | ||
| 409 | |||
| 410 | left + middle + right >= minSize && (left >= minSize || right >= minSize) | ||
| 411 | |||
| 412 | That is, at least one of the remaining fragments is still interesting. It will be called with the following parameters: | ||
| 413 | |||
| 414 | * ``block``: ``middleBlock`` | ||
| 415 | * ``oldSize``: ``left + middle + right`` | ||
| 416 | * ``newSize``: ``left >= right ? left : right`` | ||
| 417 | |||
| 418 | :mps:tag:`impl.callback.insert` Consider the case when the minimum | ||
| 419 | size is ``minSize``, and :c:func:`CBSInsert` is called to add a range | ||
| 420 | of size ``middle``. The two (possibly non-existant) neighbouring | ||
| 421 | blocks are ``leftBlock`` and ``rightBlock``, and have (possibly zero) | ||
| 422 | sizes ``left`` and ``right``. | ||
| 423 | |||
| 424 | :mps:tag:`impl.callback.insert.delete` The ``delete`` callback will be | ||
| 425 | called in this case if and only if: | ||
| 426 | |||
| 427 | left >= minSize && right >= minSize | ||
| 428 | |||
| 429 | That is, both neighbours were interesting. It will be called with the | ||
| 430 | following parameters: | ||
| 431 | |||
| 432 | * ``block``: ``left >= right ? rightBlock : leftBlock`` | ||
| 433 | * ``oldSize``: ``left >= right ? right : left`` | ||
| 434 | * ``newSize``: ``0`` | ||
| 435 | |||
| 436 | :mps:tag:`impl.callback.insert.new` The ``new`` callback will be | ||
| 437 | called in this case if and only if: | ||
| 438 | |||
| 439 | left + middle + right >= minSize && left < minSize && right < minSize | ||
| 440 | |||
| 441 | That is, the combined block is interesting, but neither neighbour was. | ||
| 442 | It will be called with the following parameters: | ||
| 443 | |||
| 444 | * ``block``: ``left >= right ? leftBlock : rightBlock`` | ||
| 445 | * ``oldSize``: ``left >= right ? left : right`` | ||
| 446 | * ``newSize``: ``left + middle + right`` | ||
| 447 | |||
| 448 | :mps:tag:`impl.callback.insert.grow` The ``grow`` callback will be | ||
| 449 | called in this case if and only if:: | ||
| 450 | |||
| 451 | left + middle + right >= minSize && (left >= minSize || right >= minSize) | ||
| 452 | |||
| 453 | That is, at least one of the neighbours was interesting. It will be | ||
| 454 | called with the following parameters: | ||
| 455 | |||
| 456 | * ``block``: ``left >= right ? leftBlock : rightBlock`` | ||
| 457 | * ``oldSize``: ``left >= right ? left : right`` | ||
| 458 | * ``newSize``: ``left + middle + right`` | ||
| 459 | |||
| 460 | |||
| 461 | Splay tree | ||
| 462 | .......... | ||
| 463 | |||
| 464 | :mps:tag:`impl.splay` The CBS is principally implemented using a splay | ||
| 465 | tree (see :mps:ref:`design.mps.splay`). Each splay tree node is | ||
| 466 | embedded in a CBSBlock that represents a semi-open address range. The | ||
| 467 | key passed for comparison is the base of another range. | ||
| 468 | |||
| 469 | :mps:tag:`impl.splay.fast-find` :c:func:`CBSFindFirst` and | ||
| 470 | :c:func:`CBSFindLast` use the update/refresh facility of splay trees | ||
| 471 | to store, in each :c:type:`CBSBlock`, an accurate summary of the | ||
| 472 | maximum block size in the tree rooted at the corresponding splay node. | ||
| 473 | This allows rapid location of the first or last suitable block, and | ||
| 474 | very rapid failure if there is no suitable block. | ||
| 475 | |||
| 476 | :mps:tag:`impl.find-largest` :c:func:`CBSFindLargest` simply finds out | ||
| 477 | the size of the largest block in the CBS from the root of the tree | ||
| 478 | (using :c:func:`SplayRoot`), and does :c:func:`SplayFindFirst` for a | ||
| 479 | block of that size. This is O(log(*n*)) in the size of the free list, | ||
| 480 | so it's about the best you can do without maintaining a separate | ||
| 481 | priority queue, just to do :c:func:`CBSFindLargest`. Except when the | ||
| 482 | emergency lists (see :mps:ref:`.impl.low-mem`) are in use, they are | ||
| 483 | also searched. | ||
| 484 | |||
| 485 | |||
| 486 | Low memory behaviour | ||
| 487 | .................... | ||
| 488 | |||
| 489 | :mps:tag:`impl.low-mem` Low memory situations cause problems when the | ||
| 490 | CBS tries to allocate a new :c:type:`CBSBlock` structure for a new | ||
| 491 | isolated range as a result of either :c:func:`CBSInsert` or | ||
| 492 | :c:func:`CBSDelete`, and there is insufficient memory to allocation | ||
| 493 | the :c:type:`CBSBlock` structure: | ||
| 494 | |||
| 495 | :mps:tag:`impl.low-mem.no-inline` If ``mayUseInline`` is ``FALSE``, | ||
| 496 | then the range is not added to the CBS, and the call to | ||
| 497 | :c:func:`CBSInsert` or :c:func:`CBSDelete` returns ``ResMEMORY``. | ||
| 498 | |||
| 499 | :mps:tag:`impl.low-mem.inline` If ``mayUseInline`` is ``TRUE``: | ||
| 500 | |||
| 501 | :mps:tag:`impl.low-mem.inline.block` If the range is large enough to | ||
| 502 | contain an inline block descriptor consisting of two pointers, then it | ||
| 503 | is kept on an emergency block list. The CBS will eagerly attempt to | ||
| 504 | add this block back into the splay tree during subsequent calls to | ||
| 505 | :c:func:`CBSInsert` and :c:func:`CBSDelete`. The CBS will also keep | ||
| 506 | its emergency block list in address order, and will coalesce this list | ||
| 507 | eagerly. Some performance degradation will be seen when the emergency | ||
| 508 | block list is in use. Ranges on this emergency block list will not be | ||
| 509 | made available to the CBS's client via callbacks. :c:func:`CBSIterate` | ||
| 510 | and :c:func:`CBSIterateLarge` will not iterate over ranges on this | ||
| 511 | list. | ||
| 512 | |||
| 513 | :mps:tag:`impl.low-mem.inline.block.structure` The two pointers stored | ||
| 514 | are to the next such block (or ``NULL``), and to the limit of the | ||
| 515 | block, in that order. | ||
| 516 | |||
| 517 | :mps:tag:`impl.low-mem.inline.grain` Otherwise, the range must be | ||
| 518 | large enough to contain an inline grain descriptor consisting of one | ||
| 519 | pointer, then it is kept on an emergency grain list. The CBS will | ||
| 520 | eagerly attempt to add this grain back into either the splay tree or | ||
| 521 | the emergency block list during subsequent calls to | ||
| 522 | :c:func:`CBSInsert` and :c:func:`CBSDelete`. The CBS will also keep | ||
| 523 | its emergency grain list in address order. Some performance | ||
| 524 | degradation will be seen when the emergency grain list is in use. | ||
| 525 | Ranges on this emergency grain list will not be made available to the | ||
| 526 | CBS's client via callbacks. :c:func:`CBSIterate` and | ||
| 527 | :c:func:`CBSIterateLarge` will not iterate over ranges on this list. | ||
| 528 | |||
| 529 | :mps:tag:`impl.low-mem.inline.grain.structure` The pointer stored is | ||
| 530 | to the next such grain, or ``NULL``. | ||
| 531 | |||
| 532 | |||
| 533 | The CBS block | ||
| 534 | ............. | ||
| 535 | |||
| 536 | :mps:tag:`impl.cbs.block` The block contains a base-limit pair and a | ||
| 537 | splay tree node. | ||
| 538 | |||
| 539 | :mps:tag:`impl.cbs.block.special` The base and limit may be equal if | ||
| 540 | the block is halfway through being deleted. | ||
| 541 | |||
| 542 | :mps:tag:`impl.cbs.block.special.just` This conflates values and | ||
| 543 | status, but is justified because block size is very important. | ||
| 544 | |||
| 545 | |||
| 546 | Testing | ||
| 547 | ------- | ||
| 548 | |||
| 549 | :mps:tag:`test` The following testing will be performed on this module: | ||
| 550 | |||
| 551 | :mps:tag:`test.cbstest` There is a stress test for this module in | ||
| 552 | :mps:ref:`impl.c.cbstest`. This allocates a large block of memory and | ||
| 553 | then simulates the allocation and deallocation of ranges within this | ||
| 554 | block using both a :c:type:`CBS` and a :c:type:`BT`. It makes both | ||
| 555 | valid and invalid requests, and compares the :c:type:`CBS` response to | ||
| 556 | the correct behaviour as determined by the :c:type:`BT`. It also | ||
| 557 | iterates the ranges in the :c:type:`CBS`, comparing them to the | ||
| 558 | :c:type:`BT`. It also invokes the :c:func:`CBSDescribe` method, but | ||
| 559 | makes no automatic test of the resulting output. It does not currently | ||
| 560 | test the callbacks. | ||
| 561 | |||
| 562 | :mps:tag:`test.pool` Several pools (currently :ref:`pool-mvt` and | ||
| 563 | :ref:`pool-mvff`) are implemented on top of a CBS. These pool are | ||
| 564 | subject to testing in development, QA, and are/will be heavily | ||
| 565 | exercised by customers. | ||
| 566 | |||
| 567 | |||
| 568 | Notes for future development | ||
| 569 | ---------------------------- | ||
| 570 | |||
| 571 | :mps:tag:`future.not-splay` The initial implementation of CBSs is | ||
| 572 | based on splay trees. It could be revised to use any other data | ||
| 573 | structure that meets the requirements (especially | ||
| 574 | :mps:ref:`.req.fast`). | ||
| 575 | |||
| 576 | :mps:tag:`future.hybrid` It would be possible to attenuate the problem | ||
| 577 | of :mps:ref:`.risk.overhead` (below) by using a single word bit set to | ||
| 578 | represent the membership in a (possibly aligned) word-width of grains. | ||
| 579 | This might be used for block sizes less than a word-width of grains, | ||
| 580 | converting them when they reach all free in the bit set. Note that | ||
| 581 | this would make coalescence slightly less eager, by up to | ||
| 582 | ``(word-width - 1)``. | ||
| 583 | |||
| 584 | |||
| 585 | Risks | ||
| 586 | ----- | ||
| 587 | |||
| 588 | :mps:tag:`risk.overhead` Clients should note that the current | ||
| 589 | implementation of CBSs has a space overhead proportional to the number | ||
| 590 | of isolated contiguous ranges. [Four words per range.] If the CBS | ||
| 591 | contains every other grain in an area, then the overhead will be large | ||
| 592 | compared to the size of that area. [Four words per two grains.] See | ||
| 593 | :mps:ref:`.future.hybrid` for a suggestion to solve this problem. An | ||
| 594 | alternative solution is to use CBSs only for managing long ranges. | ||
| 595 | |||
| 596 | |||
| 597 | Proposed hybrid implementation | ||
| 598 | ------------------------------ | ||
| 599 | |||
| 600 | .. note:: | ||
| 601 | |||
| 602 | The following relates to a pending re-design and does not yet | ||
| 603 | relate to any working source version. GavinM 1998-09-25 | ||
| 604 | |||
| 605 | The CBS system provides its services by combining the services | ||
| 606 | provided by three subsidiary CBS modules: | ||
| 607 | |||
| 608 | - ``CBSST`` -- Splay Tree: Based on out-of-line splay trees; must | ||
| 609 | allocate to insert isolated, which may therefore fail. | ||
| 610 | |||
| 611 | - ``CBSBL`` -- Block List: Based on a singly-linked list of variable | ||
| 612 | sized ranges with inline descriptors; ranges must be at least large | ||
| 613 | enough to store the inline descriptor. | ||
| 614 | |||
| 615 | - ``CBSGL`` -- Grain List: Based on a singly-linked list of fixed size | ||
| 616 | ranges with inline descriptors; the ranges must be the alignment of | ||
| 617 | the CBS. | ||
| 618 | |||
| 619 | The three sub-modules have a lot in common. Although their methods are | ||
| 620 | not invoked via a dispatcher, they have been given consistent | ||
| 621 | interfaces, and consistent internal appearance, to aid maintenance. | ||
| 622 | |||
| 623 | Methods supported by sub-modules (not all sub-modules support all | ||
| 624 | methods): | ||
| 625 | |||
| 626 | - ``MergeRange`` -- Finds any ranges in the specific CBS adjacent to | ||
| 627 | the supplied one. If there are any, it extends the ranges, possibly | ||
| 628 | deleting one of them. This cannot fail, but should return ``FALSE`` | ||
| 629 | if there is an intersection between the supplied range and a range | ||
| 630 | in the specific CBS. | ||
| 631 | |||
| 632 | - ``InsertIsolatedRange`` -- Adds a range to the specific CBS that is | ||
| 633 | not adjacent to any range already in there. Depending on the | ||
| 634 | specific CBS, this may be able to fail for allocation reasons, in | ||
| 635 | which case it should return ``FALSE``. It should :c:func:`AVER` if | ||
| 636 | the range is adjacent to or intersects with a range already there. | ||
| 637 | |||
| 638 | - ``RemoveAdjacentRanges`` -- Finds and removes from the specific CBS | ||
| 639 | any ranges that are adjacent to the supplied range. Should return | ||
| 640 | ``FALSE`` if the supplied range intersects with any ranges already | ||
| 641 | there. | ||
| 642 | |||
| 643 | - ``DeleteRange`` -- Finds and deletes the supplied range from the | ||
| 644 | specific CBS. Returns a tri-state result: | ||
| 645 | |||
| 646 | - ``Success`` -- The range was successfully deleted. This may have | ||
| 647 | involved the creation of a new range, which should be done via | ||
| 648 | ``CBSInsertIsolatedRange``. | ||
| 649 | |||
| 650 | - ``ProtocolError`` -- Either some non-trivial strict subset of the | ||
| 651 | supplied range was in the specific CBS, or a range adjacent to the | ||
| 652 | supplied range was in the specific CBS. Either of these indicates | ||
| 653 | a protocol error. | ||
| 654 | |||
| 655 | - ``NoIntersection`` -- The supplied range was not found in the CBS. | ||
| 656 | This may or not be a protocol error, depending on the invocation | ||
| 657 | context. | ||
| 658 | |||
| 659 | - ``FindFirst`` -- Returns the first (in address order) range in the | ||
| 660 | specific CBS that is at least as large as the supplied size, or | ||
| 661 | ``FALSE`` if there is no such range. | ||
| 662 | |||
| 663 | - ``FindFirstBefore`` -- As ``FindFirst``, but only finds ranges prior | ||
| 664 | to the supplied address. | ||
| 665 | |||
| 666 | - ``FindLast`` -- As ``FindFirst``, but finds the last such range in | ||
| 667 | address order. | ||
| 668 | |||
| 669 | - ``FindLastAfter`` -- ``FindLast`` equivalent of ``FindFirstBefore``. | ||
| 670 | |||
| 671 | - ``Init`` -- Initialise the control structure embedded in the CBS. | ||
| 672 | |||
| 673 | - ``Finish`` -- Finish the control structure embedded in the CBS. | ||
| 674 | |||
| 675 | - ``InlineDescriptorSize`` -- Returns the aligned size of the inline descriptor. | ||
| 676 | |||
| 677 | - ``Check`` -- Checks the control structure embedded in the CBS. | ||
| 678 | |||
| 679 | The CBS supplies the following utilities: | ||
| 680 | |||
| 681 | - ``CBSAlignment`` -- Returns the alignment of the CBS. | ||
| 682 | |||
| 683 | - ``CBSMayUseInline`` -- Returns whether the CBS may use the memory in | ||
| 684 | the ranges stored. | ||
| 685 | |||
| 686 | - ``CBSInsertIsolatedRange`` -- Wrapper for ``CBS*InsertIsolatedRange``. | ||
| 687 | |||
| 688 | Internally, the ``CBS*`` sub-modules each have an internal structure | ||
| 689 | ``CBS*Block`` that represents an isolated range within the module. It | ||
| 690 | supports the following methods (for sub-module internal use): | ||
| 691 | |||
| 692 | - ``BlockBase`` -- Returns the base of the associated range; | ||
| 693 | - ``BlockLimit`` | ||
| 694 | - ``BlockRange`` | ||
| 695 | - ``BlockSize`` | ||
diff --git a/mps/manual/html/_sources/design/check.txt b/mps/manual/html/_sources/design/check.txt deleted file mode 100644 index 5483e0329e3..00000000000 --- a/mps/manual/html/_sources/design/check.txt +++ /dev/null | |||
| @@ -1,106 +0,0 @@ | |||
| 1 | .. sources: | ||
| 2 | |||
| 3 | `<https://info.ravenbrook.com/project/mps/master/design/check/>`_ | ||
| 4 | |||
| 5 | .. mps:prefix:: design.mps.check | ||
| 6 | |||
| 7 | Checking | ||
| 8 | ======== | ||
| 9 | |||
| 10 | |||
| 11 | Introduction | ||
| 12 | ------------ | ||
| 13 | |||
| 14 | This documents the design of structure checking within the MPS. | ||
| 15 | |||
| 16 | |||
| 17 | History | ||
| 18 | ------- | ||
| 19 | |||
| 20 | :mps:tag:`hist.0` Incomplete design. Gavin Matthews, 1996-08-05. | ||
| 21 | |||
| 22 | :mps:tag:`hist.1` Converted from MMInfo database design document. | ||
| 23 | Richard Brooksby, 2002-06-07. | ||
| 24 | |||
| 25 | :mps:tag:`hist.2` Converted to reStructuredText. Gareth Rees, | ||
| 26 | 2013-03-12. | ||
| 27 | |||
| 28 | |||
| 29 | Implementation | ||
| 30 | -------------- | ||
| 31 | |||
| 32 | :mps:tag:`level` There are three levels of checking: | ||
| 33 | |||
| 34 | 1. :mps:tag:`level.sig` The lowest level checks only that the | ||
| 35 | structure has a valid :c:type:`Signature` (see | ||
| 36 | :mps:ref:`design.mps.sig`). | ||
| 37 | |||
| 38 | 2. :mps:tag:`level.shallow` Shallow checking checks all local fields | ||
| 39 | (including signature) and also checks the signatures of any parent | ||
| 40 | or child structures. | ||
| 41 | |||
| 42 | 3. :mps:tag:`level.deep` Deep checking checks all local fields | ||
| 43 | (including signatures), the signatures of any parent structures, | ||
| 44 | and does full recursive checking on any child structures. | ||
| 45 | |||
| 46 | :mps:tag:`level.control` Control over the levels of checking is via | ||
| 47 | the definition of at most one of the macros | ||
| 48 | :c:macro:`TARGET_CHECK_SHALLOW` (which if defined gives | ||
| 49 | :mps:ref:`.level.shallow`), :c:macro:`TARGET_CHECK_DEEP` (which if | ||
| 50 | defined gives :mps:ref:`.level.deep`). If neither macro is defined | ||
| 51 | then :mps:ref:`.level.sig` is used. These macros are not intended to | ||
| 52 | be manipulated directly by developers, they should use the interface | ||
| 53 | in :mps:ref:`impl.h.target`. | ||
| 54 | |||
| 55 | :mps:tag:`order` Because deep checking (:mps:ref:`.level.deep`) uses | ||
| 56 | unchecked recursion, it is important that child relationships are | ||
| 57 | acyclic (:mps:ref:`.macro.down`). | ||
| 58 | |||
| 59 | :mps:tag:`fun` Every abstract data type which is a structure pointer | ||
| 60 | should have a function ``<type>Check`` which takes a pointer of type | ||
| 61 | ``<type>`` and returns a :c:type:`Bool`. It should check all fields in | ||
| 62 | order, using one of the macros in :mps:ref:`.macro`, or document why | ||
| 63 | not. | ||
| 64 | |||
| 65 | :mps:tag:`fun.omit` The only fields which should be omitted from a | ||
| 66 | check function are those for which there is no meaningful check (for | ||
| 67 | example, an unlimited unsigned integer with no relation to other fields). | ||
| 68 | |||
| 69 | :mps:tag:`fun.return` Although the function returns a :c:type:`Bool`, | ||
| 70 | if the assert handler returns (or there is no assert handler), then | ||
| 71 | this is taken to mean "ignore and continue", and the check function | ||
| 72 | hence returns ``TRUE``. | ||
| 73 | |||
| 74 | :mps:tag:`macro` Checking is implemented by invoking four macros in :mps:ref:`impl.h.assert`: | ||
| 75 | |||
| 76 | * :mps:tag:`macro.sig` ``CHECKS(type, val)`` checks the signature | ||
| 77 | only, and should be called precisely on ``type`` and the received | ||
| 78 | object pointer. | ||
| 79 | |||
| 80 | * :mps:tag:`macro.local` ``CHECKL(cond)`` checks a local field | ||
| 81 | (depending on level; see :mps:ref:`.level`), and should be called on | ||
| 82 | each local field that is not an abstract data type structure pointer | ||
| 83 | itself (apart from the signature), with an appropriate normally-true | ||
| 84 | test condition. | ||
| 85 | |||
| 86 | * :mps:tag:`macro.up` ``CHECKU(type, val)`` checks a parent abstract | ||
| 87 | data type structure pointer, performing at most signature checks | ||
| 88 | (depending on level; see :mps:ref:`.level`). It should be called | ||
| 89 | with the parent type and pointer. | ||
| 90 | |||
| 91 | * :mps:tag:`macro.down` ``CHECKD(type, val)`` checks a child abstract | ||
| 92 | data type structure pointer, possibly invoking ``<type>Check`` | ||
| 93 | (depending on level; see :mps:ref:`.level`). It should be called | ||
| 94 | with the child type and pointer. | ||
| 95 | |||
| 96 | :mps:tag:`full-type` ``CHECKS``, ``CHECKD``, ``CHECKU``, all operate | ||
| 97 | only on fully fledged types. This means the type has to provide a | ||
| 98 | function ``Bool TypeCheck(Type type)`` where ``Type`` is substituted | ||
| 99 | for the name of the type (for example, :c:func:`PoolCheck`), and the | ||
| 100 | expression ``obj->sig`` must be a valid value of type :c:type:`Sig` | ||
| 101 | whenever ``obj`` is a valid value of type ``Type``. | ||
| 102 | |||
| 103 | :mps:tag:`type.no-sig` This tag is to be referenced in implementations | ||
| 104 | whenever the form ``CHECKL(ThingCheck(thing))`` is used instead of | ||
| 105 | ``CHECK{U,D}(Thing, thing)`` because ``Thing`` is not a fully fledged | ||
| 106 | type (:mps:ref:`.full-type`). | ||
diff --git a/mps/manual/html/_sources/glossary/c.txt b/mps/manual/html/_sources/glossary/c.txt index 514b5305d72..58196b561ec 100644 --- a/mps/manual/html/_sources/glossary/c.txt +++ b/mps/manual/html/_sources/glossary/c.txt | |||
| @@ -8,6 +8,39 @@ Memory Management Glossary: C | |||
| 8 | 8 | ||
| 9 | .. glossary:: | 9 | .. glossary:: |
| 10 | 10 | ||
| 11 | C89 | ||
| 12 | |||
| 13 | .. see:: :term:`C90`. | ||
| 14 | |||
| 15 | C90 | ||
| 16 | |||
| 17 | .. aka:: *C89*. | ||
| 18 | |||
| 19 | A revision of the ANSI/ISO Standard for the :term:`C` | ||
| 20 | programming language. Although more than twenty years old, it | ||
| 21 | remains the only form of Standard C that is supported by all | ||
| 22 | the major compilers, including Microsoft Visual C. | ||
| 23 | |||
| 24 | .. mps:specific:: | ||
| 25 | |||
| 26 | The public interface conforms to this standard. See | ||
| 27 | :ref:`topic-interface`. | ||
| 28 | |||
| 29 | .. bibref:: :ref:`ISO/IEC 9899:1990 <C1990>`. | ||
| 30 | |||
| 31 | C99 | ||
| 32 | |||
| 33 | A revision of the ANSI/ISO Standard for C the :term:`C` | ||
| 34 | programming language. | ||
| 35 | |||
| 36 | .. mps:specific:: | ||
| 37 | |||
| 38 | :term:`Keyword arguments` can be conveniently passed to | ||
| 39 | functions using C99's compound literal syntax. See | ||
| 40 | :ref:`topic-keyword`. | ||
| 41 | |||
| 42 | .. bibref:: :ref:`ISO/IEC 9899:1999 <C1999>`. | ||
| 43 | |||
| 11 | cache (1) | 44 | cache (1) |
| 12 | 45 | ||
| 13 | .. aka:: *memory cache*, *cache memory*. | 46 | .. aka:: *memory cache*, *cache memory*. |
diff --git a/mps/manual/html/_sources/glossary/k.txt b/mps/manual/html/_sources/glossary/k.txt index 87b349d527e..b08edafb470 100644 --- a/mps/manual/html/_sources/glossary/k.txt +++ b/mps/manual/html/_sources/glossary/k.txt | |||
| @@ -12,6 +12,17 @@ Memory Management Glossary: K | |||
| 12 | 12 | ||
| 13 | .. see:: :term:`kilobyte`. | 13 | .. see:: :term:`kilobyte`. |
| 14 | 14 | ||
| 15 | keyword argument | ||
| 16 | |||
| 17 | An optional argument to a function call, identified by an | ||
| 18 | associated keyword. | ||
| 19 | |||
| 20 | .. mps:specific:: | ||
| 21 | |||
| 22 | Keyword arguments are passed to functions in the MPS | ||
| 23 | interface as arrays of structures of type | ||
| 24 | :c:type:`mps_arg_s`. See :ref:`topic-keyword`. | ||
| 25 | |||
| 15 | kilobyte | 26 | kilobyte |
| 16 | 27 | ||
| 17 | .. aka:: *kB*. | 28 | .. aka:: *kB*. |
diff --git a/mps/manual/html/_sources/guide/advanced.txt b/mps/manual/html/_sources/guide/advanced.txt index f65de503e9e..7ab02a3141d 100644 --- a/mps/manual/html/_sources/guide/advanced.txt +++ b/mps/manual/html/_sources/guide/advanced.txt | |||
| @@ -712,17 +712,21 @@ Finally, we can create the buckets pool and its allocation points:: | |||
| 712 | 712 | ||
| 713 | /* Create an Automatic Weak Linked (AWL) pool to manage the hash table | 713 | /* Create an Automatic Weak Linked (AWL) pool to manage the hash table |
| 714 | buckets. */ | 714 | buckets. */ |
| 715 | res = mps_pool_create(&buckets_pool, | 715 | res = mps_pool_create_k(&buckets_pool, arena, mps_class_awl(), |
| 716 | arena, | 716 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = buckets_fmt}, |
| 717 | mps_class_awl(), | 717 | {MPS_KEY_AWL_FIND_DEPENDENT, |
| 718 | buckets_fmt, | 718 | .val.addr_method = buckets_find_dependent}, |
| 719 | buckets_find_dependent); | 719 | {MPS_KEY_ARGS_END}}); |
| 720 | if (res != MPS_RES_OK) error("Couldn't create buckets pool"); | 720 | if (res != MPS_RES_OK) error("Couldn't create buckets pool"); |
| 721 | 721 | ||
| 722 | /* Create allocation points for weak and strong buckets. */ | 722 | /* Create allocation points for weak and strong buckets. */ |
| 723 | res = mps_ap_create(&strong_buckets_ap, buckets_pool, mps_rank_exact()); | 723 | res = mps_ap_create_k(&strong_buckets_ap, buckets_pool, |
| 724 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_exact()}, | ||
| 725 | {MPS_KEY_ARGS_END}}); | ||
| 724 | if (res != MPS_RES_OK) error("Couldn't create strong buckets allocation point"); | 726 | if (res != MPS_RES_OK) error("Couldn't create strong buckets allocation point"); |
| 725 | res = mps_ap_create(&weak_buckets_ap, buckets_pool, mps_rank_weak()); | 727 | res = mps_ap_create_k(&weak_buckets_ap, buckets_pool, |
| 728 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_weak()}, | ||
| 729 | {MPS_KEY_ARGS_END}}); | ||
| 726 | if (res != MPS_RES_OK) error("Couldn't create weak buckets allocation point"); | 730 | if (res != MPS_RES_OK) error("Couldn't create weak buckets allocation point"); |
| 727 | 731 | ||
| 728 | By adding the line:: | 732 | By adding the line:: |
| @@ -888,15 +892,14 @@ Second, the leaf objects must be allocated on ``leaf_ap`` instead of | |||
| 888 | 892 | ||
| 889 | /* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to | 893 | /* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to |
| 890 | manage the leaf objects. */ | 894 | manage the leaf objects. */ |
| 891 | res = mps_pool_create(&leaf_pool, | 895 | res = mps_pool_create_k(&leaf_pool, arena, mps_class_amcz(), |
| 892 | arena, | 896 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = obj_chain}, |
| 893 | mps_class_amcz(), | 897 | {MPS_KEY_FORMAT, .val.format = obj_fmt}, |
| 894 | obj_fmt, | 898 | {MPS_KEY_ARGS_END}}); |
| 895 | obj_chain); | ||
| 896 | if (res != MPS_RES_OK) error("Couldn't create leaf pool"); | 899 | if (res != MPS_RES_OK) error("Couldn't create leaf pool"); |
| 897 | 900 | ||
| 898 | /* Create allocation point for leaf objects. */ | 901 | /* Create allocation point for leaf objects. */ |
| 899 | res = mps_ap_create(&leaf_ap, leaf_pool); | 902 | res = mps_ap_create_k(&leaf_ap, leaf_pool, mps_args_none); |
| 900 | if (res != MPS_RES_OK) error("Couldn't create leaf objects allocation point"); | 903 | if (res != MPS_RES_OK) error("Couldn't create leaf objects allocation point"); |
| 901 | 904 | ||
| 902 | Note that the new pool shared a :term:`generation chain` with the old | 905 | Note that the new pool shared a :term:`generation chain` with the old |
diff --git a/mps/manual/html/_sources/guide/lang.txt b/mps/manual/html/_sources/guide/lang.txt index 3186774685f..edaee742830 100644 --- a/mps/manual/html/_sources/guide/lang.txt +++ b/mps/manual/html/_sources/guide/lang.txt | |||
| @@ -155,24 +155,32 @@ rather than having to pass it around everywhere:: | |||
| 155 | 155 | ||
| 156 | static mps_arena_t arena; | 156 | static mps_arena_t arena; |
| 157 | 157 | ||
| 158 | Create an arena by calling :c:func:`mps_arena_create`. This function | 158 | Create an arena by calling :c:func:`mps_arena_create_k`. This function |
| 159 | takes a third argument when creating a virtual memory arena: the size of | 159 | takes a :term:`keyword argument` when creating a virtual memory arena: |
| 160 | the amount of virtual virtual :term:`address space` (*not* :term:`RAM`), | 160 | the size of virtual :term:`address space` (*not* :term:`RAM`), in |
| 161 | in bytes, that the arena will reserve initially. The MPS will ask for | 161 | bytes, that the arena will reserve initially. The MPS will ask for |
| 162 | more address space if it runs out, but the more times it has to extend | 162 | more address space if it runs out, but the more times it has to extend |
| 163 | its address space, the less efficient garbage collection will become. | 163 | its address space, the less efficient garbage collection will become. |
| 164 | The MPS works best if you reserve an address space that is several times | 164 | The MPS works best if you reserve an address space that is several |
| 165 | larger than your peak memory usage. | 165 | times larger than your peak memory usage. |
| 166 | |||
| 167 | .. note:: | ||
| 168 | |||
| 169 | Functions in the MPS interface take :term:`keyword arguments` for | ||
| 170 | arguments that are optional, or are only required in some | ||
| 171 | circumstances. These argument are passed in the form of an array | ||
| 172 | of structures of type :c:type:`mps_arg_s`. See | ||
| 173 | :ref:`topic-keyword` for the full details. | ||
| 166 | 174 | ||
| 167 | Let's reserve 32 megabytes:: | 175 | Let's reserve 32 megabytes:: |
| 168 | 176 | ||
| 169 | mps_res_t res; | 177 | mps_res_t res; |
| 170 | res = mps_arena_create(&arena, | 178 | res = mps_arena_create_k(&arena, mps_arena_class_vm(), |
| 171 | mps_arena_class_vm(), | 179 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = 32 * 1024 * 1024}, |
| 172 | (size_t)(32 * 1024 * 1024)); | 180 | {MPS_KEY_ARGS_END}}); |
| 173 | if (res != MPS_RES_OK) error("Couldn't create arena"); | 181 | if (res != MPS_RES_OK) error("Couldn't create arena"); |
| 174 | 182 | ||
| 175 | :c:func:`mps_arena_create` is typical of functions in the MPS | 183 | :c:func:`mps_arena_create_k` is typical of functions in the MPS |
| 176 | interface in that it stores its result in a location pointed to by an | 184 | interface in that it stores its result in a location pointed to by an |
| 177 | :term:`out parameter` (here, ``&arena``) and returns a :term:`result | 185 | :term:`out parameter` (here, ``&arena``) and returns a :term:`result |
| 178 | code`, which is :c:macro:`MPS_RES_OK` if the function succeeded, or | 186 | code`, which is :c:macro:`MPS_RES_OK` if the function succeeded, or |
| @@ -762,11 +770,10 @@ Third, the :term:`generation chain`:: | |||
| 762 | And finally the :term:`pool`:: | 770 | And finally the :term:`pool`:: |
| 763 | 771 | ||
| 764 | mps_pool_t obj_pool; | 772 | mps_pool_t obj_pool; |
| 765 | res = mps_pool_create(&obj_pool, | 773 | res = mps_pool_create_k(&obj_pool, arena, mps_class_amc(), |
| 766 | arena, | 774 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = obj_chain}, |
| 767 | mps_class_amc(), | 775 | {MPS_KEY_FORMAT, .val.format = obj_fmt}, |
| 768 | obj_fmt, | 776 | {MPS_KEY_ARGS_END}}); |
| 769 | obj_chain); | ||
| 770 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); | 777 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); |
| 771 | 778 | ||
| 772 | 779 | ||
| @@ -1080,13 +1087,13 @@ may abort. | |||
| 1080 | The MPS solves this problem via the fast, nearly lock-free | 1087 | The MPS solves this problem via the fast, nearly lock-free |
| 1081 | :ref:`topic-allocation-point-protocol`. This needs an additional | 1088 | :ref:`topic-allocation-point-protocol`. This needs an additional |
| 1082 | structure, an :term:`allocation point`, to be attached to the pool by | 1089 | structure, an :term:`allocation point`, to be attached to the pool by |
| 1083 | calling :c:func:`mps_ap_create`:: | 1090 | calling :c:func:`mps_ap_create_k`:: |
| 1084 | 1091 | ||
| 1085 | static mps_ap_t obj_ap; | 1092 | static mps_ap_t obj_ap; |
| 1086 | 1093 | ||
| 1087 | /* ... */ | 1094 | /* ... */ |
| 1088 | 1095 | ||
| 1089 | res = mps_ap_create(&obj_ap, obj_pool, mps_rank_exact()); | 1096 | res = mps_ap_create_k(&obj_ap, obj_pool, mps_args_none); |
| 1090 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); | 1097 | if (res != MPS_RES_OK) error("Couldn't create obj allocation point"); |
| 1091 | 1098 | ||
| 1092 | And then the constructor can be implemented like this:: | 1099 | And then the constructor can be implemented like this:: |
diff --git a/mps/manual/html/_sources/mmref/bib.txt b/mps/manual/html/_sources/mmref/bib.txt index 07845a3701b..aba18413d6e 100644 --- a/mps/manual/html/_sources/mmref/bib.txt +++ b/mps/manual/html/_sources/mmref/bib.txt | |||
| @@ -215,6 +215,14 @@ Bibliography | |||
| 215 | 215 | ||
| 216 | Richard Brooksby. 2002. "`The Memory Pool System: Thirty person-years of memory management development goes Open Source <http://www.ravenbrook.com/project/mps/doc/2002-01-30/ismm2002-paper/>`_". ISMM'02. | 216 | Richard Brooksby. 2002. "`The Memory Pool System: Thirty person-years of memory management development goes Open Source <http://www.ravenbrook.com/project/mps/doc/2002-01-30/ismm2002-paper/>`_". ISMM'02. |
| 217 | 217 | ||
| 218 | * .. _C1990: | ||
| 219 | |||
| 220 | International Standard ISO/IEC 9899:1990. "Programming languages — C". | ||
| 221 | |||
| 222 | * .. _C1999: | ||
| 223 | |||
| 224 | International Standard ISO/IEC 9899:1999. "`Programming languages — C <http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf>`_". | ||
| 225 | |||
| 218 | * .. _CGZ94: | 226 | * .. _CGZ94: |
| 219 | 227 | ||
| 220 | Brad Calder, Dirk Grunwald, Benjamin Zorn. 1994. "`Quantifying Behavioral Differences Between C and C++ Programs <http://cseclassic.ucsd.edu/users/calder/papers/JplVersion.pdf>`_". *Journal of Programming Languages.* 2(4):313--351. | 228 | Brad Calder, Dirk Grunwald, Benjamin Zorn. 1994. "`Quantifying Behavioral Differences Between C and C++ Programs <http://cseclassic.ucsd.edu/users/calder/papers/JplVersion.pdf>`_". *Journal of Programming Languages.* 2(4):313--351. |
diff --git a/mps/manual/html/_sources/mmref/lang.txt b/mps/manual/html/_sources/mmref/lang.txt index fb4473d525e..0d081b82a30 100644 --- a/mps/manual/html/_sources/mmref/lang.txt +++ b/mps/manual/html/_sources/mmref/lang.txt | |||
| @@ -82,7 +82,7 @@ Memory management in various languages | |||
| 82 | 82 | ||
| 83 | .. seealso:: :term:`automatic storage duration`, :term:`static storage duration`. | 83 | .. seealso:: :term:`automatic storage duration`, :term:`static storage duration`. |
| 84 | 84 | ||
| 85 | .. bibref:: :ref:`Boehm & Weiser (1988) <BW88>`, :ref:`Daconta (1993) <DACONTA93>`, :ref:`Zorn (1993) <ZORN93>`. | 85 | .. bibref:: :ref:`ISO/IEC 9899:1990 <C1990>`, :ref:`ISO/IEC 9899:1999 <C1999>`, :ref:`Boehm & Weiser (1988) <BW88>`, :ref:`Daconta (1993) <DACONTA93>`, :ref:`Zorn (1993) <ZORN93>`. |
| 86 | 86 | ||
| 87 | .. link:: | 87 | .. link:: |
| 88 | 88 | ||
diff --git a/mps/manual/html/_sources/pool/amc.txt b/mps/manual/html/_sources/pool/amc.txt index 99a4e49778e..7c6c9927aec 100644 --- a/mps/manual/html/_sources/pool/amc.txt +++ b/mps/manual/html/_sources/pool/amc.txt | |||
| @@ -100,20 +100,36 @@ AMC interface | |||
| 100 | Return the :term:`pool class` for an AMC (Automatic | 100 | Return the :term:`pool class` for an AMC (Automatic |
| 101 | Mostly-Copying) :term:`pool`. | 101 | Mostly-Copying) :term:`pool`. |
| 102 | 102 | ||
| 103 | When creating an AMC pool, :c:func:`mps_pool_create` takes two | 103 | When creating an AMC pool, :c:func:`mps_pool_create_k` requires |
| 104 | extra arguments:: | 104 | two :term:`keyword arguments`: |
| 105 | 105 | ||
| 106 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 106 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 107 | mps_class_t mps_class_amc(), | 107 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 108 | mps_fmt_t fmt, | 108 | objects allocated in the pool. The format must provide a |
| 109 | mps_chain_t chain) | 109 | :term:`scan method`, a :term:`skip method`, a :term:`forward |
| 110 | method`, an :term:`is-forwarded method` and a :term:`padding | ||
| 111 | method`. | ||
| 110 | 112 | ||
| 111 | ``fmt`` specifies the :term:`object format` for the objects | 113 | * :c:macro:`MPS_KEY_CHAIN` (member ``.val.chain``; type |
| 112 | allocated in the pool. The format must provide a :term:`scan | 114 | :c:type:`mps_chain_t`) specifies the :term:`generation chain` |
| 113 | method`, a :term:`skip method`, a :term:`forward method`, an | 115 | for the pool. |
| 114 | :term:`is-forwarded method` and a :term:`padding method`. | ||
| 115 | 116 | ||
| 116 | ``chain`` specifies the :term:`generation chain` for the pool. | 117 | For example, in :term:`C99`:: |
| 118 | |||
| 119 | res = mps_pool_create_k(&pool, arena, mps_class_amc(), | ||
| 120 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = chain}, | ||
| 121 | {MPS_KEY_FORMAT, .val.format = fmt}, | ||
| 122 | {MPS_KEY_ARGS_END}}); | ||
| 123 | |||
| 124 | .. deprecated:: starting with version 1.112. | ||
| 125 | |||
| 126 | When using :c:func:`mps_pool_create`, pass the format and | ||
| 127 | chain like this:: | ||
| 128 | |||
| 129 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 130 | mps_class_t mps_class_amc(), | ||
| 131 | mps_fmt_t fmt, | ||
| 132 | mps_chain_t chain) | ||
| 117 | 133 | ||
| 118 | 134 | ||
| 119 | .. index:: | 135 | .. index:: |
diff --git a/mps/manual/html/_sources/pool/amcz.txt b/mps/manual/html/_sources/pool/amcz.txt index 478173001a8..c3a01202532 100644 --- a/mps/manual/html/_sources/pool/amcz.txt +++ b/mps/manual/html/_sources/pool/amcz.txt | |||
| @@ -59,17 +59,32 @@ AMCZ interface | |||
| 59 | Return the :term:`pool class` for an AMCZ (Automatic | 59 | Return the :term:`pool class` for an AMCZ (Automatic |
| 60 | Mostly-Copying Zero-rank) :term:`pool`. | 60 | Mostly-Copying Zero-rank) :term:`pool`. |
| 61 | 61 | ||
| 62 | When creating an AMCZ pool, :c:func:`mps_pool_create` takes two | 62 | When creating an AMCZ pool, :c:func:`mps_pool_create_k` requires |
| 63 | extra arguments:: | 63 | two :term:`keyword arguments`: |
| 64 | 64 | ||
| 65 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 65 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 66 | mps_class_t mps_class_amcz(), | 66 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 67 | mps_fmt_t fmt, | 67 | objects allocated in the pool. The format must provide a |
| 68 | mps_chain_t chain) | 68 | :term:`skip method`, a :term:`forward method`, an |
| 69 | :term:`is-forwarded method` and a :term:`padding method`. | ||
| 69 | 70 | ||
| 70 | ``fmt`` specifies the :term:`object format` for the objects | 71 | * :c:macro:`MPS_KEY_CHAIN` (member ``.val.chain``; type |
| 71 | allocated in the pool. The format must provide a :term:`skip | 72 | :c:type:`mps_chain_t`) specifies the :term:`generation chain` |
| 72 | method`, a :term:`forward method`, an :term:`is-forwarded method` | 73 | for the pool. |
| 73 | and a :term:`padding method`. | ||
| 74 | 74 | ||
| 75 | ``chain`` specifies the :term:`generation chain` for the pool. | 75 | For example, in :term:`C99`:: |
| 76 | |||
| 77 | res = mps_pool_create_k(&pool, arena, mps_class_amcz(), | ||
| 78 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = chain}, | ||
| 79 | {MPS_KEY_FORMAT, .val.format = fmt}, | ||
| 80 | {MPS_KEY_ARGS_END}}); | ||
| 81 | |||
| 82 | .. deprecated:: starting with version 1.112. | ||
| 83 | |||
| 84 | When using :c:func:`mps_pool_create`, pass the format and | ||
| 85 | chain like this:: | ||
| 86 | |||
| 87 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 88 | mps_class_t mps_class_amcz(), | ||
| 89 | mps_fmt_t fmt, | ||
| 90 | mps_chain_t chain) | ||
diff --git a/mps/manual/html/_sources/pool/ams.txt b/mps/manual/html/_sources/pool/ams.txt index ec0a9799b7b..0e9cac244c6 100644 --- a/mps/manual/html/_sources/pool/ams.txt +++ b/mps/manual/html/_sources/pool/ams.txt | |||
| @@ -103,20 +103,34 @@ AMS interface | |||
| 103 | Return the :term:`pool class` for an AMS (Automatic Mark & Sweep) | 103 | Return the :term:`pool class` for an AMS (Automatic Mark & Sweep) |
| 104 | :term:`pool`. | 104 | :term:`pool`. |
| 105 | 105 | ||
| 106 | When creating an AMS pool, :c:func:`mps_pool_create` takes two | 106 | When creating an AMS pool, :c:func:`mps_pool_create_k` requires |
| 107 | extra arguments:: | 107 | two :term:`keyword arguments`: |
| 108 | 108 | ||
| 109 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 109 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 110 | mps_class_t mps_class_ams(), | 110 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 111 | mps_fmt_t fmt, | 111 | objects allocated in the pool. The format must provide a |
| 112 | mps_chain_t chain) | 112 | :term:`scan method` and a :term:`skip method`. |
| 113 | 113 | ||
| 114 | ``fmt`` specifies the :term:`object format` for the objects | 114 | * :c:macro:`MPS_KEY_CHAIN` (member ``.val.chain``; type |
| 115 | allocated in the pool. The format must provide a :term:`scan | 115 | :c:type:`mps_chain_t`) specifies the :term:`generation chain` |
| 116 | method` and a :term:`skip method`. | 116 | for the pool. It must have a single generation. |
| 117 | 117 | ||
| 118 | ``chain`` specifies the :term:`generation chain` for the pool. It | 118 | For example, in :term:`C99`:: |
| 119 | must have a single generation. | 119 | |
| 120 | res = mps_pool_create_k(&pool, arena, mps_class_ams(), | ||
| 121 | (mps_arg_s[]){{MPS_KEY_CHAIN, .val.chain = chain}, | ||
| 122 | {MPS_KEY_FORMAT, .val.format = fmt}, | ||
| 123 | {MPS_KEY_ARGS_END}}); | ||
| 124 | |||
| 125 | .. deprecated:: starting with version 1.112. | ||
| 126 | |||
| 127 | When using :c:func:`mps_pool_create`, pass the format and | ||
| 128 | chain like this:: | ||
| 129 | |||
| 130 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 131 | mps_class_t mps_class_ams(), | ||
| 132 | mps_fmt_t fmt, | ||
| 133 | mps_chain_t chain) | ||
| 120 | 134 | ||
| 121 | 135 | ||
| 122 | .. c:function:: mps_class_t mps_class_ams_debug(void) | 136 | .. c:function:: mps_class_t mps_class_ams_debug(void) |
| @@ -124,16 +138,19 @@ AMS interface | |||
| 124 | A :ref:`debugging <topic-debugging>` version of the AMS pool | 138 | A :ref:`debugging <topic-debugging>` version of the AMS pool |
| 125 | class. | 139 | class. |
| 126 | 140 | ||
| 127 | When creating a debugging AMS pool, :c:func:`mps_pool_create` | 141 | When creating a debugging AMS pool, :c:func:`mps_pool_create_k` |
| 128 | takes three extra arguments:: | 142 | requires three keyword arguments: :c:macro:`MPS_KEY_FORMAT` and |
| 143 | :c:macro:`MPS_KEY_CHAIN` are as described above, and | ||
| 144 | :c:macro:`MPS_KEY_POOL_DEBUG_OPTIONS` specifies the debugging | ||
| 145 | options. See :c:type:`mps_debug_option_s`. | ||
| 129 | 146 | ||
| 130 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 147 | .. deprecated:: starting with version 1.112. |
| 131 | mps_class_t mps_class_ams_debug(), | ||
| 132 | mps_debug_option_s debug_option, | ||
| 133 | mps_fmt_t fmt, | ||
| 134 | mps_chain_t chain) | ||
| 135 | 148 | ||
| 136 | ``debug_option`` specifies the debugging options. See | 149 | When using :c:func:`mps_pool_create`, pass the format, |
| 137 | :c:type:`mps_debug_option_s`. | 150 | chain, and debugging options like this:: |
| 138 | 151 | ||
| 139 | ``fmt`` and ``chain`` are the same as for :c:func:`mps_class_ams`. | 152 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, |
| 153 | mps_class_t mps_class_ams_debug(), | ||
| 154 | mps_debug_option_s debug_option, | ||
| 155 | mps_fmt_t fmt, | ||
| 156 | mps_chain_t chain) | ||
diff --git a/mps/manual/html/_sources/pool/awl.txt b/mps/manual/html/_sources/pool/awl.txt index 8ed131653da..61bbd202eed 100644 --- a/mps/manual/html/_sources/pool/awl.txt +++ b/mps/manual/html/_sources/pool/awl.txt | |||
| @@ -318,34 +318,59 @@ AWL interface | |||
| 318 | Return the :term:`pool class` for an AWL (Automatic Weak Linked) | 318 | Return the :term:`pool class` for an AWL (Automatic Weak Linked) |
| 319 | :term:`pool`. | 319 | :term:`pool`. |
| 320 | 320 | ||
| 321 | When creating an AWL pool, :c:func:`mps_pool_create` takes two | 321 | When creating an AWL pool, :c:func:`mps_pool_create_k` requires |
| 322 | extra arguments:: | 322 | two :term:`keyword arguments`: |
| 323 | 323 | ||
| 324 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 324 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 325 | mps_class_t mps_class_awl(), | 325 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 326 | mps_fmt_t fmt, | 326 | objects allocated in the pool. The format must provide a :term:`scan |
| 327 | mps_awl_find_dependent_t find_dependent) | 327 | method` and a :term:`skip method`. |
| 328 | 328 | ||
| 329 | ``fmt`` specifies the :term:`object format` for the objects | 329 | * :c:macro:`MPS_KEY_AWL_FIND_DEPENDENT` (member |
| 330 | allocated in the pool. The format must provide a :term:`scan | 330 | ``.val.addr_method``; type :c:type:`mps_awl_find_dependent_t`) |
| 331 | method` and a :term:`skip method`. | 331 | is a function that specifies how to find the :term:`dependent |
| 332 | 332 | object` for an object in the pool. | |
| 333 | ``find_dependent`` is a function of type | 333 | |
| 334 | :c:type:`mps_awl_find_dependent_t` that specifies how to find the | 334 | For example, in :term:`C99`:: |
| 335 | :term:`dependent object` for an object in the pool. | 335 | |
| 336 | 336 | res = mps_pool_create_k(&pool, arena, mps_class_awl(), | |
| 337 | When creating an allocation point on an AWL pool, | 337 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = fmt}, |
| 338 | :c:func:`mps_ap_create` takes one extra argument:: | 338 | {MPS_KEY_AWL_FIND_DEPENDENT, .val.addr_method = find_dependent}, |
| 339 | 339 | {MPS_KEY_ARGS_END}}); | |
| 340 | mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, | 340 | |
| 341 | mps_rank_t rank) | 341 | .. deprecated:: starting with version 1.112. |
| 342 | 342 | ||
| 343 | ``rank`` specifies the :term:`rank` of references in objects | 343 | When using :c:func:`mps_pool_create`, pass the format and |
| 344 | allocated on this allocation point. It must be | 344 | find-dependent function like this:: |
| 345 | :c:func:`mps_rank_exact` (if the objects allocated on this | 345 | |
| 346 | allocation point will contain :term:`exact references`), or | 346 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, |
| 347 | :c:func:`mps_rank_weak` (if the objects will contain :term:`weak | 347 | mps_class_t mps_class_awl(), |
| 348 | references (1)`). | 348 | mps_fmt_t fmt, |
| 349 | mps_awl_find_dependent_t find_dependent) | ||
| 350 | |||
| 351 | When creating an :term:`allocation point` on an AWL pool, | ||
| 352 | :c:func:`mps_ap_create_k` requires one keyword argument: | ||
| 353 | |||
| 354 | * :c:macro:`MPS_KEY_RANK` (member ``.val.rank``; type | ||
| 355 | :c:type:`mps_rank_t`) specifies the :term:`rank` of references | ||
| 356 | in objects allocated on this allocation point. It must be | ||
| 357 | :c:func:`mps_rank_exact` (if the objects allocated on this | ||
| 358 | allocation point will contain :term:`exact references`), or | ||
| 359 | :c:func:`mps_rank_weak` (if the objects will contain :term:`weak | ||
| 360 | references (1)`). | ||
| 361 | |||
| 362 | For example, in :term:`C99`:: | ||
| 363 | |||
| 364 | res = mps_ap_create_k(&ap, awl_pool, | ||
| 365 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_weak()}, | ||
| 366 | {MPS_KEY_ARGS_END}}); | ||
| 367 | |||
| 368 | .. deprecated:: starting with version 1.112. | ||
| 369 | |||
| 370 | When using :c:func:`mps_ap_create`, pass the rank like this:: | ||
| 371 | |||
| 372 | mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, | ||
| 373 | mps_rank_t rank) | ||
| 349 | 374 | ||
| 350 | 375 | ||
| 351 | .. c:type:: mps_addr_t (*mps_awl_find_dependent_t)(mps_addr_t addr) | 376 | .. c:type:: mps_addr_t (*mps_awl_find_dependent_t)(mps_addr_t addr) |
diff --git a/mps/manual/html/_sources/pool/lo.txt b/mps/manual/html/_sources/pool/lo.txt index 20e02c82a54..dad1997a4a1 100644 --- a/mps/manual/html/_sources/pool/lo.txt +++ b/mps/manual/html/_sources/pool/lo.txt | |||
| @@ -105,13 +105,25 @@ LO interface | |||
| 105 | Return the :term:`pool class` for an LO (Leaf Object) | 105 | Return the :term:`pool class` for an LO (Leaf Object) |
| 106 | :term:`pool`. | 106 | :term:`pool`. |
| 107 | 107 | ||
| 108 | When creating an LO pool, :c:func:`mps_pool_create` takes one | 108 | When creating an LO pool, :c:func:`mps_pool_create_k` require one |
| 109 | extra argument:: | 109 | :term:`keyword argument`: |
| 110 | 110 | ||
| 111 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 111 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 112 | mps_class_t mps_class_lo(), | 112 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 113 | mps_fmt_t fmt) | 113 | objects allocated in the pool. The format must provide a :term:`skip |
| 114 | method`. | ||
| 114 | 115 | ||
| 115 | ``fmt`` specifies the :term:`object format` for the objects | 116 | For example, in :term:`C99`:: |
| 116 | allocated in the pool. The format must provide a :term:`skip | 117 | |
| 117 | method`. | 118 | res = mps_pool_create_k(&pool, arena, mps_class_lo(), |
| 119 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = fmt}, | ||
| 120 | {MPS_KEY_ARGS_END}}); | ||
| 121 | |||
| 122 | .. deprecated:: starting with version 1.112. | ||
| 123 | |||
| 124 | When using :c:func:`mps_pool_create`, pass the format like | ||
| 125 | this:: | ||
| 126 | |||
| 127 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 128 | mps_class_t mps_class_lo(), | ||
| 129 | mps_fmt_t fmt) | ||
diff --git a/mps/manual/html/_sources/pool/mfs.txt b/mps/manual/html/_sources/pool/mfs.txt index b98928762e4..9c6bf500f7d 100644 --- a/mps/manual/html/_sources/pool/mfs.txt +++ b/mps/manual/html/_sources/pool/mfs.txt | |||
| @@ -77,19 +77,35 @@ MFS interface | |||
| 77 | Return the :term:`pool class` for an MFS (Manual Fixed Small) | 77 | Return the :term:`pool class` for an MFS (Manual Fixed Small) |
| 78 | :term:`pool`. | 78 | :term:`pool`. |
| 79 | 79 | ||
| 80 | When creating an MFS pool, :c:func:`mps_pool_create` takes two | 80 | When creating an MFS pool, :c:func:`mps_pool_create_k` requires |
| 81 | extra arguments:: | 81 | two :term:`keyword arguments`: |
| 82 | 82 | ||
| 83 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 83 | * :c:macro:`MPS_KEY_MFS_UNIT_SIZE` (member ``.val.size``; type |
| 84 | mps_class_t mps_class_mfs(), | 84 | :c:type:`size_t`) is the :term:`size` of blocks that will be |
| 85 | mps_size_t extend_size, | 85 | allocated from this pool, in :term:`bytes (1)`. It must be at |
| 86 | mps_size_t unit_size) | 86 | least one :term:`word`. |
| 87 | 87 | ||
| 88 | ``extend_size`` is the :term:`size` of segment that the pool will | 88 | * :c:macro:`MPS_KEY_EXTEND_BY` (member ``.val.size``; type |
| 89 | request from the :term:`arena`. It must be at least as big as | 89 | :c:type:`size_t`) is the :term:`size` of segment that the pool |
| 90 | ``unit_size``. If this is not a multiple of ``unit_size``, there | 90 | will request from the :term:`arena`. It must be at least as big |
| 91 | will be wasted space in each segment. | 91 | as the unit size specified by the |
| 92 | 92 | :c:macro:`MPS_KEY_MFS_UNIT_SIZE` keyword argument. If this is | |
| 93 | ``unit_size`` is the :term:`size` of blocks that will be allocated | 93 | not a multiple of the unit size, there will be wasted space in |
| 94 | from this pool, in :term:`bytes (1)`. It must be at least one | 94 | each segment. |
| 95 | :term:`word`. | 95 | |
| 96 | For example, in :term:`C99`:: | ||
| 97 | |||
| 98 | res = mps_pool_create_k(&pool, arena, mps_class_mfs(), | ||
| 99 | (mps_arg_s[]){{MPS_KEY_MFS_UNIT_SIZE, .val.size = 1024}, | ||
| 100 | {MPS_KEY_EXTEND_BY, .val.size = 1024 * 1024}, | ||
| 101 | {MPS_KEY_ARGS_END}}); | ||
| 102 | |||
| 103 | .. deprecated:: starting with version 1.112. | ||
| 104 | |||
| 105 | When using :c:func:`mps_pool_create`, pass the segment size and | ||
| 106 | unit size like this:: | ||
| 107 | |||
| 108 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 109 | mps_class_t mps_class_mfs(), | ||
| 110 | mps_size_t extend_size, | ||
| 111 | mps_size_t unit_size) | ||
diff --git a/mps/manual/html/_sources/pool/mv.txt b/mps/manual/html/_sources/pool/mv.txt index c0a5f90cc39..dccb5abe0ee 100644 --- a/mps/manual/html/_sources/pool/mv.txt +++ b/mps/manual/html/_sources/pool/mv.txt | |||
| @@ -72,22 +72,42 @@ MV interface | |||
| 72 | Return the :term:`pool class` for an MV (Manual Variable) | 72 | Return the :term:`pool class` for an MV (Manual Variable) |
| 73 | :term:`pool`. | 73 | :term:`pool`. |
| 74 | 74 | ||
| 75 | When creating an MV pool, :c:func:`mps_pool_create` takes three | 75 | When creating an MV pool, :c:func:`mps_pool_create_k` requires |
| 76 | extra arguments:: | 76 | three :term:`keyword arguments`: |
| 77 | 77 | ||
| 78 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 78 | * :c:macro:`MPS_KEY_EXTEND_BY` (member ``.val.size``; type |
| 79 | mps_class_t mps_class_mv(), | 79 | :c:type:`size_t`) is the :term:`size` of segment that the pool |
| 80 | mps_size_t extend_size, | 80 | will request from the :term:`arena`. |
| 81 | mps_size_t average_size, | ||
| 82 | mps_size_t maximum_size) | ||
| 83 | 81 | ||
| 84 | ``extend_size`` is the :term:`size` of segment that the pool will | 82 | * :c:macro:`MPS_KEY_MEAN_SIZE` (member ``.val.size``; type |
| 85 | request from the :term:`arena`. | 83 | :c:type:`size_t`) is the predicted mean size of blocks that |
| 84 | will be allocated from the pool. | ||
| 86 | 85 | ||
| 87 | ``average_size`` and ``maximum size`` are the predicted average | 86 | * :c:macro:`MPS_KEY_MAX_SIZE` (member ``.val.size``; type |
| 88 | and maximum size of blocks that will be allocated from the pool. | 87 | :c:type:`size_t`) is the predicted maximum size of blocks that |
| 89 | These are hints to the MPS: the pool will be less efficient if | 88 | will be allocated from the pool. |
| 90 | these are wrong. | 89 | |
| 90 | The mean and maximum sizes are *hints* to the MPS: the pool will be | ||
| 91 | less efficient if these are wrong, but nothing will break. | ||
| 92 | |||
| 93 | For example, in :term:`C99`:: | ||
| 94 | |||
| 95 | res = mps_pool_create_k(&pool, arena, mps_class_mfs(), | ||
| 96 | (mps_arg_s[]){{MPS_KEY_MEAN_SIZE, .val.size = 32}, | ||
| 97 | {MPS_KEY_MAX_SIZE, .val.size = 1024}, | ||
| 98 | {MPS_KEY_EXTEND_BY, .val.size = 1024 * 1024}, | ||
| 99 | {MPS_KEY_ARGS_END}}); | ||
| 100 | |||
| 101 | .. deprecated:: starting with version 1.112. | ||
| 102 | |||
| 103 | When using :c:func:`mps_pool_create`, pass the segment size, | ||
| 104 | mean size, and maximum size like this:: | ||
| 105 | |||
| 106 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 107 | mps_class_t mps_class_mv(), | ||
| 108 | mps_size_t extend_size, | ||
| 109 | mps_size_t average_size, | ||
| 110 | mps_size_t maximum_size) | ||
| 91 | 111 | ||
| 92 | 112 | ||
| 93 | .. c:function:: mps_class_t mps_class_mv_debug(void) | 113 | .. c:function:: mps_class_t mps_class_mv_debug(void) |
| @@ -95,21 +115,23 @@ MV interface | |||
| 95 | A :ref:`debugging <topic-debugging>` version of the MV pool | 115 | A :ref:`debugging <topic-debugging>` version of the MV pool |
| 96 | class. | 116 | class. |
| 97 | 117 | ||
| 98 | When creating a debugging MV pool, :c:func:`mps_pool_create` | 118 | When creating a debugging MV pool, :c:func:`mps_pool_create_k` |
| 99 | takes four extra arguments:: | 119 | requires four keyword arguments: :c:macro:`MPS_KEY_EXTEND_SIZE`, |
| 120 | :c:macro:`MPS_KEY_MEAN_SIZE`, :c:macro:`MPS_KEY_MAX_SIZE` are as | ||
| 121 | described above, and :c:macro:`MPS_KEY_POOL_DEBUG_OPTIONS` | ||
| 122 | specifies the debugging options. See :c:type:`mps_debug_option_s`. | ||
| 100 | 123 | ||
| 101 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 124 | .. deprecated:: starting with version 1.112. |
| 102 | mps_class_t mps_class_mv_debug(), | ||
| 103 | mps_debug_option_s debug_option, | ||
| 104 | mps_size_t extend_size, | ||
| 105 | mps_size_t average_size, | ||
| 106 | mps_size_t maximum_size) | ||
| 107 | 125 | ||
| 108 | ``debug_option`` specifies the debugging options. See | 126 | When using :c:func:`mps_pool_create`, pass the debugging |
| 109 | :c:type:`mps_debug_option_s`. | 127 | options, segment size, mean size, and maximum size like this:: |
| 110 | 128 | ||
| 111 | ``extend_size``, ``average_size`` and ``maximum_size`` are as | 129 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, |
| 112 | documented in :c:func:`mps_class_mv`. | 130 | mps_class_t mps_class_mv_debug(), |
| 131 | mps_debug_option_s debug_option, | ||
| 132 | mps_size_t extend_size, | ||
| 133 | mps_size_t average_size, | ||
| 134 | mps_size_t maximum_size) | ||
| 113 | 135 | ||
| 114 | 136 | ||
| 115 | .. index:: | 137 | .. index:: |
diff --git a/mps/manual/html/_sources/pool/mvff.txt b/mps/manual/html/_sources/pool/mvff.txt index 135525b3351..df91ab9007c 100644 --- a/mps/manual/html/_sources/pool/mvff.txt +++ b/mps/manual/html/_sources/pool/mvff.txt | |||
| @@ -112,37 +112,62 @@ MVFF interface | |||
| 112 | Return the :term:`pool class` for an MVFF (Manual Variable First | 112 | Return the :term:`pool class` for an MVFF (Manual Variable First |
| 113 | Fit) :term:`pool`. | 113 | Fit) :term:`pool`. |
| 114 | 114 | ||
| 115 | When creating an MVFF pool, :c:func:`mps_pool_create` takes six | 115 | When creating an MVFF pool, :c:func:`mps_pool_create_k` requires |
| 116 | extra arguments:: | 116 | six :term:`keyword arguments`: |
| 117 | 117 | ||
| 118 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 118 | * :c:macro:`MPS_KEY_EXTEND_BY` (member ``.val.size``; type |
| 119 | mps_class_t mps_class_mvff(), | 119 | :c:type:`size_t`) is the :term:`size` of segment that the pool |
| 120 | mps_size_t extend_size, | 120 | will request from the :term:`arena`. |
| 121 | mps_size_t average_size, | 121 | |
| 122 | mps_align_t alignment, | 122 | * :c:macro:`MPS_KEY_MEAN_SIZE` (member ``.val.size``; type |
| 123 | mps_bool_t slot_high, | 123 | :c:type:`size_t`) is the predicted mean size of blocks that will |
| 124 | mps_bool_t arena_high, | 124 | be allocated from the pool. This is a *hint* to the MPS: the |
| 125 | mps_bool_t first_fit) | 125 | pool will be less efficient if this is wrong, but nothing will |
| 126 | 126 | break. | |
| 127 | ``extend_size`` is the :term:`size` of segment that the pool will | 127 | |
| 128 | request from the :term:`arena`. | 128 | * :c:macro:`MPS_KEY_ALIGN` (member ``.val.align``; type |
| 129 | 129 | :c:type:`mps_align_t`) is the :term:`alignment` of addresses for | |
| 130 | ``average_size`` is the predicted average size of blocks that will | 130 | allocation (and freeing) in the pool. If an unaligned size is |
| 131 | be allocated from the pool. | 131 | passed to :c:func:`mps_alloc` or :c:func:`mps_free`, it will be |
| 132 | 132 | rounded up to the pool's alignment. The minimum alignment | |
| 133 | ``alignment`` is the :term:`alignment` of addresses for allocation | 133 | supported by pools of this class is ``sizeof(void *)``. |
| 134 | (and freeing) in the pool. If an unaligned size is passed to | 134 | |
| 135 | :c:func:`mps_alloc` or :c:func:`mps_free`, it will be rounded up | 135 | * :c:macro:`MPS_KEY_MVFF_ARENA_HIGH` (member ``.val.b``; type |
| 136 | to the pool's alignment. The minimum alignment supported by pools | 136 | :c:type:`mps_bool_t`) indicates whether new segments for |
| 137 | of this class is ``sizeof(void *)``. | 137 | buffered allocation are acquired at high addresses (if true), or |
| 138 | 138 | at low addresses (if false). | |
| 139 | ``slot_high`` is undocumented. It must have the same value as | 139 | |
| 140 | ``arena_high``. | 140 | * :c:macro:`MPS_KEY_MVFF_SLOT_HIGH` (member ``.val.b``; type |
| 141 | 141 | :c:type:`mps_bool_t`) is undocumented. It must have the same | |
| 142 | If ``arena_high`` is true, new segments for buffered allocation | 142 | value as :c:macro:`MPS_KEY_MVFF_ARENA_HIGH`. |
| 143 | are acquired at high addresses; if false, at low addresses. | 143 | |
| 144 | 144 | * :c:macro:`MPS_KEY_MVFF_FIRST_FIT` (member ``.val.b``; type | |
| 145 | ``first_fit`` is undocumented and must be set to true. | 145 | :c:type:`mps_bool_t`) is undocumented and must be set to true. |
| 146 | |||
| 147 | For example, in :term:`C99`:: | ||
| 148 | |||
| 149 | res = mps_pool_create_k(&pool, arena, mps_class_mvff(), | ||
| 150 | (mps_arg_s[]){{MPS_KEY_EXTEND_BY, .val.size = }, | ||
| 151 | {MPS_KEY_MEAN_SIZE, .val.size = }, | ||
| 152 | {MPS_KEY_ALIGN, .val.align = }, | ||
| 153 | {MPS_KEY_MVFF_ARENA_HIGH, .val.b = 0}, | ||
| 154 | {MPS_KEY_MVFF_SLOT_HIGH, .val.b = 0}, | ||
| 155 | {MPS_KEY_MVFF_FIRST_FIT, .val.b = 1}, | ||
| 156 | {MPS_KEY_ARGS_END}}); | ||
| 157 | |||
| 158 | .. deprecated:: starting with version 1.112. | ||
| 159 | |||
| 160 | When using :c:func:`mps_pool_create`, pass the arguments like | ||
| 161 | this:: | ||
| 162 | |||
| 163 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 164 | mps_class_t mps_class_mvff(), | ||
| 165 | mps_size_t extend_size, | ||
| 166 | mps_size_t average_size, | ||
| 167 | mps_align_t alignment, | ||
| 168 | mps_bool_t slot_high, | ||
| 169 | mps_bool_t arena_high, | ||
| 170 | mps_bool_t first_fit) | ||
| 146 | 171 | ||
| 147 | 172 | ||
| 148 | .. c:function:: mps_class_t mps_class_mvff_debug(void) | 173 | .. c:function:: mps_class_t mps_class_mvff_debug(void) |
| @@ -150,23 +175,30 @@ MVFF interface | |||
| 150 | A :ref:`debugging <topic-debugging>` version of the MVFF pool | 175 | A :ref:`debugging <topic-debugging>` version of the MVFF pool |
| 151 | class. | 176 | class. |
| 152 | 177 | ||
| 153 | When creating a debugging MVFF pool, :c:func:`mps_pool_create` | 178 | When creating a debugging MVFF pool, :c:func:`mps_pool_create_k` |
| 154 | takes seven extra arguments:: | 179 | requires seven :term:`keyword arguments`. |
| 155 | 180 | ||
| 156 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 181 | * :c:macro:`MPS_KEY_EXTEND_BY`, :c:macro:`MPS_KEY_MEAN_SIZE`, |
| 157 | mps_class_t mps_class_mvff_debug(), | 182 | :c:macro:`MPS_KEY_ALIGN`, :c:macro:`MPS_KEY_MVFF_ARENA_HIGH`, |
| 158 | mps_debug_option_s debug_option, | 183 | :c:macro:`MPS_KEY_MVFF_SLOT_HIGH`, and |
| 159 | mps_size_t extend_size, | 184 | :c:macro:`MPS_KEY_MVFF_FIRST_FIT` are as described above, and |
| 160 | mps_size_t average_size, | 185 | :c:macro:`MPS_KEY_POOL_DEBUG_OPTIONS` specifies the debugging |
| 161 | mps_align_t alignment, | 186 | :c:options. See :c:type:`mps_debug_option_s`. |
| 162 | mps_bool_t slot_high, | 187 | |
| 163 | mps_bool_t arena_high, | 188 | .. deprecated:: starting with version 1.112. |
| 164 | mps_bool_t first_fit) | 189 | |
| 165 | 190 | When using :c:func:`mps_pool_create`, pass the debugging | |
| 166 | ``debug_option`` specifies the debugging options. See | 191 | options, and other arguments like this:: |
| 167 | :c:type:`mps_debug_option_s`. | 192 | |
| 168 | 193 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | |
| 169 | The other arguments are the same as for :c:func:`mps_class_mvff`. | 194 | mps_class_t mps_class_mvff_debug(), |
| 195 | mps_debug_option_s debug_option, | ||
| 196 | mps_size_t extend_size, | ||
| 197 | mps_size_t average_size, | ||
| 198 | mps_align_t alignment, | ||
| 199 | mps_bool_t slot_high, | ||
| 200 | mps_bool_t arena_high, | ||
| 201 | mps_bool_t first_fit) | ||
| 170 | 202 | ||
| 171 | 203 | ||
| 172 | .. index:: | 204 | .. index:: |
diff --git a/mps/manual/html/_sources/pool/mvt.txt b/mps/manual/html/_sources/pool/mvt.txt index 6fd51db85d9..b670c96998e 100644 --- a/mps/manual/html/_sources/pool/mvt.txt +++ b/mps/manual/html/_sources/pool/mvt.txt | |||
| @@ -112,70 +112,95 @@ MVT interface | |||
| 112 | Return the :term:`pool class` for an MVT (Manual Variable | 112 | Return the :term:`pool class` for an MVT (Manual Variable |
| 113 | Temporal) :term:`pool`. | 113 | Temporal) :term:`pool`. |
| 114 | 114 | ||
| 115 | When creating an MVT pool, :c:func:`mps_pool_create` takes five | 115 | When creating an MVT pool, :c:func:`mps_pool_create_k` requires |
| 116 | extra arguments:: | 116 | five :term:`keyword arguments`: |
| 117 | 117 | ||
| 118 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 118 | * :c:macro:`MPS_KEY_MIN_SIZE` (member ``.val.size``; type |
| 119 | mps_class_t mps_class_mvt(), | 119 | :c:type:`size_t`) is the predicted minimum size of blocks that |
| 120 | size_t minimum_size, | 120 | will be allocated from the pool. |
| 121 | size_t mean_size, | 121 | |
| 122 | size_t maximum_size, | 122 | * :c:macro:`MPS_KEY_MEAN_SIZE` (member ``.val.size``; type |
| 123 | mps_count_t reserve_depth, | 123 | :c:type:`size_t`) is the predicted mean size of blocks that will |
| 124 | mps_count_t fragmentation_limit) | 124 | be allocated from the pool. |
| 125 | 125 | ||
| 126 | ``minimum_size``, ``mean_size``, and ``maximum_size`` are the | 126 | * :c:macro:`MPS_KEY_MAX_SIZE` (member ``.val.size``; type |
| 127 | predicted minimum, mean, and maximum :term:`size` of | 127 | :c:type:`size_t`) is the predicted maximum size of blocks that |
| 128 | :term:`blocks` expected to be allocated in the pool. Blocks | 128 | will be allocated from the pool. Partial freeing is not |
| 129 | smaller than ``minimum_size`` and larger than ``maximum_size`` may | 129 | supported for blocks larger than this; doing so will |
| 130 | be allocated, but the pool is not guaranteed to manage them | 130 | result in the storage of the block never being reused. |
| 131 | space-efficiently. Furthermore, partial freeing is not supported | 131 | |
| 132 | for blocks larger than ``maximum_size``; doing so will result in | 132 | These three arguments are *hints* to the MPS: the pool will be |
| 133 | the storage of the block never being reused. ``mean_size`` need | 133 | less efficient if they are wrong, but the only thing that will |
| 134 | not be an accurate mean, although the pool will manage | 134 | break is the partial freeing of large blocks. |
| 135 | ``mean_size`` blocks more efficiently if it is. | 135 | |
| 136 | 136 | * :c:macro:`MPS_KEY_MVT_RESERVE_DEPTH` (member ``.val.count``; | |
| 137 | ``reserve_depth`` is the expected hysteresis of the population of | 137 | type :c:type:`mps_count_t`) is the expected hysteresis of the |
| 138 | the pool. When blocks are freed, the pool will retain sufficient | 138 | population of the pool. When blocks are freed, the pool will |
| 139 | storage to allocate ``reserve_depth`` blocks of ``mean_size`` for | 139 | retain sufficient storage to allocate this many blocks of the mean |
| 140 | near term allocations (rather than immediately making that storage | 140 | size for near term allocations (rather than immediately making |
| 141 | available to other pools). | 141 | that storage available to other pools). |
| 142 | 142 | ||
| 143 | If a pool has a stable population, or one which only grows over | 143 | If a pool has a stable population, or one which only grows over |
| 144 | the lifetime of the pool, or one which grows steadily and then | 144 | the lifetime of the pool, or one which grows steadily and then |
| 145 | shrinks steadily, use a reserve depth of 0. | 145 | shrinks steadily, use a reserve depth of 0. |
| 146 | 146 | ||
| 147 | It is always safe to use a reserve depth of 0, but if the | 147 | It is always safe to use a reserve depth of 0, but if the |
| 148 | population typically fluctuates in a range (for example, the | 148 | population typically fluctuates in a range (for example, the |
| 149 | client program repeatedly creates and destroys a subset of blocks | 149 | client program repeatedly creates and destroys a subset of |
| 150 | in a loop), it is more efficient for the pool to retain enough | 150 | blocks in a loop), it is more efficient for the pool to retain |
| 151 | storage to satisfy that fluctuation. For example, if a pool has an | 151 | enough storage to satisfy that fluctuation. For example, if a |
| 152 | object population that typically fluctuates between 8,000 and | 152 | pool has an object population that typically fluctuates between |
| 153 | 10,000, use a reserve depth of 2,000. | 153 | 8,000 and 10,000, use a reserve depth of 2,000. |
| 154 | 154 | ||
| 155 | The reserve will not normally be available to other pools for | 155 | The reserve will not normally be available to other pools for |
| 156 | allocation, even when it is not used by the pool. If this is | 156 | allocation, even when it is not used by the pool. If this is |
| 157 | undesirable, a reserve depth of 0 may be used for a pool whose | 157 | undesirable, a reserve depth of 0 may be used for a pool whose |
| 158 | object population does vary, at a slight cost in efficiency. The | 158 | object population does vary, at a slight cost in efficiency. The |
| 159 | reserve does not guarantee any particular amount of allocation. | 159 | reserve does not guarantee any particular amount of allocation. |
| 160 | 160 | ||
| 161 | ``fragmentation_limit`` is a percentage from 1 to 100 (inclusive). | 161 | * :c:macro:`MPS_KEY_MVT_FRAG_LIMIT` (member ``.val.count``; type |
| 162 | It sets an upper limit on the space overhead of MVT, in case block | 162 | :c:type:`mps_count_t`) is a percentage from 1 to 100 |
| 163 | death times and allocations do not correlate well. If the free | 163 | (inclusive). It sets an upper limit on the space overhead of an |
| 164 | space managed by the pool as a ratio of all the space managed by | 164 | MVT pool, in case block death times and allocations do not |
| 165 | the pool exceeds ``fragmentation_limit``, the pool falls back to a | 165 | correlate well. If the free space managed by the pool as a ratio |
| 166 | first fit allocation policy, exploiting space more efficiently at | 166 | of all the space managed by the pool exceeds the fragmentation |
| 167 | a cost in time efficiency. A fragmentation limit of 0 would cause | 167 | limit, the pool falls back to a first fit allocation policy, |
| 168 | the pool to operate as a first-fit pool, at a significant cost in | 168 | exploiting space more efficiently at a cost in time efficiency. |
| 169 | time efficiency: therefore this is not permitted. | 169 | A fragmentation limit of 0 would cause the pool to operate as a |
| 170 | 170 | first-fit pool, at a significant cost in time efficiency: | |
| 171 | A fragmentation limit of 100 causes the pool to always use | 171 | therefore this is not permitted. |
| 172 | temporal fit (unless resources are exhausted). If the objects | 172 | |
| 173 | allocated in the pool have similar lifetime expectancies, this | 173 | A fragmentation limit of 100 causes the pool to always use |
| 174 | mode will have the best time- and space-efficiency. If the objects | 174 | temporal fit (unless resources are exhausted). If the objects |
| 175 | have widely varying lifetime expectancies, this mode will be | 175 | allocated in the pool have similar lifetime expectancies, this |
| 176 | time-efficient, but may be space-inefficient. An intermediate | 176 | mode will have the best time- and space-efficiency. If the |
| 177 | setting can be used to limit the space-inefficiency of temporal | 177 | objects have widely varying lifetime expectancies, this mode |
| 178 | fit due to varying object life expectancies. | 178 | will be time-efficient, but may be space-inefficient. An |
| 179 | intermediate setting can be used to limit the space-inefficiency | ||
| 180 | of temporal fit due to varying object life expectancies. | ||
| 181 | |||
| 182 | For example, in :term:`C99`:: | ||
| 183 | |||
| 184 | res = mps_pool_create_k(&pool, arena, mps_class_mvt(), | ||
| 185 | (mps_arg_s[]){{MPS_KEY_MIN_SIZE, .val.size = 4}, | ||
| 186 | {MPS_KEY_MEAN_SIZE, .val.size = 32}, | ||
| 187 | {MPS_KEY_MAX_SIZE, .val.size = 1024}, | ||
| 188 | {MPS_KEY_MVT_RESERVE_DEPTH, .val.count = 256}, | ||
| 189 | {MPS_KEY_MVT_FRAG_LIMIT, .val.count = 50}, | ||
| 190 | {MPS_KEY_ARGS_END}}); | ||
| 191 | |||
| 192 | .. deprecated:: starting with version 1.112. | ||
| 193 | |||
| 194 | When using :c:func:`mps_pool_create`, pass the arguments like | ||
| 195 | this:: | ||
| 196 | |||
| 197 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 198 | mps_class_t mps_class_mvt(), | ||
| 199 | size_t minimum_size, | ||
| 200 | size_t mean_size, | ||
| 201 | size_t maximum_size, | ||
| 202 | mps_count_t reserve_depth, | ||
| 203 | mps_count_t fragmentation_limit) | ||
| 179 | 204 | ||
| 180 | 205 | ||
| 181 | .. index:: | 206 | .. index:: |
diff --git a/mps/manual/html/_sources/pool/snc.txt b/mps/manual/html/_sources/pool/snc.txt index e9b5003e91a..04fd8d548ee 100644 --- a/mps/manual/html/_sources/pool/snc.txt +++ b/mps/manual/html/_sources/pool/snc.txt | |||
| @@ -95,23 +95,47 @@ SNC introspection | |||
| 95 | Return the :term:`pool class` for an SNC (Stack No Check) | 95 | Return the :term:`pool class` for an SNC (Stack No Check) |
| 96 | :term:`pool`. | 96 | :term:`pool`. |
| 97 | 97 | ||
| 98 | When creating an SNC pool, :c:func:`mps_pool_create` takes one | 98 | When creating an SNC pool, :c:func:`mps_pool_create_k` requires one |
| 99 | extra argument:: | 99 | :term:`keyword argument`: |
| 100 | 100 | ||
| 101 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | 101 | * :c:macro:`MPS_KEY_FORMAT` (member ``.val.format``; type |
| 102 | mps_class_t mps_class_snc(), | 102 | :c:type:`mps_fmt_t`) specifies the :term:`object format` for the |
| 103 | mps_fmt_t fmt) | 103 | objects allocated in the pool. The format must provide a |
| 104 | :term:`scan method`, a :term:`skip method`, and a :term:`padding | ||
| 105 | method`. | ||
| 104 | 106 | ||
| 105 | ``fmt`` specifies the :term:`object format` for the objects | 107 | For example, in :term:`C99`:: |
| 106 | allocated in the pool. The format must provide a :term:`scan | ||
| 107 | method`, a :term:`skip method`, and a :term:`padding method`. | ||
| 108 | 108 | ||
| 109 | When creating an allocation point on an SNC pool, | 109 | res = mps_pool_create_k(&pool, arena, mps_class_snc(), |
| 110 | :c:func:`mps_ap_create` takes one extra argument:: | 110 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = fmt}, |
| 111 | {MPS_KEY_ARGS_END}}); | ||
| 111 | 112 | ||
| 112 | mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, | 113 | .. deprecated:: starting with version 1.112. |
| 113 | mps_rank_t rank) | ||
| 114 | 114 | ||
| 115 | ``rank`` specifies the :term:`rank` of references in objects | 115 | When using :c:func:`mps_pool_create`, pass the format like |
| 116 | allocated on this allocation point. It must be | 116 | this:: |
| 117 | :c:func:`mps_rank_exact`. | 117 | |
| 118 | mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, | ||
| 119 | mps_class_t mps_class_snc(), | ||
| 120 | mps_fmt_t fmt) | ||
| 121 | |||
| 122 | When creating an :term:`allocation point` on an SNC pool, | ||
| 123 | :c:func:`mps_ap_create_k` requires one keyword argument: | ||
| 124 | |||
| 125 | * :c:macro:`MPS_KEY_RANK` (member ``.val.rank``; type | ||
| 126 | :c:type:`mps_rank_t`) specifies the :term:`rank` of references | ||
| 127 | in objects allocated on this allocation point. It must be | ||
| 128 | :c:func:`mps_rank_exact`. | ||
| 129 | |||
| 130 | For example, in :term:`C99`:: | ||
| 131 | |||
| 132 | res = mps_ap_create_k(&ap, awl_pool, | ||
| 133 | (mps_arg_s[]){{MPS_KEY_RANK, .val.rank = mps_rank_exact()}, | ||
| 134 | {MPS_KEY_ARGS_END}}); | ||
| 135 | |||
| 136 | .. deprecated:: starting with version 1.112. | ||
| 137 | |||
| 138 | When using :c:func:`mps_ap_create`, pass the rank like this:: | ||
| 139 | |||
| 140 | mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, | ||
| 141 | mps_rank_t rank) | ||
diff --git a/mps/manual/html/_sources/topic/allocation.txt b/mps/manual/html/_sources/topic/allocation.txt index 1d808828ccd..512935c3765 100644 --- a/mps/manual/html/_sources/topic/allocation.txt +++ b/mps/manual/html/_sources/topic/allocation.txt | |||
| @@ -96,7 +96,7 @@ many small objects. They must be used according to the | |||
| 96 | :c:type:`mps_ap_s`. | 96 | :c:type:`mps_ap_s`. |
| 97 | 97 | ||
| 98 | 98 | ||
| 99 | .. c:function:: mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, ...) | 99 | .. c:function:: mps_res_t mps_ap_create_k(mps_ap_t *ap_o, mps_pool_t pool, mps_arg_s args[]) |
| 100 | 100 | ||
| 101 | Create an :term:`allocation point` in a :term:`pool`. | 101 | Create an :term:`allocation point` in a :term:`pool`. |
| 102 | 102 | ||
| @@ -105,12 +105,14 @@ many small objects. They must be used according to the | |||
| 105 | 105 | ||
| 106 | ``pool`` is the pool. | 106 | ``pool`` is the pool. |
| 107 | 107 | ||
| 108 | ``args`` are :term:`keyword arguments` specific to the pool class | ||
| 109 | to which ``pool`` belong. See the documentation for that pool | ||
| 110 | class. (Most pool classes don't take any keyword arguments; in | ||
| 111 | those cases you can pass :c:macro:`mps_args_none`.) | ||
| 112 | |||
| 108 | Returns :c:macro:`MPS_RES_OK` if successful, or another | 113 | Returns :c:macro:`MPS_RES_OK` if successful, or another |
| 109 | :term:`result code` if not. | 114 | :term:`result code` if not. |
| 110 | 115 | ||
| 111 | Some pool classes require additional arguments to be passed to | ||
| 112 | :c:func:`mps_ap_create`. See the documentation for the pool class. | ||
| 113 | |||
| 114 | .. warning:: | 116 | .. warning:: |
| 115 | 117 | ||
| 116 | An allocation point must not be used by more than one | 118 | An allocation point must not be used by more than one |
| @@ -124,9 +126,28 @@ many small objects. They must be used according to the | |||
| 124 | ``va_list`` mechanism. | 126 | ``va_list`` mechanism. |
| 125 | 127 | ||
| 126 | 128 | ||
| 129 | .. c:function:: mps_res_t mps_ap_create(mps_ap_t *ap_o, mps_pool_t pool, ...) | ||
| 130 | |||
| 131 | .. deprecated:: starting with version 1.112. | ||
| 132 | |||
| 133 | Use :c:func:`mps_ap_create_k` instead: the :term:`keyword | ||
| 134 | arguments` interface is more reliable and produces better | ||
| 135 | error messages. | ||
| 136 | |||
| 137 | An alternative to :c:func:`mps_ap_create_k` that takes its extra | ||
| 138 | arguments using the standard :term:`C` variable argument list | ||
| 139 | mechanism. | ||
| 140 | |||
| 141 | |||
| 127 | .. c:function:: mps_res_t mps_ap_create_v(mps_ap_t *ap_o, mps_pool_t pool, va_list args) | 142 | .. c:function:: mps_res_t mps_ap_create_v(mps_ap_t *ap_o, mps_pool_t pool, va_list args) |
| 128 | 143 | ||
| 129 | An alternative to :c:func:`mps_ap_create` that takes its extra | 144 | .. deprecated:: starting with version 1.112. |
| 145 | |||
| 146 | Use :c:func:`mps_ap_create_k` instead: the :term:`keyword | ||
| 147 | arguments` interface is more reliable and produces better | ||
| 148 | error messages. | ||
| 149 | |||
| 150 | An alternative to :c:func:`mps_ap_create_k` that takes its extra | ||
| 130 | arguments using the standard :term:`C` ``va_list`` mechanism. | 151 | arguments using the standard :term:`C` ``va_list`` mechanism. |
| 131 | 152 | ||
| 132 | 153 | ||
| @@ -642,7 +663,7 @@ branch prediction should work well since the test almost never fails). | |||
| 642 | synchronization in a multi-threaded environment. | 663 | synchronization in a multi-threaded environment. |
| 643 | 664 | ||
| 644 | Create an allocation point for a pool by calling | 665 | Create an allocation point for a pool by calling |
| 645 | :c:func:`mps_ap_create`, and allocate memory via one by calling | 666 | :c:func:`mps_ap_create_k`, and allocate memory via one by calling |
| 646 | :c:func:`mps_reserve` and :c:func:`mps_commit`. | 667 | :c:func:`mps_reserve` and :c:func:`mps_commit`. |
| 647 | 668 | ||
| 648 | 669 | ||
diff --git a/mps/manual/html/_sources/topic/arena.txt b/mps/manual/html/_sources/topic/arena.txt index ee34751c65a..264ae0409b1 100644 --- a/mps/manual/html/_sources/topic/arena.txt +++ b/mps/manual/html/_sources/topic/arena.txt | |||
| @@ -14,7 +14,7 @@ Arenas | |||
| 14 | An arena is an object that encapsulates the state of the Memory Pool | 14 | An arena is an object that encapsulates the state of the Memory Pool |
| 15 | System, and tells it where to get the memory it manages. You typically | 15 | System, and tells it where to get the memory it manages. You typically |
| 16 | start a session with the MPS by creating an arena with | 16 | start a session with the MPS by creating an arena with |
| 17 | :c:func:`mps_arena_create` and end the session by destroying it with | 17 | :c:func:`mps_arena_create_k` and end the session by destroying it with |
| 18 | :c:func:`mps_arena_destroy`. The only function you might need to call | 18 | :c:func:`mps_arena_destroy`. The only function you might need to call |
| 19 | before making an arena is :c:func:`mps_telemetry_control`. | 19 | before making an arena is :c:func:`mps_telemetry_control`. |
| 20 | 20 | ||
| @@ -76,28 +76,14 @@ the way that they acquire the memory to be managed. | |||
| 76 | .. c:function:: mps_res_t mps_arena_create_k(mps_arena_t *arena_o, mps_arena_class_t arena_class, mps_arg_s args[]) | 76 | .. c:function:: mps_res_t mps_arena_create_k(mps_arena_t *arena_o, mps_arena_class_t arena_class, mps_arg_s args[]) |
| 77 | 77 | ||
| 78 | Create an :term:`arena`. | 78 | Create an :term:`arena`. |
| 79 | |||
| 80 | ``arena_o`` points to a location that will hold a pointer to the new | ||
| 81 | arena. | ||
| 82 | |||
| 83 | ``arena_class`` is the :term:`arena class`. | ||
| 84 | |||
| 85 | ``args`` are :ref:`topic-interface-keywords` specific to the arena | ||
| 86 | class. See the documentation for the arena class. | ||
| 87 | |||
| 88 | |||
| 89 | .. c:function:: mps_res_t mps_arena_create(mps_arena_t *arena_o, mps_arena_class_t arena_class, ...) | ||
| 90 | |||
| 91 | Create an :term:`arena`. | ||
| 92 | 79 | ||
| 93 | ``arena_o`` points to a location that will hold a pointer to the new | 80 | ``arena_o`` points to a location that will hold a pointer to the new |
| 94 | arena. | 81 | arena. |
| 95 | 82 | ||
| 96 | ``arena_class`` is the :term:`arena class`. | 83 | ``arena_class`` is the :term:`arena class`. |
| 97 | 84 | ||
| 98 | Some arena classes require additional arguments to be passed to | 85 | ``args`` are :term:`keyword arguments` specific to the arena |
| 99 | :c:func:`mps_arena_create`. See the documentation for the arena | 86 | class. See the documentation for the arena class. |
| 100 | class. | ||
| 101 | 87 | ||
| 102 | Returns :c:macro:`MPS_RES_OK` if the arena is created | 88 | Returns :c:macro:`MPS_RES_OK` if the arena is created |
| 103 | successfully, or another :term:`result code` otherwise. | 89 | successfully, or another :term:`result code` otherwise. |
| @@ -105,17 +91,31 @@ the way that they acquire the memory to be managed. | |||
| 105 | The arena persists until it is destroyed by calling | 91 | The arena persists until it is destroyed by calling |
| 106 | :c:func:`mps_arena_destroy`. | 92 | :c:func:`mps_arena_destroy`. |
| 107 | 93 | ||
| 108 | .. note:: | ||
| 109 | 94 | ||
| 110 | There's an alternative function :c:func:`mps_arena_create_v` | 95 | .. c:function:: mps_res_t mps_arena_create(mps_arena_t *arena_o, mps_arena_class_t arena_class, ...) |
| 111 | that takes its extra arguments using the standard :term:`C` | 96 | |
| 112 | ``va_list`` mechanism. | 97 | .. deprecated:: starting with version 1.112. |
| 98 | |||
| 99 | Use :c:func:`mps_arena_create_k` instead: the :term:`keyword | ||
| 100 | arguments` interface is more reliable and produces better | ||
| 101 | error messages. | ||
| 102 | |||
| 103 | An alternative to :c:func:`mps_arena_create_k` that takes its | ||
| 104 | extra arguments using the standard :term:`C` variable argument | ||
| 105 | list mechanism. | ||
| 113 | 106 | ||
| 114 | 107 | ||
| 115 | .. c:function:: mps_res_t mps_arena_create_v(mps_arena_t *arena_o, mps_arena_class_t arena_class, va_list args) | 108 | .. c:function:: mps_res_t mps_arena_create_v(mps_arena_t *arena_o, mps_arena_class_t arena_class, va_list args) |
| 116 | 109 | ||
| 117 | An alternative to :c:func:`mps_arena_create` that takes its extra | 110 | .. deprecated:: starting with version 1.112. |
| 118 | arguments using the standard :term:`C` ``va_list`` mechanism. | 111 | |
| 112 | Use :c:func:`mps_arena_create_k` instead: the :term:`keyword | ||
| 113 | arguments` interface is more reliable and produces better | ||
| 114 | error messages. | ||
| 115 | |||
| 116 | An alternative to :c:func:`mps_arena_create_k` that takes its | ||
| 117 | extra arguments using the standard :term:`C` ``va_list`` | ||
| 118 | mechanism. | ||
| 119 | 119 | ||
| 120 | 120 | ||
| 121 | .. c:function:: void mps_arena_destroy(mps_arena_t arena) | 121 | .. c:function:: void mps_arena_destroy(mps_arena_t arena) |
| @@ -156,30 +156,24 @@ Client arenas | |||
| 156 | program`. This memory chunk is passed when the arena is created. | 156 | program`. This memory chunk is passed when the arena is created. |
| 157 | 157 | ||
| 158 | When creating a client arena, :c:func:`mps_arena_create_k` requires two | 158 | When creating a client arena, :c:func:`mps_arena_create_k` requires two |
| 159 | :ref:`topic-interface-keywords`: | 159 | :term:`keyword arguments`: |
| 160 | 160 | ||
| 161 | * ``MPS_KEY_ARENA_CL_BASE`` (type ``mps_addr_t``) is the | 161 | * :c:macro:`MPS_KEY_ARENA_CL_ADDR` (member ``.val.addr``; type |
| 162 | :term:`address` of the chunk of memory that will be managed by the | 162 | :c:type:`mps_addr_t`) is the :term:`address` of the chunk of memory |
| 163 | arena. | 163 | that will be managed by the arena. |
| 164 | 164 | ||
| 165 | * ``MPS_KEY_ARENA_SIZE`` (type ``size_t``) is its size. | 165 | * :c:macro:`MPS_KEY_ARENA_SIZE` (member ``.val.size``; type |
| 166 | 166 | :c:type:`size_t`) is its size. | |
| 167 | For example (in C99):: | 167 | |
| 168 | 168 | For example (in :term:`C99`):: | |
| 169 | |||
| 169 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), | 170 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), |
| 170 | (mps_arg_s[]){{MPS_KEY_ARENA_CL_BASE, .val.addr = base}, | 171 | (mps_arg_s[]){{MPS_KEY_ARENA_CL_ADDR, .val.addr = base}, |
| 171 | {MPS_KEY_ARENA_SIZE, .val.size = size}, | 172 | {MPS_KEY_ARENA_SIZE, .val.size = size}, |
| 172 | {MPS_KEY_ARGS_END}}); | 173 | {MPS_KEY_ARGS_END}}); |
| 173 | 174 | ||
| 174 | When creating a client arena, :c:func:`mps_arena_create` takes the | ||
| 175 | these arguments like this:: | ||
| 176 | |||
| 177 | mps_res_t mps_arena_create(mps_arena_t *arena_o, | ||
| 178 | mps_arena_class_t mps_arena_class_cl, | ||
| 179 | size_t size, mps_addr_t base) | ||
| 180 | |||
| 181 | If the chunk is too small to hold the internal arena structures, | 175 | If the chunk is too small to hold the internal arena structures, |
| 182 | :c:func:`mps_arena_create` returns :c:macro:`MPS_RES_MEMORY`. In | 176 | :c:func:`mps_arena_create_k` returns :c:macro:`MPS_RES_MEMORY`. In |
| 183 | this case, you need to use a (much) larger chunk. | 177 | this case, you need to use a (much) larger chunk. |
| 184 | 178 | ||
| 185 | .. note:: | 179 | .. note:: |
| @@ -189,6 +183,15 @@ Client arenas | |||
| 189 | 183 | ||
| 190 | Client arenas have no mechanism for returning unused memory. | 184 | Client arenas have no mechanism for returning unused memory. |
| 191 | 185 | ||
| 186 | .. deprecated:: starting with version 1.112. | ||
| 187 | |||
| 188 | When using :c:func:`mps_arena_create`, pass the size and base | ||
| 189 | address like this:: | ||
| 190 | |||
| 191 | mps_res_t mps_arena_create(mps_arena_t *arena_o, | ||
| 192 | mps_arena_class_t mps_arena_class_cl, | ||
| 193 | size_t size, mps_addr_t base) | ||
| 194 | |||
| 192 | 195 | ||
| 193 | .. c:function:: mps_res_t mps_arena_extend(mps_arena_t arena, mps_addr_t base, size_t size) | 196 | .. c:function:: mps_res_t mps_arena_extend(mps_arena_t arena, mps_addr_t base, size_t size) |
| 194 | 197 | ||
| @@ -229,13 +232,13 @@ Virtual memory arenas | |||
| 229 | more efficient. | 232 | more efficient. |
| 230 | 233 | ||
| 231 | When creating a virtual memory arena, :c:func:`mps_arena_create_k` | 234 | When creating a virtual memory arena, :c:func:`mps_arena_create_k` |
| 232 | requires one | 235 | requires one :term:`keyword argument`: |
| 233 | :ref:`topic-interface-keywords`: | 236 | |
| 234 | 237 | * :c:macro:`MPS_KEY_ARENA_SIZE` (member ``.val.size``; type | |
| 235 | * ``MPS_KEY_ARENA_SIZE`` (type ``size_t``) | 238 | :c:type:`size_t`). |
| 236 | 239 | ||
| 237 | For example (in C99):: | 240 | For example (in :term:`C99`):: |
| 238 | 241 | ||
| 239 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), | 242 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), |
| 240 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = size}, | 243 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = size}, |
| 241 | {MPS_KEY_ARGS_END}}); | 244 | {MPS_KEY_ARGS_END}}); |
| @@ -256,38 +259,41 @@ Virtual memory arenas | |||
| 256 | more times it has to extend its address space, the less | 259 | more times it has to extend its address space, the less |
| 257 | efficient garbage collection will become. | 260 | efficient garbage collection will become. |
| 258 | 261 | ||
| 259 | An optional :ref:`topic-interface-keywords` may be passed, but is | 262 | An optional :term:`keyword argument` may be passed, but is |
| 260 | only used on the Windows operating system: | 263 | only used on the Windows operating system: |
| 261 | 264 | ||
| 262 | * ``MPS_KEY_VM_W3_TOP_DOWN`` (type ``mps_bool_t``) | 265 | * :c:macro:`MPS_KEY_VMW3_TOP_DOWN` (member ``.val.b``; type |
| 263 | 266 | :c:type:`mps_bool_t`). | |
| 267 | |||
| 264 | If true, the arena will allocate address space starting at the | 268 | If true, the arena will allocate address space starting at the |
| 265 | highest possible address and working downwards through memory. | 269 | highest possible address and working downwards through memory. |
| 266 | 270 | ||
| 267 | .. note:: | 271 | .. note:: |
| 268 | 272 | ||
| 269 | This causes the arena to pass the ``MEM_TOP_DOWN`` flag to | 273 | This causes the arena to pass the ``MEM_TOP_DOWN`` flag to |
| 270 | `VirtualAlloc`_. | 274 | `VirtualAlloc`_. |
| 271 | 275 | ||
| 272 | .. _VirtualAlloc: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx | 276 | .. _VirtualAlloc: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx |
| 273 | 277 | ||
| 274 | When creating a virtual memory arena, :c:func:`mps_arena_create` | ||
| 275 | takes one extra argument:: | ||
| 276 | |||
| 277 | mps_res_t mps_arena_create(mps_arena_t *arena_o, | ||
| 278 | mps_arena_class_t arena_class_vm(), | ||
| 279 | size_t size) | ||
| 280 | |||
| 281 | If the MPS fails to reserve adequate address space to place the | 278 | If the MPS fails to reserve adequate address space to place the |
| 282 | arena in, :c:func:`mps_arena_create` returns | 279 | arena in, :c:func:`mps_arena_create_k` returns |
| 283 | :c:macro:`MPS_RES_RESOURCE`. Possibly this means that other parts | 280 | :c:macro:`MPS_RES_RESOURCE`. Possibly this means that other parts |
| 284 | of the program are reserving too much virtual memory. | 281 | of the program are reserving too much virtual memory. |
| 285 | 282 | ||
| 286 | If the MPS fails to allocate memory for the internal arena | 283 | If the MPS fails to allocate memory for the internal arena |
| 287 | structures, :c:func:`mps_arena_create` returns | 284 | structures, :c:func:`mps_arena_create_k` returns |
| 288 | :c:macro:`MPS_RES_MEMORY`. Either ``size`` was far too small or | 285 | :c:macro:`MPS_RES_MEMORY`. Either ``size`` was far too small or |
| 289 | the operating system refused to provide enough memory. | 286 | the operating system refused to provide enough memory. |
| 290 | 287 | ||
| 288 | .. deprecated:: starting with version 1.112. | ||
| 289 | |||
| 290 | When using :c:func:`mps_arena_create`, pass the size like | ||
| 291 | this:: | ||
| 292 | |||
| 293 | mps_res_t mps_arena_create(mps_arena_t *arena_o, | ||
| 294 | mps_arena_class_t arena_class_vm(), | ||
| 295 | size_t size) | ||
| 296 | |||
| 291 | 297 | ||
| 292 | .. index:: | 298 | .. index:: |
| 293 | single: arena; properties | 299 | single: arena; properties |
| @@ -410,16 +416,17 @@ Arena properties | |||
| 410 | 416 | ||
| 411 | For a :term:`client arena`, this is the sum of the usable portions | 417 | For a :term:`client arena`, this is the sum of the usable portions |
| 412 | of the chunks of memory passed to the arena by the :term:`client | 418 | of the chunks of memory passed to the arena by the :term:`client |
| 413 | program` via :c:func:`mps_arena_create` and | 419 | program` via :c:func:`mps_arena_create_k` and |
| 414 | :c:func:`mps_arena_extend`. | 420 | :c:func:`mps_arena_extend`. |
| 415 | 421 | ||
| 416 | .. note:: | 422 | .. note:: |
| 417 | 423 | ||
| 418 | For a client arena, the reserved address may be lower than the | 424 | For a client arena, the reserved address may be lower than the |
| 419 | sum of the ``size`` arguments passed to | 425 | sum of the :c:macro:`MPS_KEY_ARENA_SIZE` keyword argument |
| 420 | :c:func:`mps_arena_create` and :c:func:`mps_arena_extend`, | 426 | passed to :c:func:`mps_arena_create_k` and the ``size`` |
| 421 | because the arena may be unable to use the whole of each chunk | 427 | arguments passed to :c:func:`mps_arena_extend`, because the |
| 422 | for reasons of alignment. | 428 | arena may be unable to use the whole of each chunk for reasons |
| 429 | of alignment. | ||
| 423 | 430 | ||
| 424 | 431 | ||
| 425 | .. c:function:: size_t mps_arena_spare_commit_limit(mps_arena_t arena) | 432 | .. c:function:: size_t mps_arena_spare_commit_limit(mps_arena_t arena) |
| @@ -545,7 +552,7 @@ can only be called in this state. | |||
| 545 | .. c:function:: void mps_arena_clamp(mps_arena_t arena) | 552 | .. c:function:: void mps_arena_clamp(mps_arena_t arena) |
| 546 | 553 | ||
| 547 | Put an :term:`arena` into the :term:`clamped state`. | 554 | Put an :term:`arena` into the :term:`clamped state`. |
| 548 | 555 | ||
| 549 | ``arena`` is the arena to clamp. | 556 | ``arena`` is the arena to clamp. |
| 550 | 557 | ||
| 551 | In the clamped state, no object motion will occur and the | 558 | In the clamped state, no object motion will occur and the |
| @@ -752,7 +759,7 @@ Arena introspection | |||
| 752 | Introspection functions covered in other chapters are: | 759 | Introspection functions covered in other chapters are: |
| 753 | 760 | ||
| 754 | * :c:func:`mps_addr_fmt`: determine the :term:`object format` to | 761 | * :c:func:`mps_addr_fmt`: determine the :term:`object format` to |
| 755 | which an address belongs; | 762 | which an address belongs; |
| 756 | * :c:func:`mps_arena_formatted_objects_walk`: visit all | 763 | * :c:func:`mps_arena_formatted_objects_walk`: visit all |
| 757 | :term:`formatted objects` in an arena; | 764 | :term:`formatted objects` in an arena; |
| 758 | * :c:func:`mps_arena_roots_walk`: visit all references in | 765 | * :c:func:`mps_arena_roots_walk`: visit all references in |
| @@ -763,7 +770,7 @@ Arena introspection | |||
| 763 | 770 | ||
| 764 | .. c:function:: mps_bool_t mps_arena_has_addr(mps_arena_t arena, mps_addr_t addr) | 771 | .. c:function:: mps_bool_t mps_arena_has_addr(mps_arena_t arena, mps_addr_t addr) |
| 765 | 772 | ||
| 766 | Test whether an :term:`address` is managed by an :term:`arena`. | 773 | Test whether an :term:`address` is managed by an :term:`arena`. |
| 767 | 774 | ||
| 768 | ``arena`` is an arena. | 775 | ``arena`` is an arena. |
| 769 | 776 | ||
diff --git a/mps/manual/html/_sources/topic/debugging.txt b/mps/manual/html/_sources/topic/debugging.txt index 2c4b68bd71d..32524d7869e 100644 --- a/mps/manual/html/_sources/topic/debugging.txt +++ b/mps/manual/html/_sources/topic/debugging.txt | |||
| @@ -71,15 +71,20 @@ For example:: | |||
| 71 | }; | 71 | }; |
| 72 | mps_pool_t pool; | 72 | mps_pool_t pool; |
| 73 | mps_res_t res; | 73 | mps_res_t res; |
| 74 | res = mps_pool_create(&pool, arena, mps_class_ams_debug(), | 74 | res = mps_pool_create_k(&pool, arena, mps_class_ams_debug(), |
| 75 | &debug_options, &fmt, &chain) | 75 | (mps_arg_s[]){{MPS_KEY_POOL_DEBUG_OPTIONS, .val.pool_debug_options = &debug_options}, |
| 76 | {MPS_KEY_FORMAT, .val.format = &fmt}, | ||
| 77 | {MPS_KEY_CHAIN, .val.chain = &chain}, | ||
| 78 | {MPS_KEY_ARGS_END}}); | ||
| 76 | if (res != MPS_RES_OK) error("can't create debug pool"); | 79 | if (res != MPS_RES_OK) error("can't create debug pool"); |
| 77 | 80 | ||
| 78 | 81 | ||
| 79 | .. c:type:: mps_pool_debug_option_s | 82 | .. c:type:: mps_pool_debug_option_s |
| 80 | 83 | ||
| 81 | The type of the structure used to pass options to | 84 | The type of the structure passed as the |
| 82 | :c:func:`mps_pool_create` for debugging :term:`pool classes`. :: | 85 | :c:macro:`MPS_KEY_POOL_DEBUG_OPTIONS` keyword argument to |
| 86 | :c:func:`mps_pool_create_k` when creating a debugging :term:`pool | ||
| 87 | class`. :: | ||
| 83 | 88 | ||
| 84 | typedef struct mps_pool_debug_option_s { | 89 | typedef struct mps_pool_debug_option_s { |
| 85 | void *fence_template; | 90 | void *fence_template; |
diff --git a/mps/manual/html/_sources/topic/error.txt b/mps/manual/html/_sources/topic/error.txt index c0178a38d8d..296ddb9fa30 100644 --- a/mps/manual/html/_sources/topic/error.txt +++ b/mps/manual/html/_sources/topic/error.txt | |||
| @@ -227,7 +227,7 @@ this documentation. | |||
| 227 | 227 | ||
| 228 | ``format.c: SigCheck Format: format`` | 228 | ``format.c: SigCheck Format: format`` |
| 229 | 229 | ||
| 230 | The client program called :c:func:`mps_pool_create` for a | 230 | The client program called :c:func:`mps_pool_create_k` for a |
| 231 | :term:`pool class` like :ref:`pool-amc` that requires a | 231 | :term:`pool class` like :ref:`pool-amc` that requires a |
| 232 | :term:`object format`, but passed something other than a | 232 | :term:`object format`, but passed something other than a |
| 233 | :c:type:`mps_fmt_t` for this argument. | 233 | :c:type:`mps_fmt_t` for this argument. |
diff --git a/mps/manual/html/_sources/topic/format.txt b/mps/manual/html/_sources/topic/format.txt index ea1e7faabb2..f3b4fd330bd 100644 --- a/mps/manual/html/_sources/topic/format.txt +++ b/mps/manual/html/_sources/topic/format.txt | |||
| @@ -92,7 +92,9 @@ For example:: | |||
| 92 | if (res != MPS_RES_OK) error("Couldn't create obj format"); | 92 | if (res != MPS_RES_OK) error("Couldn't create obj format"); |
| 93 | /* obj_fmt created successfully */ | 93 | /* obj_fmt created successfully */ |
| 94 | 94 | ||
| 95 | res = mps_pool_create(&obj_pool, arena, pool_class, obj_fmt); | 95 | res = mps_pool_create_k(&obj_pool, arena, pool_class, |
| 96 | (mps_arg_s[]){{MPS_KEY_FORMAT, .val.format = obj_fmt}, | ||
| 97 | {MPS_KEY_ARGS_END}}); | ||
| 96 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); | 98 | if (res != MPS_RES_OK) error("Couldn't create obj pool"); |
| 97 | 99 | ||
| 98 | 100 | ||
diff --git a/mps/manual/html/_sources/topic/index.txt b/mps/manual/html/_sources/topic/index.txt index baf376f3fc4..b4e6300201e 100644 --- a/mps/manual/html/_sources/topic/index.txt +++ b/mps/manual/html/_sources/topic/index.txt | |||
| @@ -7,6 +7,7 @@ Reference | |||
| 7 | :numbered: | 7 | :numbered: |
| 8 | 8 | ||
| 9 | interface | 9 | interface |
| 10 | keyword | ||
| 10 | error | 11 | error |
| 11 | arena | 12 | arena |
| 12 | pool | 13 | pool |
diff --git a/mps/manual/html/_sources/topic/interface.txt b/mps/manual/html/_sources/topic/interface.txt index a37382a6eb3..e0bca91d1fb 100644 --- a/mps/manual/html/_sources/topic/interface.txt +++ b/mps/manual/html/_sources/topic/interface.txt | |||
| @@ -54,8 +54,8 @@ Support policy | |||
| 54 | Language | 54 | Language |
| 55 | -------- | 55 | -------- |
| 56 | 56 | ||
| 57 | 1. The MPS public interface conforms to ANSI/ISO Standard C (IEC | 57 | 1. The MPS public interface conforms to :ref:`ANSI/ISO Standard C (IEC |
| 58 | 9899:1990). | 58 | 9899:1990) <C1990>`. |
| 59 | 59 | ||
| 60 | 60 | ||
| 61 | .. index:: | 61 | .. index:: |
| @@ -171,6 +171,10 @@ Functions | |||
| 171 | 171 | ||
| 172 | 7. In/out parameters have names ending with ``_io``. | 172 | 7. In/out parameters have names ending with ``_io``. |
| 173 | 173 | ||
| 174 | 8. A function that takes optional arguments does so in the form of an | ||
| 175 | array of keyword argument structures. These functions have names | ||
| 176 | ending with ``_k``. See :ref:`topic-keyword`. | ||
| 177 | |||
| 174 | 178 | ||
| 175 | .. index:: | 179 | .. index:: |
| 176 | single: interface; type punning | 180 | single: interface; type punning |
| @@ -258,45 +262,6 @@ Macros | |||
| 258 | separately. | 262 | separately. |
| 259 | 263 | ||
| 260 | 264 | ||
| 261 | .. _topic-interface-keywords: | ||
| 262 | |||
| 263 | Keyword arguments | ||
| 264 | ----------------- | ||
| 265 | |||
| 266 | Some functions take :term:`keyword arguments` in order to pass values | ||
| 267 | that might be optional, or are only required in some circumstances. For | ||
| 268 | example, :ref:`client arenas <topic-arena-client>` require a base address. These | ||
| 269 | arguments are passed in a keyword argument array, like this:: | ||
| 270 | |||
| 271 | mps_res_t res; | ||
| 272 | mps_arena_t arena; | ||
| 273 | mps_arg_s args[3]; | ||
| 274 | args[0].key = MPS_KEY_ARENA_SIZE; | ||
| 275 | args[0].val.size = 6553600; | ||
| 276 | args[1].key = MPS_KEY_ARENA_CL_BASE; | ||
| 277 | args[1].val.addr = base_address; | ||
| 278 | args[2].key = MPS_KEY_ARGS_END; | ||
| 279 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), args); | ||
| 280 | |||
| 281 | If you are writing C99, you can write this more concisely as:: | ||
| 282 | |||
| 283 | mps_res_t res; | ||
| 284 | mps_arena_t arena; | ||
| 285 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), | ||
| 286 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = 6553600}, | ||
| 287 | {MPS_KEY_ARENA_CL_BASE, .val.addr = base_address}, | ||
| 288 | {MPS_KEY_ARGS_END}}); | ||
| 289 | |||
| 290 | The argument array must not be ``NULL``, and must end with | ||
| 291 | ``MPS_KEY_ARGS_END``. | ||
| 292 | |||
| 293 | On return, the keyword argument array will be *modified* to remove any | ||
| 294 | arguments that have been used. If all arguments have been used the | ||
| 295 | first element key will be MPS_KEY_ARGS_END. | ||
| 296 | |||
| 297 | If you don't want to pass any arguments, you can either call the equivalent function that does not take | ||
| 298 | |||
| 299 | |||
| 300 | .. _topic-interface-general: | 265 | .. _topic-interface-general: |
| 301 | 266 | ||
| 302 | General types | 267 | General types |
diff --git a/mps/manual/html/_sources/topic/keyword.txt b/mps/manual/html/_sources/topic/keyword.txt new file mode 100644 index 00000000000..1acf73e34bf --- /dev/null +++ b/mps/manual/html/_sources/topic/keyword.txt | |||
| @@ -0,0 +1,190 @@ | |||
| 1 | .. index:: | ||
| 2 | pair: arguments; keyword | ||
| 3 | |||
| 4 | .. _topic-keyword: | ||
| 5 | |||
| 6 | Keyword arguments | ||
| 7 | ----------------- | ||
| 8 | |||
| 9 | Some functions in the MPS interface take :term:`keyword arguments` in | ||
| 10 | order to pass values that might be optional, or are only required in | ||
| 11 | some circumstances. For example, the function | ||
| 12 | :c:func:`mps_arena_create_k` creates any class of :term:`arena`, but | ||
| 13 | :term:`client arenas` require you to specify a base address. These | ||
| 14 | arguments are passed in a keyword argument array, like this:: | ||
| 15 | |||
| 16 | mps_res_t res; | ||
| 17 | mps_arena_t arena; | ||
| 18 | mps_arg_s args[3]; | ||
| 19 | args[0].key = MPS_KEY_ARENA_SIZE; | ||
| 20 | args[0].val.size = 6553600; | ||
| 21 | args[1].key = MPS_KEY_ARENA_CL_ADDR; | ||
| 22 | args[1].val.addr = base_address; | ||
| 23 | args[2].key = MPS_KEY_ARGS_END; | ||
| 24 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), args); | ||
| 25 | |||
| 26 | Each keyword argument in the array is a structure of type | ||
| 27 | :c:type:`mps_arg_s`. | ||
| 28 | |||
| 29 | For convenience and robustness, the MPS interface includes macros to | ||
| 30 | help with forming keyword argument lists:: | ||
| 31 | |||
| 32 | MPS_ARGS_BEGIN(args) { | ||
| 33 | MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, size, 6553600); | ||
| 34 | MPS_ARGS_ADD(args, MPS_KEY_ARENA_CL_ADDR, addr, base_address); | ||
| 35 | MPS_ARGS_DONE(args); | ||
| 36 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), args); | ||
| 37 | } MPS_ARGS_END(args); | ||
| 38 | |||
| 39 | But if you are writing :term:`C99`, you can write this more concisely as:: | ||
| 40 | |||
| 41 | mps_res_t res; | ||
| 42 | mps_arena_t arena; | ||
| 43 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), | ||
| 44 | (mps_arg_s[]){{MPS_KEY_ARENA_SIZE, .val.size = 6553600}, | ||
| 45 | {MPS_KEY_ARENA_CL_ADDR, .val.addr = base_address}, | ||
| 46 | {MPS_KEY_ARGS_END}}); | ||
| 47 | |||
| 48 | The argument array must not be ``NULL``, and must end with | ||
| 49 | :c:macro:`MPS_KEY_ARGS_END`. If you don't want to pass any arguments, you can | ||
| 50 | either call the equivalent function that does not take keyword arguments | ||
| 51 | (named without the ``_k``) or pass :c:macro:`mps_args_none`. | ||
| 52 | |||
| 53 | When a function that takes keyword arguments returns, the keyword | ||
| 54 | argument array has been *modified* to remove any arguments that have | ||
| 55 | been used. If all arguments have been used, the first element key is | ||
| 56 | now :c:macro:`MPS_KEY_ARGS_END`. | ||
| 57 | |||
| 58 | |||
| 59 | .. c:type:: mps_arg_s | ||
| 60 | |||
| 61 | The type of the structure used to represent a single | ||
| 62 | :term:`keyword argument` to a function. :: | ||
| 63 | |||
| 64 | typedef struct mps_arg_s { | ||
| 65 | mps_key_t key; | ||
| 66 | union { | ||
| 67 | mps_bool_t b; | ||
| 68 | char c; | ||
| 69 | const char *string; | ||
| 70 | int i; | ||
| 71 | unsigned u; | ||
| 72 | long l; | ||
| 73 | unsigned long ul; | ||
| 74 | size_t size; | ||
| 75 | mps_addr_t addr; | ||
| 76 | mps_fmt_t format; | ||
| 77 | mps_chain_t chain; | ||
| 78 | struct mps_pool_debug_option_s *pool_debug_options; | ||
| 79 | mps_addr_t (*addr_method)(mps_addr_t); | ||
| 80 | mps_align_t align; | ||
| 81 | mps_word_t count; | ||
| 82 | void *p; | ||
| 83 | mps_rank_t rank; | ||
| 84 | } val; | ||
| 85 | } mps_arg_s; | ||
| 86 | |||
| 87 | ``key`` identifies the key. It must be one of the legal values | ||
| 88 | of :c:type:`mps_key_t` listed in the documentation for that type. | ||
| 89 | |||
| 90 | ``val`` is the corresponding value. The documentation for each | ||
| 91 | value of the type :c:type:`mps_key_t` explains which structure | ||
| 92 | member is used by that keyword. | ||
| 93 | |||
| 94 | |||
| 95 | .. c:macro:: mps_args_none | ||
| 96 | |||
| 97 | An array of :c:type:`mps_arg_s` representing the empty list of | ||
| 98 | keyword arguments. Equivalent to:: | ||
| 99 | |||
| 100 | mps_arg_s mps_args_none[] = {{MPS_KEY_ARGS_END}}; | ||
| 101 | |||
| 102 | |||
| 103 | .. c:type:: mps_key_t | ||
| 104 | |||
| 105 | The type of :term:`keyword argument` keys. Must take one of the | ||
| 106 | following values: | ||
| 107 | |||
| 108 | ======================================== ====================== ========================================================== | ||
| 109 | Keyword Value slot See | ||
| 110 | ======================================== ====================== ========================================================== | ||
| 111 | :c:macro:`MPS_KEY_ARGS_END` *none* *see above* | ||
| 112 | :c:macro:`MPS_KEY_ALIGN` ``align`` :c:func:`mps_class_mvff` | ||
| 113 | :c:macro:`MPS_KEY_AMS_SUPPORT_AMBIGUOUS` ``b`` :c:func:`mps_class_ams` | ||
| 114 | :c:macro:`MPS_KEY_ARENA_CL_ADDR` ``addr`` :c:func:`mps_arena_class_cl` | ||
| 115 | :c:macro:`MPS_KEY_ARENA_SIZE` ``size`` :c:func:`mps_arena_class_vm`, :c:func:`mps_arena_class_cl` | ||
| 116 | :c:macro:`MPS_KEY_AWL_FIND_DEPENDENT` ``addr_method`` :c:func:`mps_class_awl` | ||
| 117 | :c:macro:`MPS_KEY_CHAIN` ``chain`` :c:func:`mps_class_amc`, :c:func:`mps_class_amcz`, :c:func:`mps_class_ams` | ||
| 118 | :c:macro:`MPS_KEY_EXTEND_BY` ``size`` :c:func:`mps_class_mfs`, :c:func:`mps_class_mv`, :c:func:`mps_class_mvff` | ||
| 119 | :c:macro:`MPS_KEY_FORMAT` ``format`` :c:func:`mps_class_amc`, :c:func:`mps_class_amcz`, :c:func:`mps_class_ams`, :c:func:`mps_class_awl`, :c:func:`mps_class_lo` , :c:func:`mps_class_snc` | ||
| 120 | :c:macro:`MPS_KEY_MAX_SIZE` ``size`` :c:func:`mps_class_mv` | ||
| 121 | :c:macro:`MPS_KEY_MEAN_SIZE` ``size`` :c:func:`mps_class_mv`, :c:func:`mps_class_mvt`, :c:func:`mps_class_mvff` | ||
| 122 | :c:macro:`MPS_KEY_MFS_UNIT_SIZE` ``size`` :c:func:`mps_class_mfs` | ||
| 123 | :c:macro:`MPS_KEY_MIN_SIZE` ``size`` :c:func:`mps_class_mvt` | ||
| 124 | :c:macro:`MPS_KEY_MVFF_ARENA_HIGH` ``b`` :c:func:`mps_class_mvff` | ||
| 125 | :c:macro:`MPS_KEY_MVFF_FIRST_FIT` ``b`` :c:func:`mps_class_mvff` | ||
| 126 | :c:macro:`MPS_KEY_MVFF_SLOT_HIGH` ``b`` :c:func:`mps_class_mvff` | ||
| 127 | :c:macro:`MPS_KEY_MVT_FRAG_LIMIT` ``count`` :c:func:`mps_class_mvt` | ||
| 128 | :c:macro:`MPS_KEY_MVT_RESERVE_DEPTH` ``count`` :c:func:`mps_class_mvt` | ||
| 129 | :c:macro:`MPS_KEY_POOL_DEBUG_OPTIONS` ``pool_debug_options`` :c:func:`mps_class_ams_debug`, :c:func:`mps_class_mv_debug`, :c:func:`mps_class_mvff_debug` | ||
| 130 | :c:macro:`MPS_KEY_RANK` ``rank`` :c:func:`mps_class_awl`, :c:func:`mps_class_snc` | ||
| 131 | :c:macro:`MPS_KEY_VMW3_TOP_DOWN` ``b`` :c:func:`mps_arena_class_vm` | ||
| 132 | ======================================== ====================== ========================================================== | ||
| 133 | |||
| 134 | |||
| 135 | .. c:function:: MPS_ARGS_BEGIN(args) | ||
| 136 | |||
| 137 | Start construction of a list of keyword arguments. This macro must | ||
| 138 | be used like this:: | ||
| 139 | |||
| 140 | MPS_ARGS_BEGIN(args) { | ||
| 141 | MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, size, 6553600); | ||
| 142 | MPS_ARGS_ADD(args, MPS_KEY_ARENA_CL_ADDR, addr, base_address); | ||
| 143 | MPS_ARGS_DONE(args); | ||
| 144 | res = mps_arena_create_k(&arena, mps_arena_class_cl(), args); | ||
| 145 | } MPS_ARGS_END(args); | ||
| 146 | |||
| 147 | That is, you must call :c:func:`MPS_ARGS_ADD` zero or more times, | ||
| 148 | and then call :c:func:`MPS_ARGS_DONE` before passing the arguments | ||
| 149 | to a function. | ||
| 150 | |||
| 151 | ``args`` is the name of the array that contains the keyword | ||
| 152 | arguments. The array is stack-allocated, and exists between | ||
| 153 | :c:macro:`MPS_ARGS_BEGIN` and :c:macro:`MPS_ARGS_END`. | ||
| 154 | |||
| 155 | It is safe to nest blocks created by :c:macro:`MPS_ARGS_BEGIN` and | ||
| 156 | :c:macro:`MPS_ARGS_END`. | ||
| 157 | |||
| 158 | |||
| 159 | .. c:function:: MPS_ARGS_ADD(mps_arg_s args[], mps_key_t key, value) | ||
| 160 | |||
| 161 | Add an argument to a list of keyword arguments. This macro must be | ||
| 162 | used only between :c:macro:`MPS_ARGS_BEGIN` and | ||
| 163 | :c:macro:`MPS_ARGS_END`. | ||
| 164 | |||
| 165 | ``args`` is the name of array that contains the keyword arguments. | ||
| 166 | It must match the argument to the preceding call to | ||
| 167 | :c:func:`MPS_ARGS_BEGIN`. | ||
| 168 | |||
| 169 | |||
| 170 | .. c:function:: MPS_ARGS_DONE(args) | ||
| 171 | |||
| 172 | Finalize a list of keyword arguments. This macro must be used only | ||
| 173 | between :c:macro:`MPS_ARGS_BEGIN` and :c:macro:`MPS_ARGS_END`. | ||
| 174 | |||
| 175 | ``args`` is the name of array that contains the keyword arguments. | ||
| 176 | It must match the argument to the preceding call to | ||
| 177 | :c:func:`MPS_ARGS_BEGIN`. | ||
| 178 | |||
| 179 | After calling this macro, the array ``args`` is ready to pass to a | ||
| 180 | function. | ||
| 181 | |||
| 182 | |||
| 183 | .. c:function:: MPS_ARGS_END(args) | ||
| 184 | |||
| 185 | Finish using a list of keyword arguments whose construction was | ||
| 186 | started by :c:func:`MPS_ARGS_BEGIN`. | ||
| 187 | |||
| 188 | ``args`` is the name of array that contains the keyword arguments. | ||
| 189 | It must match the argument to the preceding call to | ||
| 190 | :c:func:`MPS_ARGS_BEGIN`. | ||
diff --git a/mps/manual/html/_sources/topic/pool.txt b/mps/manual/html/_sources/topic/pool.txt index 41d68b0d6bf..ad748310a22 100644 --- a/mps/manual/html/_sources/topic/pool.txt +++ b/mps/manual/html/_sources/topic/pool.txt | |||
| @@ -19,7 +19,7 @@ making it available for allocation. | |||
| 19 | :c:func:`mps_alloc` or via an :term:`allocation point`. | 19 | :c:func:`mps_alloc` or via an :term:`allocation point`. |
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | .. c:function:: mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t class, ...) | 22 | .. c:function:: mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t class, mps_arg_s args[]) |
| 23 | 23 | ||
| 24 | Create a :term:`pool` in an :term:`arena`. | 24 | Create a :term:`pool` in an :term:`arena`. |
| 25 | 25 | ||
| @@ -30,9 +30,8 @@ making it available for allocation. | |||
| 30 | 30 | ||
| 31 | ``class`` is the :term:`pool class` of the new pool. | 31 | ``class`` is the :term:`pool class` of the new pool. |
| 32 | 32 | ||
| 33 | Some pool classes require additional arguments to be passed to | 33 | ``args`` are :term:`keyword arguments` specific to the pool class. |
| 34 | :c:func:`mps_pool_create`. See the documentation for the pool | 34 | See the documentation for the pool class. |
| 35 | class. | ||
| 36 | 35 | ||
| 37 | Returns :c:macro:`MPS_RES_OK` if the pool is created successfully, | 36 | Returns :c:macro:`MPS_RES_OK` if the pool is created successfully, |
| 38 | or another :term:`result code` otherwise. | 37 | or another :term:`result code` otherwise. |
| @@ -40,16 +39,29 @@ making it available for allocation. | |||
| 40 | The pool persists until it is destroyed by calling | 39 | The pool persists until it is destroyed by calling |
| 41 | :c:func:`mps_pool_destroy`. | 40 | :c:func:`mps_pool_destroy`. |
| 42 | 41 | ||
| 43 | .. note:: | ||
| 44 | 42 | ||
| 45 | There's an alternative function :c:func:`pool_create_v` that | 43 | .. c:function:: mps_res_t mps_pool_create(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t class, ...) |
| 46 | takes its extra arguments using the standard :term:`C` | 44 | |
| 47 | ``va_list`` mechanism. | 45 | .. deprecated:: starting with version 1.112. |
| 46 | |||
| 47 | Use :c:func:`mps_pool_create_k` instead: the :term:`keyword | ||
| 48 | arguments` interface is more reliable and produces better | ||
| 49 | error messages. | ||
| 50 | |||
| 51 | An alternative to :c:func:`mps_pool_create_k` that takes its | ||
| 52 | extra arguments using the standard :term:`C` variable argument | ||
| 53 | list mechanism. | ||
| 48 | 54 | ||
| 49 | 55 | ||
| 50 | .. c:function:: mps_res_t mps_pool_create_v(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t class, va_list args) | 56 | .. c:function:: mps_res_t mps_pool_create_v(mps_pool_t *pool_o, mps_arena_t arena, mps_class_t class, va_list args) |
| 51 | 57 | ||
| 52 | An alternative to :c:func:`mps_pool_create` that takes its extra | 58 | .. deprecated:: starting with version 1.112. |
| 59 | |||
| 60 | Use :c:func:`mps_pool_create_k` instead: the :term:`keyword | ||
| 61 | arguments` interface is more reliable and produces better | ||
| 62 | error messages. | ||
| 63 | |||
| 64 | An alternative to :c:func:`mps_pool_create_k` that takes its extra | ||
| 53 | arguments using the standard :term:`C` ``va_list`` mechanism. | 65 | arguments using the standard :term:`C` ``va_list`` mechanism. |
| 54 | 66 | ||
| 55 | 67 | ||
diff --git a/mps/manual/html/_static/pygments.css b/mps/manual/html/_static/pygments.css index d79caa151c2..1a14f2ae1ab 100644 --- a/mps/manual/html/_static/pygments.css +++ b/mps/manual/html/_static/pygments.css | |||
| @@ -13,11 +13,11 @@ | |||
| 13 | .highlight .gr { color: #FF0000 } /* Generic.Error */ | 13 | .highlight .gr { color: #FF0000 } /* Generic.Error */ |
| 14 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | 14 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ |
| 15 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ | 15 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ |
| 16 | .highlight .go { color: #333333 } /* Generic.Output */ | 16 | .highlight .go { color: #303030 } /* Generic.Output */ |
| 17 | .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ | 17 | .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ |
| 18 | .highlight .gs { font-weight: bold } /* Generic.Strong */ | 18 | .highlight .gs { font-weight: bold } /* Generic.Strong */ |
| 19 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | 19 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ |
| 20 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ | 20 | .highlight .gt { color: #0040D0 } /* Generic.Traceback */ |
| 21 | .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ | 21 | .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ |
| 22 | .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ | 22 | .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ |
| 23 | .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ | 23 | .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ |
diff --git a/mps/manual/html/design/arena.html b/mps/manual/html/design/arena.html index a417e0492e4..61dee7ca97a 100644 --- a/mps/manual/html/design/arena.html +++ b/mps/manual/html/design/arena.html | |||
| @@ -286,7 +286,7 @@ design.mps.arena.tract-iter(0).</p> | |||
| 286 | <p><span class="target" id="design.mps.arena.tract.if.tractofaddr"></span><a class="mpstag reference internal" href="#design.mps.arena.tract.if.tractofaddr">.tract.if.tractofaddr:</a> The function <tt class="xref c c-func docutils literal"><span class="pre">TractOfAddr()</span></tt> | 286 | <p><span class="target" id="design.mps.arena.tract.if.tractofaddr"></span><a class="mpstag reference internal" href="#design.mps.arena.tract.if.tractofaddr">.tract.if.tractofaddr:</a> The function <tt class="xref c c-func docutils literal"><span class="pre">TractOfAddr()</span></tt> |
| 287 | finds the tract corresponding to an address in memory. (See | 287 | finds the tract corresponding to an address in memory. (See |
| 288 | <a class="reference internal" href="#design.mps.arena.req.fun.trans">.req.fun.trans</a>):</p> | 288 | <a class="reference internal" href="#design.mps.arena.req.fun.trans">.req.fun.trans</a>):</p> |
| 289 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="nf">TractOfAddr</span><span class="p">(</span><span class="n">Tract</span> <span class="o">*</span><span class="n">tractReturn</span><span class="p">,</span> <span class="n">Arena</span> <span class="n">arena</span><span class="p">,</span> <span class="n">Addr</span> <span class="n">addr</span><span class="p">);</span> | 289 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="n">TractOfAddr</span><span class="p">(</span><span class="n">Tract</span> <span class="o">*</span><span class="n">tractReturn</span><span class="p">,</span> <span class="n">Arena</span> <span class="n">arena</span><span class="p">,</span> <span class="n">Addr</span> <span class="n">addr</span><span class="p">);</span> |
| 290 | </pre></div> | 290 | </pre></div> |
| 291 | </div> | 291 | </div> |
| 292 | <p>If <tt class="docutils literal"><span class="pre">addr</span></tt> is an address which has been allocated to some pool, then | 292 | <p>If <tt class="docutils literal"><span class="pre">addr</span></tt> is an address which has been allocated to some pool, then |
diff --git a/mps/manual/html/design/bt.html b/mps/manual/html/design/bt.html index ff5dd9c4d3f..eaab3a6b356 100644 --- a/mps/manual/html/design/bt.html +++ b/mps/manual/html/design/bt.html | |||
| @@ -426,7 +426,7 @@ equals <tt class="docutils literal"><span class="pre">BTGet(BTy,i)</span></tt> f | |||
| 426 | <p><span class="target" id="design.mps.bt.if.find.general"></span><a class="mpstag reference internal" href="#design.mps.bt.if.find.general">.if.find.general:</a> There are four functions (below) to find | 426 | <p><span class="target" id="design.mps.bt.if.find.general"></span><a class="mpstag reference internal" href="#design.mps.bt.if.find.general">.if.find.general:</a> There are four functions (below) to find |
| 427 | reset ranges. All the functions have the same prototype (for | 427 | reset ranges. All the functions have the same prototype (for |
| 428 | symmetry):</p> | 428 | symmetry):</p> |
| 429 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="nf">find</span><span class="p">(</span><span class="n">Index</span> <span class="o">*</span><span class="n">baseReturn</span><span class="p">,</span> <span class="n">Index</span> <span class="o">*</span><span class="n">limitReturn</span><span class="p">,</span> | 429 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Bool</span> <span class="n">find</span><span class="p">(</span><span class="n">Index</span> <span class="o">*</span><span class="n">baseReturn</span><span class="p">,</span> <span class="n">Index</span> <span class="o">*</span><span class="n">limitReturn</span><span class="p">,</span> |
| 430 | <span class="n">BT</span> <span class="n">bt</span><span class="p">,</span> | 430 | <span class="n">BT</span> <span class="n">bt</span><span class="p">,</span> |
| 431 | <span class="n">Index</span> <span class="n">searchBase</span><span class="p">,</span> <span class="n">Index</span> <span class="n">searchLimit</span><span class="p">,</span> | 431 | <span class="n">Index</span> <span class="n">searchBase</span><span class="p">,</span> <span class="n">Index</span> <span class="n">searchLimit</span><span class="p">,</span> |
| 432 | <span class="n">Count</span> <span class="n">length</span><span class="p">);</span> | 432 | <span class="n">Count</span> <span class="n">length</span><span class="p">);</span> |
diff --git a/mps/manual/html/design/config.html b/mps/manual/html/design/config.html index 9572bf4ac71..07719552c5d 100644 --- a/mps/manual/html/design/config.html +++ b/mps/manual/html/design/config.html | |||
| @@ -416,19 +416,19 @@ parameter. However, the concrete interface may vary.</p> | |||
| 416 | <p>For example, this isn’t allowed, because there is a change in the | 416 | <p>For example, this isn’t allowed, because there is a change in the |
| 417 | interface:</p> | 417 | interface:</p> |
| 418 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#if defined(PROT_FOO)</span> | 418 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#if defined(PROT_FOO)</span> |
| 419 | <span class="kt">void</span> <span class="nf">ProtSpong</span><span class="p">(</span><span class="n">Foo</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Bar</span> <span class="n">bar</span><span class="p">);</span> | 419 | <span class="kt">void</span> <span class="n">ProtSpong</span><span class="p">(</span><span class="n">Foo</span> <span class="n">foo</span><span class="p">,</span> <span class="n">Bar</span> <span class="n">bar</span><span class="p">);</span> |
| 420 | <span class="cp">#else</span> | 420 | <span class="cp">#else</span> |
| 421 | <span class="kt">int</span> <span class="nf">ProtSpong</span><span class="p">(</span><span class="n">Bar</span> <span class="n">bar</span><span class="p">,</span> <span class="n">Foo</span> <span class="n">foo</span><span class="p">);</span> | 421 | <span class="kt">int</span> <span class="n">ProtSpong</span><span class="p">(</span><span class="n">Bar</span> <span class="n">bar</span><span class="p">,</span> <span class="n">Foo</span> <span class="n">foo</span><span class="p">);</span> |
| 422 | <span class="cp">#endif</span> | 422 | <span class="cp">#endif</span> |
| 423 | </pre></div> | 423 | </pre></div> |
| 424 | </div> | 424 | </div> |
| 425 | <p>This example is allowed:</p> | 425 | <p>This example is allowed:</p> |
| 426 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#ifdef PROTECTION</span> | 426 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#ifdef PROTECTION</span> |
| 427 | <span class="kt">void</span> <span class="nf">ProtSync</span><span class="p">(</span><span class="n">Space</span> <span class="n">space</span><span class="p">);</span> | 427 | <span class="kt">void</span> <span class="n">ProtSync</span><span class="p">(</span><span class="n">Space</span> <span class="n">space</span><span class="p">);</span> |
| 428 | <span class="cm">/* more decls. */</span> | 428 | <span class="cp">/* more decls. */</span> |
| 429 | <span class="cp">#else </span><span class="cm">/* PROTECTION not */</span><span class="cp"></span> | 429 | <span class="cp">#else </span><span class="cm">/* PROTECTION not */</span><span class="cp"></span> |
| 430 | <span class="cp">#define ProtSync(space) NOOP</span> | 430 | <span class="cp">#define ProtSync(space) NOOP</span> |
| 431 | <span class="cm">/* more decls. */</span> | 431 | <span class="cp">/* more decls. */</span> |
| 432 | <span class="cp">#endif </span><span class="cm">/* PROTECTION */</span><span class="cp"></span> | 432 | <span class="cp">#endif </span><span class="cm">/* PROTECTION */</span><span class="cp"></span> |
| 433 | </pre></div> | 433 | </pre></div> |
| 434 | </div> | 434 | </div> |
diff --git a/mps/manual/html/genindex.html b/mps/manual/html/genindex.html index ef065ed48de..945205996ca 100644 --- a/mps/manual/html/genindex.html +++ b/mps/manual/html/genindex.html | |||
| @@ -537,6 +537,17 @@ | |||
| 537 | </dt> | 537 | </dt> |
| 538 | 538 | ||
| 539 | 539 | ||
| 540 | <dt> | ||
| 541 | arguments | ||
| 542 | </dt> | ||
| 543 | |||
| 544 | <dd><dl> | ||
| 545 | |||
| 546 | <dt><a href="topic/keyword.html#index-0">keyword</a> | ||
| 547 | </dt> | ||
| 548 | |||
| 549 | </dl></dd> | ||
| 550 | |||
| 540 | <dt><a href="guide/debug.html#index-2">ASLR</a> | 551 | <dt><a href="guide/debug.html#index-2">ASLR</a> |
| 541 | </dt> | 552 | </dt> |
| 542 | 553 | ||
| @@ -896,6 +907,18 @@ | |||
| 896 | </dt> | 907 | </dt> |
| 897 | 908 | ||
| 898 | 909 | ||
| 910 | <dt><a href="glossary/c.html#term-c89"><strong>C89</strong></a> | ||
| 911 | </dt> | ||
| 912 | |||
| 913 | |||
| 914 | <dt><a href="glossary/c.html#term-c90"><strong>C90</strong></a> | ||
| 915 | </dt> | ||
| 916 | |||
| 917 | |||
| 918 | <dt><a href="glossary/c.html#term-c99"><strong>C99</strong></a> | ||
| 919 | </dt> | ||
| 920 | |||
| 921 | |||
| 899 | <dt><a href="glossary/c.html#term-cache-1"><strong>cache (1)</strong></a> | 922 | <dt><a href="glossary/c.html#term-cache-1"><strong>cache (1)</strong></a> |
| 900 | </dt> | 923 | </dt> |
| 901 | 924 | ||
| @@ -1075,6 +1098,8 @@ | |||
| 1075 | <dt><a href="mmref/lang.html#term-cobol"><strong>COBOL</strong></a> | 1098 | <dt><a href="mmref/lang.html#term-cobol"><strong>COBOL</strong></a> |
| 1076 | </dt> | 1099 | </dt> |
| 1077 | 1100 | ||
| 1101 | </dl></td> | ||
| 1102 | <td style="width: 33%" valign="top"><dl> | ||
| 1078 | 1103 | ||
| 1079 | <dt> | 1104 | <dt> |
| 1080 | code | 1105 | code |
| @@ -1086,8 +1111,6 @@ | |||
| 1086 | </dt> | 1111 | </dt> |
| 1087 | 1112 | ||
| 1088 | </dl></dd> | 1113 | </dl></dd> |
| 1089 | </dl></td> | ||
| 1090 | <td style="width: 33%" valign="top"><dl> | ||
| 1091 | 1114 | ||
| 1092 | <dt><a href="glossary/c.html#term-collect"><strong>collect</strong></a> | 1115 | <dt><a href="glossary/c.html#term-collect"><strong>collect</strong></a> |
| 1093 | </dt> | 1116 | </dt> |
| @@ -2233,9 +2256,24 @@ | |||
| 2233 | <dt><a href="glossary/k.html#term-kb"><strong>kB</strong></a> | 2256 | <dt><a href="glossary/k.html#term-kb"><strong>kB</strong></a> |
| 2234 | </dt> | 2257 | </dt> |
| 2235 | 2258 | ||
| 2259 | |||
| 2260 | <dt> | ||
| 2261 | keyword | ||
| 2262 | </dt> | ||
| 2263 | |||
| 2264 | <dd><dl> | ||
| 2265 | |||
| 2266 | <dt><a href="topic/keyword.html#index-0">arguments</a> | ||
| 2267 | </dt> | ||
| 2268 | |||
| 2269 | </dl></dd> | ||
| 2236 | </dl></td> | 2270 | </dl></td> |
| 2237 | <td style="width: 33%" valign="top"><dl> | 2271 | <td style="width: 33%" valign="top"><dl> |
| 2238 | 2272 | ||
| 2273 | <dt><a href="glossary/k.html#term-keyword-argument"><strong>keyword argument</strong></a> | ||
| 2274 | </dt> | ||
| 2275 | |||
| 2276 | |||
| 2239 | <dt><a href="glossary/k.html#term-kilobyte"><strong>kilobyte</strong></a> | 2277 | <dt><a href="glossary/k.html#term-kilobyte"><strong>kilobyte</strong></a> |
| 2240 | </dt> | 2278 | </dt> |
| 2241 | 2279 | ||
| @@ -2785,6 +2823,10 @@ | |||
| 2785 | </dt> | 2823 | </dt> |
| 2786 | 2824 | ||
| 2787 | 2825 | ||
| 2826 | <dt><a href="topic/allocation.html#mps_ap_create_k">mps_ap_create_k (C function)</a> | ||
| 2827 | </dt> | ||
| 2828 | |||
| 2829 | |||
| 2788 | <dt><a href="topic/allocation.html#mps_ap_create_v">mps_ap_create_v (C function)</a> | 2830 | <dt><a href="topic/allocation.html#mps_ap_create_v">mps_ap_create_v (C function)</a> |
| 2789 | </dt> | 2831 | </dt> |
| 2790 | 2832 | ||
| @@ -2861,6 +2903,10 @@ | |||
| 2861 | </dt> | 2903 | </dt> |
| 2862 | 2904 | ||
| 2863 | 2905 | ||
| 2906 | <dt><a href="topic/arena.html#mps_arena_create_k">mps_arena_create_k (C function)</a> | ||
| 2907 | </dt> | ||
| 2908 | |||
| 2909 | |||
| 2864 | <dt><a href="topic/arena.html#mps_arena_create_v">mps_arena_create_v (C function)</a> | 2910 | <dt><a href="topic/arena.html#mps_arena_create_v">mps_arena_create_v (C function)</a> |
| 2865 | </dt> | 2911 | </dt> |
| 2866 | 2912 | ||
| @@ -2937,6 +2983,30 @@ | |||
| 2937 | </dt> | 2983 | </dt> |
| 2938 | 2984 | ||
| 2939 | 2985 | ||
| 2986 | <dt><a href="topic/keyword.html#mps_arg_s">mps_arg_s (C type)</a> | ||
| 2987 | </dt> | ||
| 2988 | |||
| 2989 | |||
| 2990 | <dt><a href="topic/keyword.html#MPS_ARGS_ADD">MPS_ARGS_ADD (C function)</a> | ||
| 2991 | </dt> | ||
| 2992 | |||
| 2993 | |||
| 2994 | <dt><a href="topic/keyword.html#MPS_ARGS_BEGIN">MPS_ARGS_BEGIN (C function)</a> | ||
| 2995 | </dt> | ||
| 2996 | |||
| 2997 | |||
| 2998 | <dt><a href="topic/keyword.html#MPS_ARGS_DONE">MPS_ARGS_DONE (C function)</a> | ||
| 2999 | </dt> | ||
| 3000 | |||
| 3001 | |||
| 3002 | <dt><a href="topic/keyword.html#MPS_ARGS_END">MPS_ARGS_END (C function)</a> | ||
| 3003 | </dt> | ||
| 3004 | |||
| 3005 | |||
| 3006 | <dt><a href="topic/keyword.html#mps_args_none">mps_args_none (C macro)</a> | ||
| 3007 | </dt> | ||
| 3008 | |||
| 3009 | |||
| 2940 | <dt><a href="pool/awl.html#mps_awl_find_dependent_t">mps_awl_find_dependent_t (C type)</a> | 3010 | <dt><a href="pool/awl.html#mps_awl_find_dependent_t">mps_awl_find_dependent_t (C type)</a> |
| 2941 | </dt> | 3011 | </dt> |
| 2942 | 3012 | ||
| @@ -3128,6 +3198,8 @@ | |||
| 3128 | <dt><a href="topic/format.html#mps_fmt_isfwd_t">mps_fmt_isfwd_t (C type)</a> | 3198 | <dt><a href="topic/format.html#mps_fmt_isfwd_t">mps_fmt_isfwd_t (C type)</a> |
| 3129 | </dt> | 3199 | </dt> |
| 3130 | 3200 | ||
| 3201 | </dl></td> | ||
| 3202 | <td style="width: 33%" valign="top"><dl> | ||
| 3131 | 3203 | ||
| 3132 | <dt><a href="topic/format.html#mps_fmt_pad_t">mps_fmt_pad_t (C type)</a> | 3204 | <dt><a href="topic/format.html#mps_fmt_pad_t">mps_fmt_pad_t (C type)</a> |
| 3133 | </dt> | 3205 | </dt> |
| @@ -3144,8 +3216,6 @@ | |||
| 3144 | <dt><a href="topic/format.html#mps_fmt_skip_t">mps_fmt_skip_t (C type)</a> | 3216 | <dt><a href="topic/format.html#mps_fmt_skip_t">mps_fmt_skip_t (C type)</a> |
| 3145 | </dt> | 3217 | </dt> |
| 3146 | 3218 | ||
| 3147 | </dl></td> | ||
| 3148 | <td style="width: 33%" valign="top"><dl> | ||
| 3149 | 3219 | ||
| 3150 | <dt><a href="topic/format.html#mps_fmt_t">mps_fmt_t (C type)</a> | 3220 | <dt><a href="topic/format.html#mps_fmt_t">mps_fmt_t (C type)</a> |
| 3151 | </dt> | 3221 | </dt> |
| @@ -3187,6 +3257,10 @@ | |||
| 3187 | </dt> | 3257 | </dt> |
| 3188 | 3258 | ||
| 3189 | 3259 | ||
| 3260 | <dt><a href="topic/keyword.html#mps_key_t">mps_key_t (C type)</a> | ||
| 3261 | </dt> | ||
| 3262 | |||
| 3263 | |||
| 3190 | <dt><a href="topic/interface.html#mps_label_t">mps_label_t (C type)</a> | 3264 | <dt><a href="topic/interface.html#mps_label_t">mps_label_t (C type)</a> |
| 3191 | </dt> | 3265 | </dt> |
| 3192 | 3266 | ||
| @@ -3427,7 +3501,7 @@ | |||
| 3427 | </dt> | 3501 | </dt> |
| 3428 | 3502 | ||
| 3429 | 3503 | ||
| 3430 | <dt><a href="topic/pool.html#mps_pool_create">mps_pool_create (C function)</a> | 3504 | <dt><a href="topic/pool.html#mps_pool_create">mps_pool_create (C function)</a>, <a href="topic/pool.html#mps_pool_create">[1]</a> |
| 3431 | </dt> | 3505 | </dt> |
| 3432 | 3506 | ||
| 3433 | 3507 | ||
diff --git a/mps/manual/html/glossary/c.html b/mps/manual/html/glossary/c.html index a264da7974a..74e2d1dbb3b 100644 --- a/mps/manual/html/glossary/c.html +++ b/mps/manual/html/glossary/c.html | |||
| @@ -83,6 +83,45 @@ | |||
| 83 | | Y | 83 | | Y |
| 84 | | <a class="reference internal" href="z.html#glossary-z"><em>Z</em></a></p> | 84 | | <a class="reference internal" href="z.html#glossary-z"><em>Z</em></a></p> |
| 85 | <dl class="glossary docutils"> | 85 | <dl class="glossary docutils"> |
| 86 | <dt id="term-c89">C89</dt> | ||
| 87 | <dd><div class="admonition-see first last admonition"> | ||
| 88 | <p class="first admonition-title">See</p> | ||
| 89 | <p class="last"><a class="reference internal" href="#term-c90"><em class="xref std std-term">C90</em></a>.</p> | ||
| 90 | </div> | ||
| 91 | </dd> | ||
| 92 | <dt id="term-c90">C90</dt> | ||
| 93 | <dd><div class="admonition-also-known-as first admonition"> | ||
| 94 | <p class="first admonition-title">Also known as</p> | ||
| 95 | <p class="last"><em>C89</em>.</p> | ||
| 96 | </div> | ||
| 97 | <p>A revision of the ANSI/ISO Standard for the <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> | ||
| 98 | programming language. Although more than twenty years old, it | ||
| 99 | remains the only form of Standard C that is supported by all | ||
| 100 | the major compilers, including Microsoft Visual C.</p> | ||
| 101 | <div class="admonition-in-the-mps admonition"> | ||
| 102 | <p class="first admonition-title">In the MPS</p> | ||
| 103 | <p class="last">The public interface conforms to this standard. See | ||
| 104 | <a class="reference internal" href="../topic/interface.html#topic-interface"><em>Interface conventions</em></a>.</p> | ||
| 105 | </div> | ||
| 106 | <div class="admonition-related-publication last admonition"> | ||
| 107 | <p class="first admonition-title">Related publication</p> | ||
| 108 | <p class="last"><a class="reference internal" href="../mmref/bib.html#c1990"><em>ISO/IEC 9899:1990</em></a>.</p> | ||
| 109 | </div> | ||
| 110 | </dd> | ||
| 111 | <dt id="term-c99">C99</dt> | ||
| 112 | <dd><p class="first">A revision of the ANSI/ISO Standard for C the <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> | ||
| 113 | programming language.</p> | ||
| 114 | <div class="admonition-in-the-mps admonition"> | ||
| 115 | <p class="first admonition-title">In the MPS</p> | ||
| 116 | <p class="last"><a class="reference internal" href="k.html#term-keyword-argument"><em class="xref std std-term">Keyword arguments</em></a> can be conveniently passed to | ||
| 117 | functions using C99’s compound literal syntax. See | ||
| 118 | <a class="reference internal" href="../topic/keyword.html#topic-keyword"><em>Keyword arguments</em></a>.</p> | ||
| 119 | </div> | ||
| 120 | <div class="admonition-related-publication last admonition"> | ||
| 121 | <p class="first admonition-title">Related publication</p> | ||
| 122 | <p class="last"><a class="reference internal" href="../mmref/bib.html#c1999"><em>ISO/IEC 9899:1999</em></a>.</p> | ||
| 123 | </div> | ||
| 124 | </dd> | ||
| 86 | <dt id="term-cache-1">cache<sup>(1)</sup></dt> | 125 | <dt id="term-cache-1">cache<sup>(1)</sup></dt> |
| 87 | <dd><div class="admonition-also-known-as first admonition"> | 126 | <dd><div class="admonition-also-known-as first admonition"> |
| 88 | <p class="first admonition-title">Also known as</p> | 127 | <p class="first admonition-title">Also known as</p> |
diff --git a/mps/manual/html/glossary/k.html b/mps/manual/html/glossary/k.html index be1517f5450..ba862822c07 100644 --- a/mps/manual/html/glossary/k.html +++ b/mps/manual/html/glossary/k.html | |||
| @@ -89,6 +89,16 @@ | |||
| 89 | <p class="last"><a class="reference internal" href="#term-kilobyte"><em class="xref std std-term">kilobyte</em></a>.</p> | 89 | <p class="last"><a class="reference internal" href="#term-kilobyte"><em class="xref std std-term">kilobyte</em></a>.</p> |
| 90 | </div> | 90 | </div> |
| 91 | </dd> | 91 | </dd> |
| 92 | <dt id="term-keyword-argument">keyword argument</dt> | ||
| 93 | <dd><p class="first">An optional argument to a function call, identified by an | ||
| 94 | associated keyword.</p> | ||
| 95 | <div class="admonition-in-the-mps last admonition"> | ||
| 96 | <p class="first admonition-title">In the MPS</p> | ||
| 97 | <p class="last">Keyword arguments are passed to functions in the MPS | ||
| 98 | interface as arrays of structures of type | ||
| 99 | <a class="reference internal" href="../topic/keyword.html#mps_arg_s" title="mps_arg_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_arg_s</span></tt></a>. See <a class="reference internal" href="../topic/keyword.html#topic-keyword"><em>Keyword arguments</em></a>.</p> | ||
| 100 | </div> | ||
| 101 | </dd> | ||
| 92 | <dt id="term-kilobyte">kilobyte</dt> | 102 | <dt id="term-kilobyte">kilobyte</dt> |
| 93 | <dd><div class="admonition-also-known-as first admonition"> | 103 | <dd><div class="admonition-also-known-as first admonition"> |
| 94 | <p class="first admonition-title">Also known as</p> | 104 | <p class="first admonition-title">Also known as</p> |
diff --git a/mps/manual/html/guide/advanced.html b/mps/manual/html/guide/advanced.html index bf29a49f776..62fc10c65b7 100644 --- a/mps/manual/html/guide/advanced.html +++ b/mps/manual/html/guide/advanced.html | |||
| @@ -61,8 +61,8 @@ | |||
| 61 | <p>In Scheme, an open file is represented by a <em>port</em>. In the toy Scheme | 61 | <p>In Scheme, an open file is represented by a <em>port</em>. In the toy Scheme |
| 62 | interpreter, a port is a wrapper around a standard C file handle:</p> | 62 | interpreter, a port is a wrapper around a standard C file handle:</p> |
| 63 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">port_s</span> <span class="p">{</span> | 63 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">port_s</span> <span class="p">{</span> |
| 64 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PORT */</span> | 64 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PORT */</span> |
| 65 | <span class="kt">obj_t</span> <span class="n">name</span><span class="p">;</span> <span class="cm">/* name of stream */</span> | 65 | <span class="n">obj_t</span> <span class="n">name</span><span class="p">;</span> <span class="cm">/* name of stream */</span> |
| 66 | <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> | 66 | <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">;</span> |
| 67 | <span class="p">}</span> <span class="n">port_s</span><span class="p">;</span> | 67 | <span class="p">}</span> <span class="n">port_s</span><span class="p">;</span> |
| 68 | </pre></div> | 68 | </pre></div> |
| @@ -84,14 +84,14 @@ reliable mechanisms for releasing resources (like Scheme’s | |||
| 84 | <p>Any block in an <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically managed</em></a> <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a> can be registered for finalization by calling | 84 | <p>Any block in an <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically managed</em></a> <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a> can be registered for finalization by calling |
| 85 | <a class="reference internal" href="../topic/finalization.html#mps_finalize" title="mps_finalize"><tt class="xref c c-func docutils literal"><span class="pre">mps_finalize()</span></tt></a>. In the toy Scheme interpreter, this can be done | 85 | <a class="reference internal" href="../topic/finalization.html#mps_finalize" title="mps_finalize"><tt class="xref c c-func docutils literal"><span class="pre">mps_finalize()</span></tt></a>. In the toy Scheme interpreter, this can be done |
| 86 | in <tt class="docutils literal"><span class="pre">make_port</span></tt>:</p> | 86 | in <tt class="docutils literal"><span class="pre">make_port</span></tt>:</p> |
| 87 | <div class="highlight-c"><div class="highlight"><pre> <span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_port</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">name</span><span class="p">,</span> <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> | 87 | <div class="highlight-c"><div class="highlight"><pre> <span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_port</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">name</span><span class="p">,</span> <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> |
| 88 | <span class="p">{</span> | 88 | <span class="p">{</span> |
| 89 | <span class="kt">mps_addr_t</span> <span class="n">port_ref</span><span class="p">;</span> | 89 | <span class="n">mps_addr_t</span> <span class="n">port_ref</span><span class="p">;</span> |
| 90 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 90 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 91 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 91 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 92 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">port_s</span><span class="p">));</span> | 92 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">port_s</span><span class="p">));</span> |
| 93 | <span class="k">do</span> <span class="p">{</span> | 93 | <span class="k">do</span> <span class="p">{</span> |
| 94 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 94 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 95 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_port"</span><span class="p">);</span> | 95 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_port"</span><span class="p">);</span> |
| 96 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 96 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 97 | <span class="n">obj</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PORT</span><span class="p">;</span> | 97 | <span class="n">obj</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PORT</span><span class="p">;</span> |
| @@ -127,17 +127,17 @@ reachable.</p> | |||
| 127 | message queue is at the start of the read–eval–print loop. When a | 127 | message queue is at the start of the read–eval–print loop. When a |
| 128 | finalization message is found, the associated file handle is closed | 128 | finalization message is found, the associated file handle is closed |
| 129 | (unless it has been closed already), and the message is discarded.</p> | 129 | (unless it has been closed already), and the message is discarded.</p> |
| 130 | <div class="highlight-c"><div class="highlight"><pre> <span class="kt">mps_message_type_t</span> <span class="n">type</span><span class="p">;</span> | 130 | <div class="highlight-c"><div class="highlight"><pre> <span class="n">mps_message_type_t</span> <span class="n">type</span><span class="p">;</span> |
| 131 | 131 | ||
| 132 | <span class="k">while</span> <span class="p">(</span><span class="n">mps_message_queue_type</span><span class="p">(</span><span class="o">&</span><span class="n">type</span><span class="p">,</span> <span class="n">arena</span><span class="p">))</span> <span class="p">{</span> | 132 | <span class="k">while</span> <span class="p">(</span><span class="n">mps_message_queue_type</span><span class="p">(</span><span class="o">&</span><span class="n">type</span><span class="p">,</span> <span class="n">arena</span><span class="p">))</span> <span class="p">{</span> |
| 133 | <span class="kt">mps_message_t</span> <span class="n">message</span><span class="p">;</span> | 133 | <span class="n">mps_message_t</span> <span class="n">message</span><span class="p">;</span> |
| 134 | <span class="kt">mps_bool_t</span> <span class="n">b</span><span class="p">;</span> | 134 | <span class="n">mps_bool_t</span> <span class="n">b</span><span class="p">;</span> |
| 135 | <span class="n">b</span> <span class="o">=</span> <span class="n">mps_message_get</span><span class="p">(</span><span class="o">&</span><span class="n">message</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">type</span><span class="p">);</span> | 135 | <span class="n">b</span> <span class="o">=</span> <span class="n">mps_message_get</span><span class="p">(</span><span class="o">&</span><span class="n">message</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">type</span><span class="p">);</span> |
| 136 | <span class="n">assert</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> <span class="cm">/* we just checked there was one */</span> | 136 | <span class="n">assert</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> <span class="cm">/* we just checked there was one */</span> |
| 137 | 137 | ||
| 138 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o">==</span> <span class="n">mps_message_type_finalization</span><span class="p">())</span> <span class="p">{</span> | 138 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o">==</span> <span class="n">mps_message_type_finalization</span><span class="p">())</span> <span class="p">{</span> |
| 139 | </span> <span class="kt">mps_addr_t</span> <span class="n">port_ref</span><span class="p">;</span> | 139 | </span> <span class="n">mps_addr_t</span> <span class="n">port_ref</span><span class="p">;</span> |
| 140 | <span class="kt">obj_t</span> <span class="n">port</span><span class="p">;</span> | 140 | <span class="n">obj_t</span> <span class="n">port</span><span class="p">;</span> |
| 141 | <span class="hll"> <span class="n">mps_message_finalization_ref</span><span class="p">(</span><span class="o">&</span><span class="n">port_ref</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> | 141 | <span class="hll"> <span class="n">mps_message_finalization_ref</span><span class="p">(</span><span class="o">&</span><span class="n">port_ref</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> |
| 142 | </span> <span class="n">port</span> <span class="o">=</span> <span class="n">port_ref</span><span class="p">;</span> | 142 | </span> <span class="n">port</span> <span class="o">=</span> <span class="n">port_ref</span><span class="p">;</span> |
| 143 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">port</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_PORT</span><span class="p">);</span> | 143 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">port</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_PORT</span><span class="p">);</span> |
| @@ -176,11 +176,11 @@ finalization message is found, the associated file handle is closed | |||
| 176 | optimization: setting <tt class="docutils literal"><span class="pre">stream</span></tt> to <tt class="docutils literal"><span class="pre">NULL</span></tt> ensures that the file | 176 | optimization: setting <tt class="docutils literal"><span class="pre">stream</span></tt> to <tt class="docutils literal"><span class="pre">NULL</span></tt> ensures that the file |
| 177 | handle wouldn’t be closed more than once, even if the port object were | 177 | handle wouldn’t be closed more than once, even if the port object were |
| 178 | later finalized.</p> | 178 | later finalized.</p> |
| 179 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">port_close</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">port</span><span class="p">)</span> | 179 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">port_close</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">port</span><span class="p">)</span> |
| 180 | <span class="p">{</span> | 180 | <span class="p">{</span> |
| 181 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">port</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_PORT</span><span class="p">);</span> | 181 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">port</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_PORT</span><span class="p">);</span> |
| 182 | <span class="k">if</span><span class="p">(</span><span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 182 | <span class="k">if</span><span class="p">(</span><span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| 183 | <span class="kt">mps_addr_t</span> <span class="n">port_ref</span> <span class="o">=</span> <span class="n">port</span><span class="p">;</span> | 183 | <span class="n">mps_addr_t</span> <span class="n">port_ref</span> <span class="o">=</span> <span class="n">port</span><span class="p">;</span> |
| 184 | <span class="n">fclose</span><span class="p">(</span><span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span><span class="p">);</span> | 184 | <span class="n">fclose</span><span class="p">(</span><span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span><span class="p">);</span> |
| 185 | <span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> | 185 | <span class="n">port</span><span class="o">-></span><span class="n">port</span><span class="p">.</span><span class="n">stream</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> |
| 186 | <span class="hll"> <span class="n">mps_definalize</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">port_ref</span><span class="p">);</span> | 186 | <span class="hll"> <span class="n">mps_definalize</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">port_ref</span><span class="p">);</span> |
| @@ -253,24 +253,24 @@ depended on might have moved since their location was depended upon.</p> | |||
| 253 | case of a hash table, it is most convenient to inline it in the hash | 253 | case of a hash table, it is most convenient to inline it in the hash |
| 254 | table’s metadata:</p> | 254 | table’s metadata:</p> |
| 255 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">table_s</span> <span class="p">{</span> | 255 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">table_s</span> <span class="p">{</span> |
| 256 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_TABLE */</span> | 256 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_TABLE */</span> |
| 257 | <span class="kt">hash_t</span> <span class="n">hash</span><span class="p">;</span> <span class="cm">/* hash function */</span> | 257 | <span class="n">hash_t</span> <span class="n">hash</span><span class="p">;</span> <span class="cm">/* hash function */</span> |
| 258 | <span class="kt">cmp_t</span> <span class="n">cmp</span><span class="p">;</span> <span class="cm">/* comparison function */</span> | 258 | <span class="n">cmp_t</span> <span class="n">cmp</span><span class="p">;</span> <span class="cm">/* comparison function */</span> |
| 259 | <span class="hll"> <span class="n">mps_ld_s</span> <span class="n">ld</span><span class="p">;</span> <span class="cm">/* location dependency */</span> | 259 | <span class="hll"> <span class="n">mps_ld_s</span> <span class="n">ld</span><span class="p">;</span> <span class="cm">/* location dependency */</span> |
| 260 | </span> <span class="kt">obj_t</span> <span class="n">buckets</span><span class="p">;</span> <span class="cm">/* hash buckets */</span> | 260 | </span> <span class="n">obj_t</span> <span class="n">buckets</span><span class="p">;</span> <span class="cm">/* hash buckets */</span> |
| 261 | <span class="p">}</span> <span class="n">table_s</span><span class="p">;</span> | 261 | <span class="p">}</span> <span class="n">table_s</span><span class="p">;</span> |
| 262 | </pre></div> | 262 | </pre></div> |
| 263 | </div> | 263 | </div> |
| 264 | <p>Before being used, the location dependency must be reset to indicate | 264 | <p>Before being used, the location dependency must be reset to indicate |
| 265 | that nothing is depended upon, by calling <a class="reference internal" href="../topic/location.html#mps_ld_reset" title="mps_ld_reset"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_reset()</span></tt></a>.</p> | 265 | that nothing is depended upon, by calling <a class="reference internal" href="../topic/location.html#mps_ld_reset" title="mps_ld_reset"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_reset()</span></tt></a>.</p> |
| 266 | <p>For example:</p> | 266 | <p>For example:</p> |
| 267 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_table</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">hash_t</span> <span class="n">hashf</span><span class="p">,</span> <span class="kt">cmp_t</span> <span class="n">cmpf</span><span class="p">)</span> | 267 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_table</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="n">hash_t</span> <span class="n">hashf</span><span class="p">,</span> <span class="n">cmp_t</span> <span class="n">cmpf</span><span class="p">)</span> |
| 268 | <span class="p">{</span> | 268 | <span class="p">{</span> |
| 269 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 269 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 270 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 270 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 271 | <span class="kt">size_t</span> <span class="n">l</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">table_s</span><span class="p">));</span> | 271 | <span class="kt">size_t</span> <span class="n">l</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">table_s</span><span class="p">));</span> |
| 272 | <span class="k">do</span> <span class="p">{</span> | 272 | <span class="k">do</span> <span class="p">{</span> |
| 273 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 273 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 274 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_table"</span><span class="p">);</span> | 274 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_table"</span><span class="p">);</span> |
| 275 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 275 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 276 | <span class="n">obj</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_TABLE</span><span class="p">;</span> | 276 | <span class="n">obj</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_TABLE</span><span class="p">;</span> |
| @@ -296,12 +296,12 @@ have taken place after the hash was computed but before you added the | |||
| 296 | dependency.)</p> | 296 | dependency.)</p> |
| 297 | <p>In the toy Scheme interpreter, this is done just before the computation | 297 | <p>In the toy Scheme interpreter, this is done just before the computation |
| 298 | of the hash of the address.</p> | 298 | of the hash of the address.</p> |
| 299 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eq_hash</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="kt">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> | 299 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eq_hash</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="n">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> |
| 300 | <span class="p">{</span> | 300 | <span class="p">{</span> |
| 301 | <span class="k">union</span> <span class="p">{</span><span class="kt">char</span> <span class="n">s</span><span class="p">[</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">obj_t</span><span class="p">)];</span> <span class="kt">obj_t</span> <span class="n">addr</span><span class="p">;}</span> <span class="n">u</span><span class="p">;</span> | 301 | <span class="k">union</span> <span class="p">{</span><span class="kt">char</span> <span class="n">s</span><span class="p">[</span><span class="k">sizeof</span><span class="p">(</span><span class="n">obj_t</span><span class="p">)];</span> <span class="n">obj_t</span> <span class="n">addr</span><span class="p">;}</span> <span class="n">u</span><span class="p">;</span> |
| 302 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">ld</span><span class="p">)</span> <span class="n">mps_ld_add</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> | 302 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">ld</span><span class="p">)</span> <span class="n">mps_ld_add</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> |
| 303 | </span> <span class="n">u</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">obj</span><span class="p">;</span> | 303 | </span> <span class="n">u</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">obj</span><span class="p">;</span> |
| 304 | <span class="k">return</span> <span class="n">hash</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">s</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">obj_t</span><span class="p">));</span> | 304 | <span class="k">return</span> <span class="n">hash</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">s</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">obj_t</span><span class="p">));</span> |
| 305 | <span class="p">}</span> | 305 | <span class="p">}</span> |
| 306 | </pre></div> | 306 | </pre></div> |
| 307 | </div> | 307 | </div> |
| @@ -309,7 +309,7 @@ of the hash of the address.</p> | |||
| 309 | avoids adding unnecessary dependencies on a location. For example, an | 309 | avoids adding unnecessary dependencies on a location. For example, an |
| 310 | <tt class="docutils literal"><span class="pre">eqv?</span></tt> hash table does not need to depend on the location of numbers | 310 | <tt class="docutils literal"><span class="pre">eqv?</span></tt> hash table does not need to depend on the location of numbers |
| 311 | and characters:</p> | 311 | and characters:</p> |
| 312 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eqv_hash</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="kt">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> | 312 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eqv_hash</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="n">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> |
| 313 | <span class="p">{</span> | 313 | <span class="p">{</span> |
| 314 | <span class="k">switch</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> | 314 | <span class="k">switch</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> |
| 315 | <span class="k">case</span> <span class="n">TYPE_INTEGER</span>: | 315 | <span class="k">case</span> <span class="n">TYPE_INTEGER</span>: |
| @@ -339,7 +339,7 @@ the key is stale: that is, if the garbage collector moved the key. The | |||
| 339 | function <a class="reference internal" href="../topic/location.html#mps_ld_isstale" title="mps_ld_isstale"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_isstale()</span></tt></a> tells you if any of the blocks whose | 339 | function <a class="reference internal" href="../topic/location.html#mps_ld_isstale" title="mps_ld_isstale"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_isstale()</span></tt></a> tells you if any of the blocks whose |
| 340 | locations you depended upon since the last call to | 340 | locations you depended upon since the last call to |
| 341 | <a class="reference internal" href="../topic/location.html#mps_ld_reset" title="mps_ld_reset"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_reset()</span></tt></a> might have moved.</p> | 341 | <a class="reference internal" href="../topic/location.html#mps_ld_reset" title="mps_ld_reset"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_reset()</span></tt></a> might have moved.</p> |
| 342 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">table_ref</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">key</span><span class="p">)</span> | 342 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">table_ref</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">key</span><span class="p">)</span> |
| 343 | <span class="p">{</span> | 343 | <span class="p">{</span> |
| 344 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span> <span class="o">=</span> <span class="n">buckets_find</span><span class="p">(</span><span class="n">tbl</span><span class="p">,</span> <span class="n">tbl</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">buckets</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> | 344 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span> <span class="o">=</span> <span class="n">buckets_find</span><span class="p">(</span><span class="n">tbl</span><span class="p">,</span> <span class="n">tbl</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">buckets</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| 345 | <span class="k">if</span> <span class="p">(</span><span class="n">b</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="n">obj_deleted</span><span class="p">)</span> | 345 | <span class="k">if</span> <span class="p">(</span><span class="n">b</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="n">obj_deleted</span><span class="p">)</span> |
| @@ -425,7 +425,7 @@ causes <a class="reference internal" href="../topic/location.html#mps_ld_isstale | |||
| 425 | <p>Don’t forget to check the location dependency for staleness if you are | 425 | <p>Don’t forget to check the location dependency for staleness if you are |
| 426 | about to delete a key from a hash table but discover that it’s not | 426 | about to delete a key from a hash table but discover that it’s not |
| 427 | there. In the toy Scheme interpreter, deletion looks like this:</p> | 427 | there. In the toy Scheme interpreter, deletion looks like this:</p> |
| 428 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">table_delete</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">key</span><span class="p">)</span> | 428 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">table_delete</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">key</span><span class="p">)</span> |
| 429 | <span class="p">{</span> | 429 | <span class="p">{</span> |
| 430 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span><span class="p">;</span> | 430 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span><span class="p">;</span> |
| 431 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">tbl</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_TABLE</span><span class="p">);</span> | 431 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">tbl</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_TABLE</span><span class="p">);</span> |
| @@ -500,9 +500,9 @@ vectors, one for the keys and the other for the values, to allow keys | |||
| 500 | and values to have different ranks.</p> | 500 | and values to have different ranks.</p> |
| 501 | <p>These vectors will be allocated from an AWL pool with two allocation | 501 | <p>These vectors will be allocated from an AWL pool with two allocation |
| 502 | points, one for strong references, and one for weak references:</p> | 502 | points, one for strong references, and one for weak references:</p> |
| 503 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_pool_t</span> <span class="n">buckets_pool</span><span class="p">;</span> <span class="cm">/* pool for hash table buckets */</span> | 503 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_pool_t</span> <span class="n">buckets_pool</span><span class="p">;</span> <span class="cm">/* pool for hash table buckets */</span> |
| 504 | <span class="k">static</span> <span class="kt">mps_ap_t</span> <span class="n">strong_buckets_ap</span><span class="p">;</span> <span class="cm">/* allocation point for strong buckets */</span> | 504 | <span class="k">static</span> <span class="n">mps_ap_t</span> <span class="n">strong_buckets_ap</span><span class="p">;</span> <span class="cm">/* allocation point for strong buckets */</span> |
| 505 | <span class="k">static</span> <span class="kt">mps_ap_t</span> <span class="n">weak_buckets_ap</span><span class="p">;</span> <span class="cm">/* allocation point for weak buckets */</span> | 505 | <span class="k">static</span> <span class="n">mps_ap_t</span> <span class="n">weak_buckets_ap</span><span class="p">;</span> <span class="cm">/* allocation point for weak buckets */</span> |
| 506 | </pre></div> | 506 | </pre></div> |
| 507 | </div> | 507 | </div> |
| 508 | <div class="admonition-note admonition"> | 508 | <div class="admonition-note admonition"> |
| @@ -515,16 +515,16 @@ allocated in a <em>non-moving</em> pool such as AWL.</p> | |||
| 515 | replacing it with a null pointer when it is <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fixed</em></a> by the object | 515 | replacing it with a null pointer when it is <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fixed</em></a> by the object |
| 516 | format’s <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>. So the scan method for the buckets is | 516 | format’s <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>. So the scan method for the buckets is |
| 517 | going to have the following structure. (See below for the actual code.)</p> | 517 | going to have the following structure. (See below for the actual code.)</p> |
| 518 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">buckets_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 518 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">buckets_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 519 | <span class="p">{</span> | 519 | <span class="p">{</span> |
| 520 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 520 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 521 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 521 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 522 | <span class="kt">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 522 | <span class="n">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 523 | <span class="kt">size_t</span> <span class="n">length</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">;</span> | 523 | <span class="kt">size_t</span> <span class="n">length</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">;</span> |
| 524 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> | 524 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> |
| 525 | <span class="kt">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">bucket</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> | 525 | <span class="n">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">bucket</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> |
| 526 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> | 526 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> |
| 527 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 527 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| 528 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> | 528 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| 529 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 529 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| 530 | <span class="cm">/* TODO: key/value was splatted: splat value/key too */</span> | 530 | <span class="cm">/* TODO: key/value was splatted: splat value/key too */</span> |
| @@ -556,9 +556,9 @@ and vice versa.</p> | |||
| 556 | <p>The AWL pool determines an object’s dependent object by calling a | 556 | <p>The AWL pool determines an object’s dependent object by calling a |
| 557 | function that you supply when creating the pool. This means that each | 557 | function that you supply when creating the pool. This means that each |
| 558 | object needs to have a reference to its dependent object:</p> | 558 | object needs to have a reference to its dependent object:</p> |
| 559 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_addr_t</span> <span class="nf">buckets_find_dependent</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> | 559 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_addr_t</span> <span class="nf">buckets_find_dependent</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> |
| 560 | <span class="p">{</span> | 560 | <span class="p">{</span> |
| 561 | <span class="kt">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 561 | <span class="n">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 562 | <span class="k">return</span> <span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> | 562 | <span class="k">return</span> <span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> |
| 563 | <span class="p">}</span> | 563 | <span class="p">}</span> |
| 564 | </pre></div> | 564 | </pre></div> |
| @@ -580,25 +580,25 @@ See the <a class="reference internal" href="../pool/awl.html#pool-awl-caution">< | |||
| 580 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* number of buckets (tagged) */</span> | 580 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* number of buckets (tagged) */</span> |
| 581 | <span class="kt">size_t</span> <span class="n">used</span><span class="p">;</span> <span class="cm">/* number of buckets in use (tagged) */</span> | 581 | <span class="kt">size_t</span> <span class="n">used</span><span class="p">;</span> <span class="cm">/* number of buckets in use (tagged) */</span> |
| 582 | <span class="kt">size_t</span> <span class="n">deleted</span><span class="p">;</span> <span class="cm">/* number of deleted buckets (tagged) */</span> | 582 | <span class="kt">size_t</span> <span class="n">deleted</span><span class="p">;</span> <span class="cm">/* number of deleted buckets (tagged) */</span> |
| 583 | <span class="kt">obj_t</span> <span class="n">bucket</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="cm">/* hash buckets */</span> | 583 | <span class="n">obj_t</span> <span class="n">bucket</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="cm">/* hash buckets */</span> |
| 584 | <span class="p">}</span> <span class="n">buckets_s</span><span class="p">,</span> <span class="o">*</span><span class="kt">buckets_t</span><span class="p">;</span> | 584 | <span class="p">}</span> <span class="n">buckets_s</span><span class="p">,</span> <span class="o">*</span><span class="n">buckets_t</span><span class="p">;</span> |
| 585 | </pre></div> | 585 | </pre></div> |
| 586 | </div> | 586 | </div> |
| 587 | <p>Now the full details of the scan method can be given, with the revised | 587 | <p>Now the full details of the scan method can be given, with the revised |
| 588 | code highlighted:</p> | 588 | code highlighted:</p> |
| 589 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">buckets_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 589 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">buckets_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 590 | <span class="p">{</span> | 590 | <span class="p">{</span> |
| 591 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 591 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 592 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 592 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 593 | <span class="kt">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 593 | <span class="n">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 594 | <span class="hll"> <span class="kt">size_t</span> <span class="n">i</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">UNTAG_SIZE</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> | 594 | <span class="hll"> <span class="kt">size_t</span> <span class="n">i</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">UNTAG_SIZE</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> |
| 595 | </span><span class="hll"> <span class="n">FIX</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="p">);</span> | 595 | </span><span class="hll"> <span class="n">FIX</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="p">);</span> |
| 596 | </span><span class="hll"> <span class="k">if</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> | 596 | </span><span class="hll"> <span class="k">if</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> |
| 597 | </span><span class="hll"> <span class="n">assert</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="o">-></span><span class="n">length</span> <span class="o">==</span> <span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> | 597 | </span><span class="hll"> <span class="n">assert</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">dependent</span><span class="o">-></span><span class="n">length</span> <span class="o">==</span> <span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> |
| 598 | </span> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> | 598 | </span> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> |
| 599 | <span class="kt">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">bucket</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> | 599 | <span class="n">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">buckets</span><span class="o">-></span><span class="n">bucket</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> |
| 600 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> | 600 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> |
| 601 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 601 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| 602 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> | 602 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| 603 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 603 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| 604 | <span class="hll"> <span class="cm">/* key/value was splatted: splat value/key too */</span> | 604 | <span class="hll"> <span class="cm">/* key/value was splatted: splat value/key too */</span> |
| @@ -649,9 +649,9 @@ used”, and <tt class="docutils literal"><span class="pre">NULL</span></tt> | |||
| 649 | </ol> | 649 | </ol> |
| 650 | </div> | 650 | </div> |
| 651 | <p>The <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a> is straightforward:</p> | 651 | <p>The <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a> is straightforward:</p> |
| 652 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_addr_t</span> <span class="nf">buckets_skip</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> | 652 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_addr_t</span> <span class="nf">buckets_skip</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> |
| 653 | <span class="p">{</span> | 653 | <span class="p">{</span> |
| 654 | <span class="kt">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 654 | <span class="n">buckets_t</span> <span class="n">buckets</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 655 | <span class="kt">size_t</span> <span class="n">length</span> <span class="o">=</span> <span class="n">UNTAG_SIZE</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> | 655 | <span class="kt">size_t</span> <span class="n">length</span> <span class="o">=</span> <span class="n">UNTAG_SIZE</span><span class="p">(</span><span class="n">buckets</span><span class="o">-></span><span class="n">length</span><span class="p">);</span> |
| 656 | <span class="k">return</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">base</span> <span class="o">+</span> | 656 | <span class="k">return</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">base</span> <span class="o">+</span> |
| 657 | <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">buckets_s</span><span class="p">,</span> <span class="n">bucket</span><span class="p">)</span> <span class="o">+</span> | 657 | <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">buckets_s</span><span class="p">,</span> <span class="n">bucket</span><span class="p">)</span> <span class="o">+</span> |
| @@ -679,17 +679,21 @@ methods:</p> | |||
| 679 | 679 | ||
| 680 | <span class="cm">/* Create an Automatic Weak Linked (AWL) pool to manage the hash table</span> | 680 | <span class="cm">/* Create an Automatic Weak Linked (AWL) pool to manage the hash table</span> |
| 681 | <span class="cm"> buckets. */</span> | 681 | <span class="cm"> buckets. */</span> |
| 682 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="o">&</span><span class="n">buckets_pool</span><span class="p">,</span> | 682 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">buckets_pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_awl</span><span class="p">(),</span> |
| 683 | <span class="n">arena</span><span class="p">,</span> | 683 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">buckets_fmt</span><span class="p">},</span> |
| 684 | <span class="n">mps_class_awl</span><span class="p">(),</span> | 684 | <span class="p">{</span><span class="n">MPS_KEY_AWL_FIND_DEPENDENT</span><span class="p">,</span> |
| 685 | <span class="n">buckets_fmt</span><span class="p">,</span> | 685 | <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">addr_method</span> <span class="o">=</span> <span class="n">buckets_find_dependent</span><span class="p">},</span> |
| 686 | <span class="n">buckets_find_dependent</span><span class="p">);</span> | 686 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> |
| 687 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create buckets pool"</span><span class="p">);</span> | 687 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create buckets pool"</span><span class="p">);</span> |
| 688 | 688 | ||
| 689 | <span class="cm">/* Create allocation points for weak and strong buckets. */</span> | 689 | <span class="cm">/* Create allocation points for weak and strong buckets. */</span> |
| 690 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">strong_buckets_ap</span><span class="p">,</span> <span class="n">buckets_pool</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">());</span> | 690 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">strong_buckets_ap</span><span class="p">,</span> <span class="n">buckets_pool</span><span class="p">,</span> |
| 691 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_RANK</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">mps_rank_exact</span><span class="p">()},</span> | ||
| 692 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 691 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create strong buckets allocation point"</span><span class="p">);</span> | 693 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create strong buckets allocation point"</span><span class="p">);</span> |
| 692 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">weak_buckets_ap</span><span class="p">,</span> <span class="n">buckets_pool</span><span class="p">,</span> <span class="n">mps_rank_weak</span><span class="p">());</span> | 694 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">weak_buckets_ap</span><span class="p">,</span> <span class="n">buckets_pool</span><span class="p">,</span> |
| 695 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_RANK</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">mps_rank_weak</span><span class="p">()},</span> | ||
| 696 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 693 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create weak buckets allocation point"</span><span class="p">);</span> | 697 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create weak buckets allocation point"</span><span class="p">);</span> |
| 694 | </pre></div> | 698 | </pre></div> |
| 695 | </div> | 699 | </div> |
| @@ -749,15 +753,15 @@ other strong references keeping it alive.</li> | |||
| 749 | </ol> | 753 | </ol> |
| 750 | <p>Here’s the new symbol structure:</p> | 754 | <p>Here’s the new symbol structure:</p> |
| 751 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">symbol_s</span> <span class="p">{</span> | 755 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">symbol_s</span> <span class="p">{</span> |
| 752 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_SYMBOL */</span> | 756 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_SYMBOL */</span> |
| 753 | <span class="kt">obj_t</span> <span class="n">name</span><span class="p">;</span> <span class="cm">/* its name (a string) */</span> | 757 | <span class="n">obj_t</span> <span class="n">name</span><span class="p">;</span> <span class="cm">/* its name (a string) */</span> |
| 754 | <span class="p">}</span> <span class="n">symbol_s</span><span class="p">;</span> | 758 | <span class="p">}</span> <span class="n">symbol_s</span><span class="p">;</span> |
| 755 | </pre></div> | 759 | </pre></div> |
| 756 | </div> | 760 | </div> |
| 757 | <p>and the new implementation of <tt class="docutils literal"><span class="pre">intern</span></tt>:</p> | 761 | <p>and the new implementation of <tt class="docutils literal"><span class="pre">intern</span></tt>:</p> |
| 758 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">intern_string</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">name</span><span class="p">)</span> | 762 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">intern_string</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">name</span><span class="p">)</span> |
| 759 | <span class="p">{</span> | 763 | <span class="p">{</span> |
| 760 | <span class="kt">obj_t</span> <span class="n">symbol</span><span class="p">;</span> | 764 | <span class="n">obj_t</span> <span class="n">symbol</span><span class="p">;</span> |
| 761 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_STRING</span><span class="p">);</span> | 765 | <span class="n">assert</span><span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="n">TYPE_STRING</span><span class="p">);</span> |
| 762 | <span class="n">symbol</span> <span class="o">=</span> <span class="n">table_ref</span><span class="p">(</span><span class="n">symtab</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> | 766 | <span class="n">symbol</span> <span class="o">=</span> <span class="n">table_ref</span><span class="p">(</span><span class="n">symtab</span><span class="p">,</span> <span class="n">name</span><span class="p">);</span> |
| 763 | <span class="k">if</span><span class="p">(</span><span class="n">symbol</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 767 | <span class="k">if</span><span class="p">(</span><span class="n">symbol</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| @@ -767,7 +771,7 @@ other strong references keeping it alive.</li> | |||
| 767 | <span class="k">return</span> <span class="n">symbol</span><span class="p">;</span> | 771 | <span class="k">return</span> <span class="n">symbol</span><span class="p">;</span> |
| 768 | <span class="p">}</span> | 772 | <span class="p">}</span> |
| 769 | 773 | ||
| 770 | <span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">intern</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> | 774 | <span class="k">static</span> <span class="n">obj_t</span> <span class="nf">intern</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> |
| 771 | <span class="p">{</span> | 775 | <span class="p">{</span> |
| 772 | <span class="k">return</span> <span class="n">intern_string</span><span class="p">(</span><span class="n">make_string</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">string</span><span class="p">));</span> | 776 | <span class="k">return</span> <span class="n">intern_string</span><span class="p">(</span><span class="n">make_string</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">string</span><span class="p">),</span> <span class="n">string</span><span class="p">));</span> |
| 773 | <span class="p">}</span> | 777 | <span class="p">}</span> |
| @@ -775,7 +779,7 @@ other strong references keeping it alive.</li> | |||
| 775 | </div> | 779 | </div> |
| 776 | <p>The symbol table now becomes a very simple <a class="reference internal" href="../glossary/r.html#term-root"><em class="xref std std-term">root</em></a>, that only has | 780 | <p>The symbol table now becomes a very simple <a class="reference internal" href="../glossary/r.html#term-root"><em class="xref std std-term">root</em></a>, that only has |
| 777 | to be registered once (not <a class="reference internal" href="lang.html#guide-lang-root"><em>every time it is rehashed</em></a>, as previously):</p> | 781 | to be registered once (not <a class="reference internal" href="lang.html#guide-lang-root"><em>every time it is rehashed</em></a>, as previously):</p> |
| 778 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_addr_t</span> <span class="n">ref</span><span class="p">;</span> | 782 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_addr_t</span> <span class="n">ref</span><span class="p">;</span> |
| 779 | <span class="n">symtab</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> | 783 | <span class="n">symtab</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> |
| 780 | <span class="n">ref</span> <span class="o">=</span> <span class="o">&</span><span class="n">symtab</span><span class="p">;</span> | 784 | <span class="n">ref</span> <span class="o">=</span> <span class="o">&</span><span class="n">symtab</span><span class="p">;</span> |
| 781 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table</span><span class="p">(</span><span class="o">&</span><span class="n">symtab_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> | 785 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table</span><span class="p">(</span><span class="o">&</span><span class="n">symtab_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> |
| @@ -823,23 +827,22 @@ avoided.</p> | |||
| 823 | <p>Here the appropriate class is <a class="reference internal" href="../pool/amcz.html#pool-amcz"><em>AMCZ (Automatic Mostly-Copying Zero-rank)</em></a>, and the necessary code | 827 | <p>Here the appropriate class is <a class="reference internal" href="../pool/amcz.html#pool-amcz"><em>AMCZ (Automatic Mostly-Copying Zero-rank)</em></a>, and the necessary code |
| 824 | changes are straightforward. First, global variables for the new pool | 828 | changes are straightforward. First, global variables for the new pool |
| 825 | and its <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>:</p> | 829 | and its <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>:</p> |
| 826 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_pool_t</span> <span class="n">leaf_pool</span><span class="p">;</span> <span class="cm">/* pool for leaf objects */</span> | 830 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_pool_t</span> <span class="n">leaf_pool</span><span class="p">;</span> <span class="cm">/* pool for leaf objects */</span> |
| 827 | <span class="k">static</span> <span class="kt">mps_ap_t</span> <span class="n">leaf_ap</span><span class="p">;</span> <span class="cm">/* allocation point for leaf objects */</span> | 831 | <span class="k">static</span> <span class="n">mps_ap_t</span> <span class="n">leaf_ap</span><span class="p">;</span> <span class="cm">/* allocation point for leaf objects */</span> |
| 828 | </pre></div> | 832 | </pre></div> |
| 829 | </div> | 833 | </div> |
| 830 | <p>Second, the leaf objects must be allocated on <tt class="docutils literal"><span class="pre">leaf_ap</span></tt> instead of | 834 | <p>Second, the leaf objects must be allocated on <tt class="docutils literal"><span class="pre">leaf_ap</span></tt> instead of |
| 831 | <tt class="docutils literal"><span class="pre">obj_ap</span></tt>. And third, the pool and its allocation point must be created:</p> | 835 | <tt class="docutils literal"><span class="pre">obj_ap</span></tt>. And third, the pool and its allocation point must be created:</p> |
| 832 | <div class="highlight-c"><div class="highlight"><pre><span class="cm">/* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to</span> | 836 | <div class="highlight-c"><div class="highlight"><pre><span class="cm">/* Create an Automatic Mostly-Copying Zero-rank (AMCZ) pool to</span> |
| 833 | <span class="cm"> manage the leaf objects. */</span> | 837 | <span class="cm"> manage the leaf objects. */</span> |
| 834 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="o">&</span><span class="n">leaf_pool</span><span class="p">,</span> | 838 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">leaf_pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_amcz</span><span class="p">(),</span> |
| 835 | <span class="n">arena</span><span class="p">,</span> | 839 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="n">obj_chain</span><span class="p">},</span> |
| 836 | <span class="n">mps_class_amcz</span><span class="p">(),</span> | 840 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">obj_fmt</span><span class="p">},</span> |
| 837 | <span class="n">obj_fmt</span><span class="p">,</span> | 841 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> |
| 838 | <span class="n">obj_chain</span><span class="p">);</span> | ||
| 839 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create leaf pool"</span><span class="p">);</span> | 842 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create leaf pool"</span><span class="p">);</span> |
| 840 | 843 | ||
| 841 | <span class="cm">/* Create allocation point for leaf objects. */</span> | 844 | <span class="cm">/* Create allocation point for leaf objects. */</span> |
| 842 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">leaf_ap</span><span class="p">,</span> <span class="n">leaf_pool</span><span class="p">);</span> | 845 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">leaf_ap</span><span class="p">,</span> <span class="n">leaf_pool</span><span class="p">,</span> <span class="n">mps_args_none</span><span class="p">);</span> |
| 843 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create leaf objects allocation point"</span><span class="p">);</span> | 846 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create leaf objects allocation point"</span><span class="p">);</span> |
| 844 | </pre></div> | 847 | </pre></div> |
| 845 | </div> | 848 | </div> |
diff --git a/mps/manual/html/guide/debug.html b/mps/manual/html/guide/debug.html index 7e52d984e9c..6b4684fb187 100644 --- a/mps/manual/html/guide/debug.html +++ b/mps/manual/html/guide/debug.html | |||
| @@ -227,13 +227,13 @@ up to the detection of the error. See <a class="reference internal" href="../top | |||
| 227 | <span id="guide-debug-size"></span><span id="index-5"></span><h2>4.3. Example: allocating with wrong size<a class="headerlink" href="#example-allocating-with-wrong-size" title="Permalink to this headline">¶</a></h2> | 227 | <span id="guide-debug-size"></span><span id="index-5"></span><h2>4.3. Example: allocating with wrong size<a class="headerlink" href="#example-allocating-with-wrong-size" title="Permalink to this headline">¶</a></h2> |
| 228 | <p>Here’s another kind of mistake: an off-by-one error in <tt class="docutils literal"><span class="pre">make_string</span></tt> | 228 | <p>Here’s another kind of mistake: an off-by-one error in <tt class="docutils literal"><span class="pre">make_string</span></tt> |
| 229 | leading to the allocation of string objects with the wrong size:</p> | 229 | leading to the allocation of string objects with the wrong size:</p> |
| 230 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_string</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> | 230 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_string</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">)</span> |
| 231 | <span class="p">{</span> | 231 | <span class="p">{</span> |
| 232 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 232 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 233 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 233 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 234 | <span class="hll"> <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">string_s</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">+</span> <span class="n">length</span><span class="cm">/* oops, forgot: +1 */</span><span class="p">);</span> | 234 | <span class="hll"> <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">string_s</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">+</span> <span class="n">length</span><span class="cm">/* oops, forgot: +1 */</span><span class="p">);</span> |
| 235 | </span> <span class="k">do</span> <span class="p">{</span> | 235 | </span> <span class="k">do</span> <span class="p">{</span> |
| 236 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 236 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 237 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_string"</span><span class="p">);</span> | 237 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_string"</span><span class="p">);</span> |
| 238 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 238 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 239 | <span class="n">obj</span><span class="o">-></span><span class="n">string</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_STRING</span><span class="p">;</span> | 239 | <span class="n">obj</span><span class="o">-></span><span class="n">string</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_STRING</span><span class="p">;</span> |
diff --git a/mps/manual/html/guide/lang.html b/mps/manual/html/guide/lang.html index 1698595f1e2..55b43e428e9 100644 --- a/mps/manual/html/guide/lang.html +++ b/mps/manual/html/guide/lang.html | |||
| @@ -90,7 +90,7 @@ pointers to strings.</li> | |||
| 90 | <p>A Scheme object (whose type is not necessarily known) is represented by | 90 | <p>A Scheme object (whose type is not necessarily known) is represented by |
| 91 | an <tt class="docutils literal"><span class="pre">obj_t</span></tt>, which is a pointer to a union of every type in the | 91 | an <tt class="docutils literal"><span class="pre">obj_t</span></tt>, which is a pointer to a union of every type in the |
| 92 | language:</p> | 92 | language:</p> |
| 93 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">union</span> <span class="n">obj_u</span> <span class="o">*</span><span class="kt">obj_t</span><span class="p">;</span> | 93 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">union</span> <span class="n">obj_u</span> <span class="o">*</span><span class="n">obj_t</span><span class="p">;</span> |
| 94 | <span class="k">typedef</span> <span class="k">union</span> <span class="n">obj_u</span> <span class="p">{</span> | 94 | <span class="k">typedef</span> <span class="k">union</span> <span class="n">obj_u</span> <span class="p">{</span> |
| 95 | <span class="n">type_s</span> <span class="n">type</span><span class="p">;</span> | 95 | <span class="n">type_s</span> <span class="n">type</span><span class="p">;</span> |
| 96 | <span class="n">pair_s</span> <span class="n">pair</span><span class="p">;</span> | 96 | <span class="n">pair_s</span> <span class="n">pair</span><span class="p">;</span> |
| @@ -113,8 +113,8 @@ specifying the type of the object (<tt class="docutils literal"><span class="pre | |||
| 113 | represented by a pointer to the structure <tt class="docutils literal"><span class="pre">pair_s</span></tt> defined as | 113 | represented by a pointer to the structure <tt class="docutils literal"><span class="pre">pair_s</span></tt> defined as |
| 114 | follows:</p> | 114 | follows:</p> |
| 115 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pair_s</span> <span class="p">{</span> | 115 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pair_s</span> <span class="p">{</span> |
| 116 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAIR */</span> | 116 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAIR */</span> |
| 117 | <span class="kt">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="n">cdr</span><span class="p">;</span> <span class="cm">/* first and second projections */</span> | 117 | <span class="n">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="n">cdr</span><span class="p">;</span> <span class="cm">/* first and second projections */</span> |
| 118 | <span class="p">}</span> <span class="n">pair_s</span><span class="p">;</span> | 118 | <span class="p">}</span> <span class="n">pair_s</span><span class="p">;</span> |
| 119 | </pre></div> | 119 | </pre></div> |
| 120 | </div> | 120 | </div> |
| @@ -122,7 +122,7 @@ follows:</p> | |||
| 122 | operate on objects generically, testing <tt class="docutils literal"><span class="pre">TYPE(obj)</span></tt> as necessary | 122 | operate on objects generically, testing <tt class="docutils literal"><span class="pre">TYPE(obj)</span></tt> as necessary |
| 123 | (which is a macro for <tt class="docutils literal"><span class="pre">obj->type.type</span></tt>). For example, the | 123 | (which is a macro for <tt class="docutils literal"><span class="pre">obj->type.type</span></tt>). For example, the |
| 124 | <tt class="docutils literal"><span class="pre">print()</span></tt> function is implemented like this:</p> | 124 | <tt class="docutils literal"><span class="pre">print()</span></tt> function is implemented like this:</p> |
| 125 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">depth</span><span class="p">,</span> <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> | 125 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">depth</span><span class="p">,</span> <span class="kt">FILE</span> <span class="o">*</span><span class="n">stream</span><span class="p">)</span> |
| 126 | <span class="p">{</span> | 126 | <span class="p">{</span> |
| 127 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> | 127 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> |
| 128 | <span class="k">case</span> <span class="n">TYPE_INTEGER</span>: | 128 | <span class="k">case</span> <span class="n">TYPE_INTEGER</span>: |
| @@ -140,9 +140,9 @@ operate on objects generically, testing <tt class="docutils literal"><span class | |||
| 140 | </div> | 140 | </div> |
| 141 | <p>Each constructor allocates memory for the new object by calling | 141 | <p>Each constructor allocates memory for the new object by calling |
| 142 | <tt class="docutils literal"><span class="pre">malloc</span></tt>. For example, <tt class="docutils literal"><span class="pre">make_pair</span></tt> is the constructor for pairs:</p> | 142 | <tt class="docutils literal"><span class="pre">malloc</span></tt>. For example, <tt class="docutils literal"><span class="pre">make_pair</span></tt> is the constructor for pairs:</p> |
| 143 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">cdr</span><span class="p">)</span> | 143 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">cdr</span><span class="p">)</span> |
| 144 | <span class="p">{</span> | 144 | <span class="p">{</span> |
| 145 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="p">(</span><span class="kt">obj_t</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> | 145 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="p">(</span><span class="n">obj_t</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> |
| 146 | <span class="k">if</span> <span class="p">(</span><span class="n">obj</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> | 146 | <span class="k">if</span> <span class="p">(</span><span class="n">obj</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> |
| 147 | <span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PAIR</span><span class="p">;</span> | 147 | <span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PAIR</span><span class="p">;</span> |
| 148 | <span class="n">CAR</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">=</span> <span class="n">car</span><span class="p">;</span> | 148 | <span class="n">CAR</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">=</span> <span class="n">car</span><span class="p">;</span> |
| @@ -181,26 +181,34 @@ general-purpose programs you’ll want to use the virtual memory arena.</p> | |||
| 181 | <p>There’s only one arena, and many MPS functions take an arena as an | 181 | <p>There’s only one arena, and many MPS functions take an arena as an |
| 182 | argument, so it makes sense for the arena to be a global variable | 182 | argument, so it makes sense for the arena to be a global variable |
| 183 | rather than having to pass it around everywhere:</p> | 183 | rather than having to pass it around everywhere:</p> |
| 184 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">;</span> | 184 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">;</span> |
| 185 | </pre></div> | 185 | </pre></div> |
| 186 | </div> | 186 | </div> |
| 187 | <p>Create an arena by calling <a class="reference internal" href="../topic/arena.html#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a>. This function | 187 | <p>Create an arena by calling <a class="reference internal" href="../topic/arena.html#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a>. This function |
| 188 | takes a third argument when creating a virtual memory arena: the size of | 188 | takes a <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a> when creating a virtual memory arena: |
| 189 | the amount of virtual virtual <a class="reference internal" href="../glossary/a.html#term-address-space"><em class="xref std std-term">address space</em></a> (<em>not</em> <a class="reference internal" href="../glossary/r.html#term-ram"><em class="xref std std-term">RAM</em></a>), | 189 | the size of virtual <a class="reference internal" href="../glossary/a.html#term-address-space"><em class="xref std std-term">address space</em></a> (<em>not</em> <a class="reference internal" href="../glossary/r.html#term-ram"><em class="xref std std-term">RAM</em></a>), in |
| 190 | in bytes, that the arena will reserve initially. The MPS will ask for | 190 | bytes, that the arena will reserve initially. The MPS will ask for |
| 191 | more address space if it runs out, but the more times it has to extend | 191 | more address space if it runs out, but the more times it has to extend |
| 192 | its address space, the less efficient garbage collection will become. | 192 | its address space, the less efficient garbage collection will become. |
| 193 | The MPS works best if you reserve an address space that is several times | 193 | The MPS works best if you reserve an address space that is several |
| 194 | larger than your peak memory usage.</p> | 194 | times larger than your peak memory usage.</p> |
| 195 | <div class="admonition-note admonition"> | ||
| 196 | <p class="first admonition-title">Note</p> | ||
| 197 | <p class="last">Functions in the MPS interface take <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a> for | ||
| 198 | arguments that are optional, or are only required in some | ||
| 199 | circumstances. These argument are passed in the form of an array | ||
| 200 | of structures of type <a class="reference internal" href="../topic/keyword.html#mps_arg_s" title="mps_arg_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_arg_s</span></tt></a>. See | ||
| 201 | <a class="reference internal" href="../topic/keyword.html#topic-keyword"><em>Keyword arguments</em></a> for the full details.</p> | ||
| 202 | </div> | ||
| 195 | <p>Let’s reserve 32 megabytes:</p> | 203 | <p>Let’s reserve 32 megabytes:</p> |
| 196 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 204 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 197 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> | 205 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_vm</span><span class="p">(),</span> |
| 198 | <span class="n">mps_arena_class_vm</span><span class="p">(),</span> | 206 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">32</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">},</span> |
| 199 | <span class="p">(</span><span class="kt">size_t</span><span class="p">)(</span><span class="mi">32</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">));</span> | 207 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> |
| 200 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create arena"</span><span class="p">);</span> | 208 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create arena"</span><span class="p">);</span> |
| 201 | </pre></div> | 209 | </pre></div> |
| 202 | </div> | 210 | </div> |
| 203 | <p><a class="reference internal" href="../topic/arena.html#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> is typical of functions in the MPS | 211 | <p><a class="reference internal" href="../topic/arena.html#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> is typical of functions in the MPS |
| 204 | interface in that it stores its result in a location pointed to by an | 212 | interface in that it stores its result in a location pointed to by an |
| 205 | <a class="reference internal" href="../glossary/o.html#term-out-parameter"><em class="xref std std-term">out parameter</em></a> (here, <tt class="docutils literal"><span class="pre">&arena</span></tt>) and returns a <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result | 213 | <a class="reference internal" href="../glossary/o.html#term-out-parameter"><em class="xref std std-term">out parameter</em></a> (here, <tt class="docutils literal"><span class="pre">&arena</span></tt>) and returns a <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result |
| 206 | code</em></a>, which is <a class="reference internal" href="../topic/error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the function succeeded, or | 214 | code</em></a>, which is <a class="reference internal" href="../topic/error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the function succeeded, or |
| @@ -266,7 +274,7 @@ code for creating the object format for the toy Scheme interpreter:</p> | |||
| 266 | <span class="n">obj_pad</span><span class="p">,</span> | 274 | <span class="n">obj_pad</span><span class="p">,</span> |
| 267 | <span class="p">};</span> | 275 | <span class="p">};</span> |
| 268 | 276 | ||
| 269 | <span class="kt">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> | 277 | <span class="n">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> |
| 270 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> | 278 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> |
| 271 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> | 279 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> |
| 272 | </pre></div> | 280 | </pre></div> |
| @@ -324,11 +332,11 @@ which the scan method was called. The scan method is called to | |||
| 324 | discover references and so determine which objects are <a class="reference internal" href="../glossary/l.html#term-live"><em class="xref std std-term">alive</em></a> and which are <a class="reference internal" href="../glossary/d.html#term-dead"><em class="xref std std-term">dead</em></a>, and also to update references | 332 | discover references and so determine which objects are <a class="reference internal" href="../glossary/l.html#term-live"><em class="xref std std-term">alive</em></a> and which are <a class="reference internal" href="../glossary/d.html#term-dead"><em class="xref std std-term">dead</em></a>, and also to update references |
| 325 | after objects have been moved.</p> | 333 | after objects have been moved.</p> |
| 326 | <p>Here’s the scan method for the toy Scheme interpreter:</p> | 334 | <p>Here’s the scan method for the toy Scheme interpreter:</p> |
| 327 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 335 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 328 | <span class="p">{</span> | 336 | <span class="p">{</span> |
| 329 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 337 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 330 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 338 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 331 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 339 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 332 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> | 340 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> |
| 333 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: | 341 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: |
| 334 | <span class="n">FIX</span><span class="p">(</span><span class="n">CAR</span><span class="p">(</span><span class="n">obj</span><span class="p">));</span> | 342 | <span class="n">FIX</span><span class="p">(</span><span class="n">CAR</span><span class="p">(</span><span class="n">obj</span><span class="p">));</span> |
| @@ -406,9 +414,9 @@ soon as practicable.</li> | |||
| 406 | <a class="reference internal" href="../topic/format.html#mps_fmt_skip_t" title="mps_fmt_skip_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_skip_t</span></tt></a>. It is called by the MPS to skip over an | 414 | <a class="reference internal" href="../topic/format.html#mps_fmt_skip_t" title="mps_fmt_skip_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_skip_t</span></tt></a>. It is called by the MPS to skip over an |
| 407 | object belonging to the format, and also to determine its size.</p> | 415 | object belonging to the format, and also to determine its size.</p> |
| 408 | <p>Here’s the skip method for the toy Scheme interpreter:</p> | 416 | <p>Here’s the skip method for the toy Scheme interpreter:</p> |
| 409 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_addr_t</span> <span class="nf">obj_skip</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> | 417 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_addr_t</span> <span class="nf">obj_skip</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> |
| 410 | <span class="p">{</span> | 418 | <span class="p">{</span> |
| 411 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 419 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 412 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> | 420 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> |
| 413 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: | 421 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: |
| 414 | <span class="n">base</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">base</span> <span class="o">+</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> | 422 | <span class="n">base</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">base</span> <span class="o">+</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> |
| @@ -461,24 +469,24 @@ objects might be as small as two words (for example, integers).</p> | |||
| 461 | The first type is suitable for forwarding objects of three words or | 469 | The first type is suitable for forwarding objects of three words or |
| 462 | longer:</p> | 470 | longer:</p> |
| 463 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">fwd_s</span> <span class="p">{</span> | 471 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">fwd_s</span> <span class="p">{</span> |
| 464 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_FWD */</span> | 472 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_FWD */</span> |
| 465 | <span class="kt">obj_t</span> <span class="n">fwd</span><span class="p">;</span> <span class="cm">/* forwarded object */</span> | 473 | <span class="n">obj_t</span> <span class="n">fwd</span><span class="p">;</span> <span class="cm">/* forwarded object */</span> |
| 466 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">;</span> <span class="cm">/* total size of this object */</span> | 474 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">;</span> <span class="cm">/* total size of this object */</span> |
| 467 | <span class="p">}</span> <span class="n">fwd_s</span><span class="p">;</span> | 475 | <span class="p">}</span> <span class="n">fwd_s</span><span class="p">;</span> |
| 468 | </pre></div> | 476 | </pre></div> |
| 469 | </div> | 477 | </div> |
| 470 | <p>while the second type is suitable for forwarding objects of two words:</p> | 478 | <p>while the second type is suitable for forwarding objects of two words:</p> |
| 471 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">fwd2_s</span> <span class="p">{</span> | 479 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">fwd2_s</span> <span class="p">{</span> |
| 472 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_FWD2 */</span> | 480 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_FWD2 */</span> |
| 473 | <span class="kt">obj_t</span> <span class="n">fwd</span><span class="p">;</span> <span class="cm">/* forwarded object */</span> | 481 | <span class="n">obj_t</span> <span class="n">fwd</span><span class="p">;</span> <span class="cm">/* forwarded object */</span> |
| 474 | <span class="p">}</span> <span class="n">fwd2_s</span><span class="p">;</span> | 482 | <span class="p">}</span> <span class="n">fwd2_s</span><span class="p">;</span> |
| 475 | </pre></div> | 483 | </pre></div> |
| 476 | </div> | 484 | </div> |
| 477 | <p>Here’s the forward method for the toy Scheme interpreter:</p> | 485 | <p>Here’s the forward method for the toy Scheme interpreter:</p> |
| 478 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">obj_fwd</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">old</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">new</span><span class="p">)</span> | 486 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">obj_fwd</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">old</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">new</span><span class="p">)</span> |
| 479 | <span class="p">{</span> | 487 | <span class="p">{</span> |
| 480 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">old</span><span class="p">;</span> | 488 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">old</span><span class="p">;</span> |
| 481 | <span class="kt">mps_addr_t</span> <span class="n">limit</span> <span class="o">=</span> <span class="n">obj_skip</span><span class="p">(</span><span class="n">old</span><span class="p">);</span> | 489 | <span class="n">mps_addr_t</span> <span class="n">limit</span> <span class="o">=</span> <span class="n">obj_skip</span><span class="p">(</span><span class="n">old</span><span class="p">);</span> |
| 482 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">limit</span> <span class="o">-</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">old</span><span class="p">;</span> | 490 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">limit</span> <span class="o">-</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">old</span><span class="p">;</span> |
| 483 | <span class="n">assert</span><span class="p">(</span><span class="n">size</span> <span class="o">>=</span> <span class="n">ALIGN_UP</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">fwd2_s</span><span class="p">)));</span> | 491 | <span class="n">assert</span><span class="p">(</span><span class="n">size</span> <span class="o">>=</span> <span class="n">ALIGN_UP</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">fwd2_s</span><span class="p">)));</span> |
| 484 | <span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">==</span> <span class="n">ALIGN_UP</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">fwd2_s</span><span class="p">)))</span> <span class="p">{</span> | 492 | <span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">==</span> <span class="n">ALIGN_UP</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">fwd2_s</span><span class="p">)))</span> <span class="p">{</span> |
| @@ -537,9 +545,9 @@ scanning them could be avoided.</li> | |||
| 537 | object is a <a class="reference internal" href="../glossary/f.html#term-forwarding-object"><em class="xref std std-term">forwarding object</em></a>, and if it is, to determine the | 545 | object is a <a class="reference internal" href="../glossary/f.html#term-forwarding-object"><em class="xref std std-term">forwarding object</em></a>, and if it is, to determine the |
| 538 | location where that object was moved.</p> | 546 | location where that object was moved.</p> |
| 539 | <p>Here’s the is-forwarded method for the toy Scheme interpreter:</p> | 547 | <p>Here’s the is-forwarded method for the toy Scheme interpreter:</p> |
| 540 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_addr_t</span> <span class="nf">obj_isfwd</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> | 548 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_addr_t</span> <span class="nf">obj_isfwd</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> |
| 541 | <span class="p">{</span> | 549 | <span class="p">{</span> |
| 542 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 550 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 543 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> | 551 | <span class="k">switch</span> <span class="p">(</span><span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="p">{</span> |
| 544 | <span class="k">case</span> <span class="n">TYPE_FWD2</span>: | 552 | <span class="k">case</span> <span class="n">TYPE_FWD2</span>: |
| 545 | <span class="k">return</span> <span class="n">obj</span><span class="o">-></span><span class="n">fwd2</span><span class="p">.</span><span class="n">fwd</span><span class="p">;</span> | 553 | <span class="k">return</span> <span class="n">obj</span><span class="o">-></span><span class="n">fwd2</span><span class="p">.</span><span class="n">fwd</span><span class="p">;</span> |
| @@ -573,7 +581,7 @@ word. As with forwarding objects, this can be solved by having two | |||
| 573 | types of padding object. The first type is suitable for padding | 581 | types of padding object. The first type is suitable for padding |
| 574 | objects of two words or longer:</p> | 582 | objects of two words or longer:</p> |
| 575 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pad_s</span> <span class="p">{</span> | 583 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pad_s</span> <span class="p">{</span> |
| 576 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAD */</span> | 584 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAD */</span> |
| 577 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">;</span> <span class="cm">/* total size of this object */</span> | 585 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">;</span> <span class="cm">/* total size of this object */</span> |
| 578 | <span class="p">}</span> <span class="n">pad_s</span><span class="p">;</span> | 586 | <span class="p">}</span> <span class="n">pad_s</span><span class="p">;</span> |
| 579 | </pre></div> | 587 | </pre></div> |
| @@ -581,14 +589,14 @@ objects of two words or longer:</p> | |||
| 581 | <p>while the second type is suitable for padding objects consisting of a | 589 | <p>while the second type is suitable for padding objects consisting of a |
| 582 | single word:</p> | 590 | single word:</p> |
| 583 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pad1_s</span> <span class="p">{</span> | 591 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">pad1_s</span> <span class="p">{</span> |
| 584 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAD1 */</span> | 592 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_PAD1 */</span> |
| 585 | <span class="p">}</span> <span class="n">pad1_s</span><span class="p">;</span> | 593 | <span class="p">}</span> <span class="n">pad1_s</span><span class="p">;</span> |
| 586 | </pre></div> | 594 | </pre></div> |
| 587 | </div> | 595 | </div> |
| 588 | <p>Here’s the padding method:</p> | 596 | <p>Here’s the padding method:</p> |
| 589 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">obj_pad</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span> | 597 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">obj_pad</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span> |
| 590 | <span class="p">{</span> | 598 | <span class="p">{</span> |
| 591 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 599 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 592 | <span class="n">assert</span><span class="p">(</span><span class="n">size</span> <span class="o">>=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pad1_s</span><span class="p">)));</span> | 600 | <span class="n">assert</span><span class="p">(</span><span class="n">size</span> <span class="o">>=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pad1_s</span><span class="p">)));</span> |
| 593 | <span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">==</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pad1_s</span><span class="p">)))</span> <span class="p">{</span> | 601 | <span class="k">if</span> <span class="p">(</span><span class="n">size</span> <span class="o">==</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pad1_s</span><span class="p">)))</span> <span class="p">{</span> |
| 594 | <span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">=</span> <span class="n">TYPE_PAD1</span><span class="p">;</span> | 602 | <span class="n">TYPE</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">=</span> <span class="n">TYPE_PAD1</span><span class="p">;</span> |
| @@ -664,7 +672,7 @@ the pool creation code. First, the header for the AMC pool class:</p> | |||
| 664 | </div> | 672 | </div> |
| 665 | <p>Second, the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>:</p> | 673 | <p>Second, the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>:</p> |
| 666 | <div class="highlight-c"><div class="highlight"><pre><span class="k">struct</span> <span class="n">mps_fmt_A_s</span> <span class="n">obj_fmt_s</span> <span class="o">=</span> <span class="p">{</span> | 674 | <div class="highlight-c"><div class="highlight"><pre><span class="k">struct</span> <span class="n">mps_fmt_A_s</span> <span class="n">obj_fmt_s</span> <span class="o">=</span> <span class="p">{</span> |
| 667 | <span class="k">sizeof</span><span class="p">(</span><span class="kt">mps_word_t</span><span class="p">),</span> | 675 | <span class="k">sizeof</span><span class="p">(</span><span class="n">mps_word_t</span><span class="p">),</span> |
| 668 | <span class="n">obj_scan</span><span class="p">,</span> | 676 | <span class="n">obj_scan</span><span class="p">,</span> |
| 669 | <span class="n">obj_skip</span><span class="p">,</span> | 677 | <span class="n">obj_skip</span><span class="p">,</span> |
| 670 | <span class="nb">NULL</span><span class="p">,</span> | 678 | <span class="nb">NULL</span><span class="p">,</span> |
| @@ -673,7 +681,7 @@ the pool creation code. First, the header for the AMC pool class:</p> | |||
| 673 | <span class="n">obj_pad</span><span class="p">,</span> | 681 | <span class="n">obj_pad</span><span class="p">,</span> |
| 674 | <span class="p">};</span> | 682 | <span class="p">};</span> |
| 675 | 683 | ||
| 676 | <span class="kt">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> | 684 | <span class="n">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> |
| 677 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> | 685 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> |
| 678 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> | 686 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> |
| 679 | </pre></div> | 687 | </pre></div> |
| @@ -684,7 +692,7 @@ the pool creation code. First, the header for the AMC pool class:</p> | |||
| 684 | <span class="p">{</span> <span class="mi">170</span><span class="p">,</span> <span class="mf">0.45</span> <span class="p">},</span> | 692 | <span class="p">{</span> <span class="mi">170</span><span class="p">,</span> <span class="mf">0.45</span> <span class="p">},</span> |
| 685 | <span class="p">};</span> | 693 | <span class="p">};</span> |
| 686 | 694 | ||
| 687 | <span class="kt">mps_chain_t</span> <span class="n">obj_chain</span><span class="p">;</span> | 695 | <span class="n">mps_chain_t</span> <span class="n">obj_chain</span><span class="p">;</span> |
| 688 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_chain_create</span><span class="p">(</span><span class="o">&</span><span class="n">obj_chain</span><span class="p">,</span> | 696 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_chain_create</span><span class="p">(</span><span class="o">&</span><span class="n">obj_chain</span><span class="p">,</span> |
| 689 | <span class="n">arena</span><span class="p">,</span> | 697 | <span class="n">arena</span><span class="p">,</span> |
| 690 | <span class="n">LENGTH</span><span class="p">(</span><span class="n">obj_gen_params</span><span class="p">),</span> | 698 | <span class="n">LENGTH</span><span class="p">(</span><span class="n">obj_gen_params</span><span class="p">),</span> |
| @@ -693,12 +701,11 @@ the pool creation code. First, the header for the AMC pool class:</p> | |||
| 693 | </pre></div> | 701 | </pre></div> |
| 694 | </div> | 702 | </div> |
| 695 | <p>And finally the <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>:</p> | 703 | <p>And finally the <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>:</p> |
| 696 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_pool_t</span> <span class="n">obj_pool</span><span class="p">;</span> | 704 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_pool_t</span> <span class="n">obj_pool</span><span class="p">;</span> |
| 697 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="o">&</span><span class="n">obj_pool</span><span class="p">,</span> | 705 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">obj_pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_amc</span><span class="p">(),</span> |
| 698 | <span class="n">arena</span><span class="p">,</span> | 706 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="n">obj_chain</span><span class="p">},</span> |
| 699 | <span class="n">mps_class_amc</span><span class="p">(),</span> | 707 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">obj_fmt</span><span class="p">},</span> |
| 700 | <span class="n">obj_fmt</span><span class="p">,</span> | 708 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> |
| 701 | <span class="n">obj_chain</span><span class="p">);</span> | ||
| 702 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj pool"</span><span class="p">);</span> | 709 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj pool"</span><span class="p">);</span> |
| 703 | </pre></div> | 710 | </pre></div> |
| 704 | </div> | 711 | </div> |
| @@ -721,15 +728,15 @@ memory allocated by other memory managers. For these roots you must | |||
| 721 | describe to the MPS how to <a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">scan</em></a> them for references.</p> | 728 | describe to the MPS how to <a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">scan</em></a> them for references.</p> |
| 722 | <p>The toy Scheme interpreter has a number of static variables that point | 729 | <p>The toy Scheme interpreter has a number of static variables that point |
| 723 | to heap-allocated objects. First, the special objects, including:</p> | 730 | to heap-allocated objects. First, the special objects, including:</p> |
| 724 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="n">obj_empty</span><span class="p">;</span> <span class="cm">/* (), the empty list */</span> | 731 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="n">obj_empty</span><span class="p">;</span> <span class="cm">/* (), the empty list */</span> |
| 725 | </pre></div> | 732 | </pre></div> |
| 726 | </div> | 733 | </div> |
| 727 | <p>Second, the predefined symbols, including:</p> | 734 | <p>Second, the predefined symbols, including:</p> |
| 728 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="n">obj_quote</span><span class="p">;</span> <span class="cm">/* "quote" symbol */</span> | 735 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="n">obj_quote</span><span class="p">;</span> <span class="cm">/* "quote" symbol */</span> |
| 729 | </pre></div> | 736 | </pre></div> |
| 730 | </div> | 737 | </div> |
| 731 | <p>And third, the global symbol table:</p> | 738 | <p>And third, the global symbol table:</p> |
| 732 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="o">*</span><span class="n">symtab</span><span class="p">;</span> | 739 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="o">*</span><span class="n">symtab</span><span class="p">;</span> |
| 733 | <span class="k">static</span> <span class="kt">size_t</span> <span class="n">symtab_size</span><span class="p">;</span> | 740 | <span class="k">static</span> <span class="kt">size_t</span> <span class="n">symtab_size</span><span class="p">;</span> |
| 734 | </pre></div> | 741 | </pre></div> |
| 735 | </div> | 742 | </div> |
| @@ -740,7 +747,7 @@ described above.</p> | |||
| 740 | <p>In the case of the toy Scheme interpreter, the root scanning function | 747 | <p>In the case of the toy Scheme interpreter, the root scanning function |
| 741 | for the special objects and the predefined symbols could be written | 748 | for the special objects and the predefined symbols could be written |
| 742 | like this:</p> | 749 | like this:</p> |
| 743 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">globals_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">s</span><span class="p">)</span> | 750 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">globals_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">s</span><span class="p">)</span> |
| 744 | <span class="p">{</span> | 751 | <span class="p">{</span> |
| 745 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 752 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 746 | <span class="n">FIX</span><span class="p">(</span><span class="n">obj_empty</span><span class="p">);</span> | 753 | <span class="n">FIX</span><span class="p">(</span><span class="n">obj_empty</span><span class="p">);</span> |
| @@ -755,7 +762,7 @@ like this:</p> | |||
| 755 | <p>but in fact the interpreter already has tables of these global | 762 | <p>but in fact the interpreter already has tables of these global |
| 756 | objects, so it’s simpler and more extensible for the root scanning | 763 | objects, so it’s simpler and more extensible for the root scanning |
| 757 | function to iterate over them:</p> | 764 | function to iterate over them:</p> |
| 758 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">globals_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">s</span><span class="p">)</span> | 765 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">globals_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">s</span><span class="p">)</span> |
| 759 | <span class="p">{</span> | 766 | <span class="p">{</span> |
| 760 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 767 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 761 | <span class="kt">size_t</span> <span class="n">i</span><span class="p">;</span> | 768 | <span class="kt">size_t</span> <span class="n">i</span><span class="p">;</span> |
| @@ -770,7 +777,7 @@ function to iterate over them:</p> | |||
| 770 | </div> | 777 | </div> |
| 771 | <p>Each root scanning function must be registered with the MPS by calling | 778 | <p>Each root scanning function must be registered with the MPS by calling |
| 772 | <a class="reference internal" href="../topic/root.html#mps_root_create" title="mps_root_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create()</span></tt></a>, like this:</p> | 779 | <a class="reference internal" href="../topic/root.html#mps_root_create" title="mps_root_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create()</span></tt></a>, like this:</p> |
| 773 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_root_t</span> <span class="n">globals_root</span><span class="p">;</span> | 780 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_root_t</span> <span class="n">globals_root</span><span class="p">;</span> |
| 774 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create</span><span class="p">(</span><span class="o">&</span><span class="n">globals_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> | 781 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create</span><span class="p">(</span><span class="o">&</span><span class="n">globals_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> |
| 775 | <span class="n">globals_scan</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> | 782 | <span class="n">globals_scan</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> |
| 776 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register globals root"</span><span class="p">);</span> | 783 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register globals root"</span><span class="p">);</span> |
| @@ -808,11 +815,11 @@ after the rehash has completed, de-registering the old root by calling | |||
| 808 | the global symbol table, but the case of a table of references is | 815 | the global symbol table, but the case of a table of references is |
| 809 | sufficiently common that the MPS provides a convenient (and optimized) | 816 | sufficiently common that the MPS provides a convenient (and optimized) |
| 810 | function, <a class="reference internal" href="../topic/root.html#mps_root_create_table" title="mps_root_create_table"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_table()</span></tt></a>, for registering it:</p> | 817 | function, <a class="reference internal" href="../topic/root.html#mps_root_create_table" title="mps_root_create_table"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_table()</span></tt></a>, for registering it:</p> |
| 811 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_root_t</span> <span class="n">symtab_root</span><span class="p">;</span> | 818 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_root_t</span> <span class="n">symtab_root</span><span class="p">;</span> |
| 812 | 819 | ||
| 813 | <span class="cm">/* ... */</span> | 820 | <span class="cm">/* ... */</span> |
| 814 | 821 | ||
| 815 | <span class="kt">mps_addr_t</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">symtab</span><span class="p">;</span> | 822 | <span class="n">mps_addr_t</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">symtab</span><span class="p">;</span> |
| 816 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table</span><span class="p">(</span><span class="o">&</span><span class="n">symtab_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> | 823 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table</span><span class="p">(</span><span class="o">&</span><span class="n">symtab_root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> |
| 817 | <span class="n">ref</span><span class="p">,</span> <span class="n">symtab_size</span><span class="p">);</span> | 824 | <span class="n">ref</span><span class="p">,</span> <span class="n">symtab_size</span><span class="p">);</span> |
| 818 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register new symtab root"</span><span class="p">);</span> | 825 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register new symtab root"</span><span class="p">);</span> |
| @@ -821,15 +828,15 @@ function, <a class="reference internal" href="../topic/root.html#mps_root_create | |||
| 821 | <p id="guide-lang-roots-rehash">The root must be re-registered whenever the global symbol table | 828 | <p id="guide-lang-roots-rehash">The root must be re-registered whenever the global symbol table |
| 822 | changes size:</p> | 829 | changes size:</p> |
| 823 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">rehash</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> | 830 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">rehash</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> |
| 824 | <span class="kt">obj_t</span> <span class="o">*</span><span class="n">old_symtab</span> <span class="o">=</span> <span class="n">symtab</span><span class="p">;</span> | 831 | <span class="n">obj_t</span> <span class="o">*</span><span class="n">old_symtab</span> <span class="o">=</span> <span class="n">symtab</span><span class="p">;</span> |
| 825 | <span class="kt">unsigned</span> <span class="n">old_symtab_size</span> <span class="o">=</span> <span class="n">symtab_size</span><span class="p">;</span> | 832 | <span class="kt">unsigned</span> <span class="n">old_symtab_size</span> <span class="o">=</span> <span class="n">symtab_size</span><span class="p">;</span> |
| 826 | <span class="kt">mps_root_t</span> <span class="n">old_symtab_root</span> <span class="o">=</span> <span class="n">symtab_root</span><span class="p">;</span> | 833 | <span class="n">mps_root_t</span> <span class="n">old_symtab_root</span> <span class="o">=</span> <span class="n">symtab_root</span><span class="p">;</span> |
| 827 | <span class="kt">unsigned</span> <span class="n">i</span><span class="p">;</span> | 834 | <span class="kt">unsigned</span> <span class="n">i</span><span class="p">;</span> |
| 828 | <span class="kt">mps_addr_t</span> <span class="n">ref</span><span class="p">;</span> | 835 | <span class="n">mps_addr_t</span> <span class="n">ref</span><span class="p">;</span> |
| 829 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 836 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 830 | 837 | ||
| 831 | <span class="n">symtab_size</span> <span class="o">*=</span> <span class="mi">2</span><span class="p">;</span> | 838 | <span class="n">symtab_size</span> <span class="o">*=</span> <span class="mi">2</span><span class="p">;</span> |
| 832 | <span class="n">symtab</span> <span class="o">=</span> <span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">obj_t</span><span class="p">)</span> <span class="o">*</span> <span class="n">symtab_size</span><span class="p">);</span> | 839 | <span class="n">symtab</span> <span class="o">=</span> <span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">obj_t</span><span class="p">)</span> <span class="o">*</span> <span class="n">symtab_size</span><span class="p">);</span> |
| 833 | <span class="k">if</span> <span class="p">(</span><span class="n">symtab</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> | 840 | <span class="k">if</span> <span class="p">(</span><span class="n">symtab</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> |
| 834 | 841 | ||
| 835 | <span class="cm">/* Initialize the new table to NULL so that "find" will work. */</span> | 842 | <span class="cm">/* Initialize the new table to NULL so that "find" will work. */</span> |
| @@ -843,7 +850,7 @@ changes size:</p> | |||
| 843 | 850 | ||
| 844 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">old_symtab_size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> | 851 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">old_symtab_size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> |
| 845 | <span class="k">if</span> <span class="p">(</span><span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 852 | <span class="k">if</span> <span class="p">(</span><span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| 846 | <span class="kt">obj_t</span> <span class="o">*</span><span class="n">where</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-></span><span class="n">symbol</span><span class="p">.</span><span class="n">string</span><span class="p">);</span> | 853 | <span class="n">obj_t</span> <span class="o">*</span><span class="n">where</span> <span class="o">=</span> <span class="n">find</span><span class="p">(</span><span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-></span><span class="n">symbol</span><span class="p">.</span><span class="n">string</span><span class="p">);</span> |
| 847 | <span class="n">assert</span><span class="p">(</span><span class="n">where</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> <span class="cm">/* new table shouldn't be full */</span> | 854 | <span class="n">assert</span><span class="p">(</span><span class="n">where</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> <span class="cm">/* new table shouldn't be full */</span> |
| 848 | <span class="n">assert</span><span class="p">(</span><span class="o">*</span><span class="n">where</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">);</span> <span class="cm">/* shouldn't be in new table */</span> | 855 | <span class="n">assert</span><span class="p">(</span><span class="o">*</span><span class="n">where</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">);</span> <span class="cm">/* shouldn't be in new table */</span> |
| 849 | <span class="o">*</span><span class="n">where</span> <span class="o">=</span> <span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> | 856 | <span class="o">*</span><span class="n">where</span> <span class="o">=</span> <span class="n">old_symtab</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> |
| @@ -906,7 +913,7 @@ programs written in <a class="reference internal" href="../mmref/lang.html#term- | |||
| 906 | </ol> | 913 | </ol> |
| 907 | <p>You register a thread with an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> by calling | 914 | <p>You register a thread with an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> by calling |
| 908 | <a class="reference internal" href="../topic/thread.html#mps_thread_reg" title="mps_thread_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_thread_reg()</span></tt></a>:</p> | 915 | <a class="reference internal" href="../topic/thread.html#mps_thread_reg" title="mps_thread_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_thread_reg()</span></tt></a>:</p> |
| 909 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_thr_t</span> <span class="kr">thread</span><span class="p">;</span> | 916 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_thr_t</span> <span class="kr">thread</span><span class="p">;</span> |
| 910 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_thread_reg</span><span class="p">(</span><span class="o">&</span><span class="kr">thread</span><span class="p">,</span> <span class="n">arena</span><span class="p">);</span> | 917 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_thread_reg</span><span class="p">(</span><span class="o">&</span><span class="kr">thread</span><span class="p">,</span> <span class="n">arena</span><span class="p">);</span> |
| 911 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register thread"</span><span class="p">);</span> | 918 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't register thread"</span><span class="p">);</span> |
| 912 | </pre></div> | 919 | </pre></div> |
| @@ -915,7 +922,7 @@ programs written in <a class="reference internal" href="../mmref/lang.html#term- | |||
| 915 | calling <a class="reference internal" href="../topic/root.html#mps_root_create_reg" title="mps_root_create_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_reg()</span></tt></a> and passing | 922 | calling <a class="reference internal" href="../topic/root.html#mps_root_create_reg" title="mps_root_create_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_reg()</span></tt></a> and passing |
| 916 | <a class="reference internal" href="../topic/root.html#mps_stack_scan_ambig" title="mps_stack_scan_ambig"><tt class="xref c c-func docutils literal"><span class="pre">mps_stack_scan_ambig()</span></tt></a>:</p> | 923 | <a class="reference internal" href="../topic/root.html#mps_stack_scan_ambig" title="mps_stack_scan_ambig"><tt class="xref c c-func docutils literal"><span class="pre">mps_stack_scan_ambig()</span></tt></a>:</p> |
| 917 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="o">*</span><span class="n">marker</span> <span class="o">=</span> <span class="o">&</span><span class="n">marker</span><span class="p">;</span> | 924 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="o">*</span><span class="n">marker</span> <span class="o">=</span> <span class="o">&</span><span class="n">marker</span><span class="p">;</span> |
| 918 | <span class="kt">mps_root_t</span> <span class="n">reg_root</span><span class="p">;</span> | 925 | <span class="n">mps_root_t</span> <span class="n">reg_root</span><span class="p">;</span> |
| 919 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_reg</span><span class="p">(</span><span class="o">&</span><span class="n">reg_root</span><span class="p">,</span> | 926 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_reg</span><span class="p">(</span><span class="o">&</span><span class="n">reg_root</span><span class="p">,</span> |
| 920 | <span class="n">arena</span><span class="p">,</span> | 927 | <span class="n">arena</span><span class="p">,</span> |
| 921 | <span class="n">mps_rank_ambig</span><span class="p">(),</span> | 928 | <span class="n">mps_rank_ambig</span><span class="p">(),</span> |
| @@ -946,11 +953,11 @@ to start allocating.</p> | |||
| 946 | <p><a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">Manual</em></a> pools typically support | 953 | <p><a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">Manual</em></a> pools typically support |
| 947 | <a class="reference internal" href="../glossary/m.html#term-malloc"><em class="xref std std-term">malloc</em></a>-like allocation using the function | 954 | <a class="reference internal" href="../glossary/m.html#term-malloc"><em class="xref std std-term">malloc</em></a>-like allocation using the function |
| 948 | <a class="reference internal" href="../topic/allocation.html#mps_alloc" title="mps_alloc"><tt class="xref c c-func docutils literal"><span class="pre">mps_alloc()</span></tt></a>. But <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatic</em></a> pools cannot, because of the following problem:</p> | 955 | <a class="reference internal" href="../topic/allocation.html#mps_alloc" title="mps_alloc"><tt class="xref c c-func docutils literal"><span class="pre">mps_alloc()</span></tt></a>. But <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatic</em></a> pools cannot, because of the following problem:</p> |
| 949 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">cdr</span><span class="p">)</span> | 956 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">cdr</span><span class="p">)</span> |
| 950 | <span class="p">{</span> | 957 | <span class="p">{</span> |
| 951 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 958 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 952 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 959 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 953 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 960 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 954 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> | 961 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> |
| 955 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_pair"</span><span class="p">);</span> | 962 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_pair"</span><span class="p">);</span> |
| 956 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 963 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| @@ -972,23 +979,23 @@ may abort.</p> | |||
| 972 | <p>The MPS solves this problem via the fast, nearly lock-free | 979 | <p>The MPS solves this problem via the fast, nearly lock-free |
| 973 | <a class="reference internal" href="../topic/allocation.html#topic-allocation-point-protocol"><em>Allocation point protocol</em></a>. This needs an additional | 980 | <a class="reference internal" href="../topic/allocation.html#topic-allocation-point-protocol"><em>Allocation point protocol</em></a>. This needs an additional |
| 974 | structure, an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>, to be attached to the pool by | 981 | structure, an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>, to be attached to the pool by |
| 975 | calling <a class="reference internal" href="../topic/allocation.html#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a>:</p> | 982 | calling <a class="reference internal" href="../topic/allocation.html#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a>:</p> |
| 976 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_ap_t</span> <span class="n">obj_ap</span><span class="p">;</span> | 983 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_ap_t</span> <span class="n">obj_ap</span><span class="p">;</span> |
| 977 | 984 | ||
| 978 | <span class="cm">/* ... */</span> | 985 | <span class="cm">/* ... */</span> |
| 979 | 986 | ||
| 980 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">obj_ap</span><span class="p">,</span> <span class="n">obj_pool</span><span class="p">,</span> <span class="n">mps_rank_exact</span><span class="p">());</span> | 987 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">obj_ap</span><span class="p">,</span> <span class="n">obj_pool</span><span class="p">,</span> <span class="n">mps_args_none</span><span class="p">);</span> |
| 981 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj allocation point"</span><span class="p">);</span> | 988 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj allocation point"</span><span class="p">);</span> |
| 982 | </pre></div> | 989 | </pre></div> |
| 983 | </div> | 990 | </div> |
| 984 | <p>And then the constructor can be implemented like this:</p> | 991 | <p>And then the constructor can be implemented like this:</p> |
| 985 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">cdr</span><span class="p">)</span> | 992 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">make_pair</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">car</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">cdr</span><span class="p">)</span> |
| 986 | <span class="p">{</span> | 993 | <span class="p">{</span> |
| 987 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 994 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 988 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 995 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 989 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> | 996 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">pair_s</span><span class="p">));</span> |
| 990 | <span class="k">do</span> <span class="p">{</span> | 997 | <span class="k">do</span> <span class="p">{</span> |
| 991 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 998 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">obj_ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 992 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_pair"</span><span class="p">);</span> | 999 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_pair"</span><span class="p">);</span> |
| 993 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 1000 | <span class="n">obj</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 994 | <span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PAIR</span><span class="p">;</span> | 1001 | <span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_PAIR</span><span class="p">;</span> |
diff --git a/mps/manual/html/index.html b/mps/manual/html/index.html index cff70dc3459..81bf16f42e7 100644 --- a/mps/manual/html/index.html +++ b/mps/manual/html/index.html | |||
| @@ -63,24 +63,25 @@ | |||
| 63 | </li> | 63 | </li> |
| 64 | <li class="toctree-l1"><a class="reference internal" href="topic/index.html">Reference</a><ul> | 64 | <li class="toctree-l1"><a class="reference internal" href="topic/index.html">Reference</a><ul> |
| 65 | <li class="toctree-l2"><a class="reference internal" href="topic/interface.html">1. Interface conventions</a></li> | 65 | <li class="toctree-l2"><a class="reference internal" href="topic/interface.html">1. Interface conventions</a></li> |
| 66 | <li class="toctree-l2"><a class="reference internal" href="topic/error.html">2. Error handing</a></li> | 66 | <li class="toctree-l2"><a class="reference internal" href="topic/keyword.html">2. Keyword arguments</a></li> |
| 67 | <li class="toctree-l2"><a class="reference internal" href="topic/arena.html">3. Arenas</a></li> | 67 | <li class="toctree-l2"><a class="reference internal" href="topic/error.html">3. Error handing</a></li> |
| 68 | <li class="toctree-l2"><a class="reference internal" href="topic/pool.html">4. Pools</a></li> | 68 | <li class="toctree-l2"><a class="reference internal" href="topic/arena.html">4. Arenas</a></li> |
| 69 | <li class="toctree-l2"><a class="reference internal" href="topic/allocation.html">5. Allocation</a></li> | 69 | <li class="toctree-l2"><a class="reference internal" href="topic/pool.html">5. Pools</a></li> |
| 70 | <li class="toctree-l2"><a class="reference internal" href="topic/format.html">6. Object formats</a></li> | 70 | <li class="toctree-l2"><a class="reference internal" href="topic/allocation.html">6. Allocation</a></li> |
| 71 | <li class="toctree-l2"><a class="reference internal" href="topic/scanning.html">7. Scanning</a></li> | 71 | <li class="toctree-l2"><a class="reference internal" href="topic/format.html">7. Object formats</a></li> |
| 72 | <li class="toctree-l2"><a class="reference internal" href="topic/thread.html">8. Threads</a></li> | 72 | <li class="toctree-l2"><a class="reference internal" href="topic/scanning.html">8. Scanning</a></li> |
| 73 | <li class="toctree-l2"><a class="reference internal" href="topic/root.html">9. Roots</a></li> | 73 | <li class="toctree-l2"><a class="reference internal" href="topic/thread.html">9. Threads</a></li> |
| 74 | <li class="toctree-l2"><a class="reference internal" href="topic/collection.html">10. Garbage collection</a></li> | 74 | <li class="toctree-l2"><a class="reference internal" href="topic/root.html">10. Roots</a></li> |
| 75 | <li class="toctree-l2"><a class="reference internal" href="topic/message.html">11. Messages</a></li> | 75 | <li class="toctree-l2"><a class="reference internal" href="topic/collection.html">11. Garbage collection</a></li> |
| 76 | <li class="toctree-l2"><a class="reference internal" href="topic/finalization.html">12. Finalization</a></li> | 76 | <li class="toctree-l2"><a class="reference internal" href="topic/message.html">12. Messages</a></li> |
| 77 | <li class="toctree-l2"><a class="reference internal" href="topic/location.html">13. Location dependency</a></li> | 77 | <li class="toctree-l2"><a class="reference internal" href="topic/finalization.html">13. Finalization</a></li> |
| 78 | <li class="toctree-l2"><a class="reference internal" href="topic/cache.html">14. Segregated allocation caches</a></li> | 78 | <li class="toctree-l2"><a class="reference internal" href="topic/location.html">14. Location dependency</a></li> |
| 79 | <li class="toctree-l2"><a class="reference internal" href="topic/pattern.html">15. Allocation patterns</a></li> | 79 | <li class="toctree-l2"><a class="reference internal" href="topic/cache.html">15. Segregated allocation caches</a></li> |
| 80 | <li class="toctree-l2"><a class="reference internal" href="topic/frame.html">16. Allocation frames</a></li> | 80 | <li class="toctree-l2"><a class="reference internal" href="topic/pattern.html">16. Allocation patterns</a></li> |
| 81 | <li class="toctree-l2"><a class="reference internal" href="topic/debugging.html">17. Debugging pools</a></li> | 81 | <li class="toctree-l2"><a class="reference internal" href="topic/frame.html">17. Allocation frames</a></li> |
| 82 | <li class="toctree-l2"><a class="reference internal" href="topic/telemetry.html">18. Telemetry</a></li> | 82 | <li class="toctree-l2"><a class="reference internal" href="topic/debugging.html">18. Debugging pools</a></li> |
| 83 | <li class="toctree-l2"><a class="reference internal" href="topic/weak.html">19. Weak references</a></li> | 83 | <li class="toctree-l2"><a class="reference internal" href="topic/telemetry.html">19. Telemetry</a></li> |
| 84 | <li class="toctree-l2"><a class="reference internal" href="topic/weak.html">20. Weak references</a></li> | ||
| 84 | </ul> | 85 | </ul> |
| 85 | </li> | 86 | </li> |
| 86 | <li class="toctree-l1"><a class="reference internal" href="pool/index.html">Pool reference</a><ul> | 87 | <li class="toctree-l1"><a class="reference internal" href="pool/index.html">Pool reference</a><ul> |
diff --git a/mps/manual/html/mmref/bib.html b/mps/manual/html/mmref/bib.html index a521d287424..dfef33450bf 100644 --- a/mps/manual/html/mmref/bib.html +++ b/mps/manual/html/mmref/bib.html | |||
| @@ -131,6 +131,10 @@ | |||
| 131 | </li> | 131 | </li> |
| 132 | <li><p id="brooksby02">Richard Brooksby. 2002. “<a class="reference external" href="http://www.ravenbrook.com/project/mps/doc/2002-01-30/ismm2002-paper/">The Memory Pool System: Thirty person-years of memory management development goes Open Source</a>”. ISMM‘02.</p> | 132 | <li><p id="brooksby02">Richard Brooksby. 2002. “<a class="reference external" href="http://www.ravenbrook.com/project/mps/doc/2002-01-30/ismm2002-paper/">The Memory Pool System: Thirty person-years of memory management development goes Open Source</a>”. ISMM‘02.</p> |
| 133 | </li> | 133 | </li> |
| 134 | <li><p id="c1990">International Standard ISO/IEC 9899:1990. “Programming languages — C”.</p> | ||
| 135 | </li> | ||
| 136 | <li><p id="c1999">International Standard ISO/IEC 9899:1999. “<a class="reference external" href="http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf">Programming languages — C</a>”.</p> | ||
| 137 | </li> | ||
| 134 | <li><p id="cgz94">Brad Calder, Dirk Grunwald, Benjamin Zorn. 1994. “<a class="reference external" href="http://cseclassic.ucsd.edu/users/calder/papers/JplVersion.pdf">Quantifying Behavioral Differences Between C and C++ Programs</a>”. <em>Journal of Programming Languages.</em> 2(4):313–351.</p> | 138 | <li><p id="cgz94">Brad Calder, Dirk Grunwald, Benjamin Zorn. 1994. “<a class="reference external" href="http://cseclassic.ucsd.edu/users/calder/papers/JplVersion.pdf">Quantifying Behavioral Differences Between C and C++ Programs</a>”. <em>Journal of Programming Languages.</em> 2(4):313–351.</p> |
| 135 | </li> | 139 | </li> |
| 136 | <li><p id="cpc00">Dante J. Cannarozzi, Michael P. Plezbert, Ron K. Cytron. 2000. “<a class="reference external" href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.9649&rep=rep1&type=pdf">Contaminated garbage collection</a>”. ACM. Proceedings of the ACM SIGPLAN ‘00 conference on on Programming language design and implementation, pp. 264–273.</p> | 140 | <li><p id="cpc00">Dante J. Cannarozzi, Michael P. Plezbert, Ron K. Cytron. 2000. “<a class="reference external" href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.9649&rep=rep1&type=pdf">Contaminated garbage collection</a>”. ACM. Proceedings of the ACM SIGPLAN ‘00 conference on on Programming language design and implementation, pp. 264–273.</p> |
diff --git a/mps/manual/html/mmref/lang.html b/mps/manual/html/mmref/lang.html index ecfa367138b..65e3347368c 100644 --- a/mps/manual/html/mmref/lang.html +++ b/mps/manual/html/mmref/lang.html | |||
| @@ -125,7 +125,7 @@ longer required (see <a class="reference internal" href="../glossary/m.html#term | |||
| 125 | </div> | 125 | </div> |
| 126 | <div class="admonition-related-publication admonition"> | 126 | <div class="admonition-related-publication admonition"> |
| 127 | <p class="first admonition-title">Related publications</p> | 127 | <p class="first admonition-title">Related publications</p> |
| 128 | <p class="last"><a class="reference internal" href="bib.html#bw88"><em>Boehm & Weiser (1988)</em></a>, <a class="reference internal" href="bib.html#daconta93"><em>Daconta (1993)</em></a>, <a class="reference internal" href="bib.html#zorn93"><em>Zorn (1993)</em></a>.</p> | 128 | <p class="last"><a class="reference internal" href="bib.html#c1990"><em>ISO/IEC 9899:1990</em></a>, <a class="reference internal" href="bib.html#c1999"><em>ISO/IEC 9899:1999</em></a>, <a class="reference internal" href="bib.html#bw88"><em>Boehm & Weiser (1988)</em></a>, <a class="reference internal" href="bib.html#daconta93"><em>Daconta (1993)</em></a>, <a class="reference internal" href="bib.html#zorn93"><em>Zorn (1993)</em></a>.</p> |
| 129 | </div> | 129 | </div> |
| 130 | <div class="admonition-related-link last admonition"> | 130 | <div class="admonition-related-link last admonition"> |
| 131 | <p class="first admonition-title">Related links</p> | 131 | <p class="first admonition-title">Related links</p> |
diff --git a/mps/manual/html/objects.inv b/mps/manual/html/objects.inv index b079c65a7e0..bef4c934dd4 100644 --- a/mps/manual/html/objects.inv +++ b/mps/manual/html/objects.inv | |||
| Binary files differ | |||
diff --git a/mps/manual/html/pool/amc.html b/mps/manual/html/pool/amc.html index d5b53a5c9f2..1d129db5da8 100644 --- a/mps/manual/html/pool/amc.html +++ b/mps/manual/html/pool/amc.html | |||
| @@ -115,19 +115,38 @@ belong to an object format of variant auto-header).</li> | |||
| 115 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_amc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_amc" title="Permalink to this definition">¶</a></dt> | 115 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_amc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_amc" title="Permalink to this definition">¶</a></dt> |
| 116 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMC (Automatic | 116 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMC (Automatic |
| 117 | Mostly-Copying) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 117 | Mostly-Copying) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 118 | <p>When creating an AMC pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes two | 118 | <p>When creating an AMC pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 119 | extra arguments:</p> | 119 | two <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 120 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 120 | <ul class="simple"> |
| 121 | <span class="kt">mps_class_t</span> <span class="n">mps_class_amc</span><span class="p">(),</span> | 121 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 122 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | 122 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 123 | <span class="kt">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | 123 | objects allocated in the pool. The format must provide a |
| 124 | <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>, a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, a <a class="reference internal" href="../glossary/f.html#term-forward-method"><em class="xref std std-term">forward | ||
| 125 | method</em></a>, an <a class="reference internal" href="../glossary/i.html#term-is-forwarded-method"><em class="xref std std-term">is-forwarded method</em></a> and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding | ||
| 126 | method</em></a>.</li> | ||
| 127 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_CHAIN</span></tt> (member <tt class="docutils literal"><span class="pre">.val.chain</span></tt>; type | ||
| 128 | <a class="reference internal" href="../topic/collection.html#mps_chain_t" title="mps_chain_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_chain_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> | ||
| 129 | for the pool.</li> | ||
| 130 | </ul> | ||
| 131 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 132 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_amc</span><span class="p">(),</span> | ||
| 133 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="n">chain</span><span class="p">},</span> | ||
| 134 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 135 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 124 | </pre></div> | 136 | </pre></div> |
| 125 | </div> | 137 | </div> |
| 126 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 138 | <div class="admonition-deprecated admonition"> |
| 127 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan | 139 | <p class="first admonition-title">Deprecated</p> |
| 128 | method</em></a>, a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, a <a class="reference internal" href="../glossary/f.html#term-forward-method"><em class="xref std std-term">forward method</em></a>, an | 140 | <p>starting with version 1.112.</p> |
| 129 | <a class="reference internal" href="../glossary/i.html#term-is-forwarded-method"><em class="xref std std-term">is-forwarded method</em></a> and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding method</em></a>.</p> | 141 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format and |
| 130 | <p><tt class="docutils literal"><span class="pre">chain</span></tt> specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> for the pool.</p> | 142 | chain like this:</p> |
| 143 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 144 | <span class="n">mps_class_t</span> <span class="n">mps_class_amc</span><span class="p">(),</span> | ||
| 145 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | ||
| 146 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | ||
| 147 | </pre></div> | ||
| 148 | </div> | ||
| 149 | </div> | ||
| 131 | </dd></dl> | 150 | </dd></dl> |
| 132 | 151 | ||
| 133 | </div> | 152 | </div> |
diff --git a/mps/manual/html/pool/amcz.html b/mps/manual/html/pool/amcz.html index 9780b1c4bba..11e9b50bcd7 100644 --- a/mps/manual/html/pool/amcz.html +++ b/mps/manual/html/pool/amcz.html | |||
| @@ -87,19 +87,37 @@ method</em></a>.</li> | |||
| 87 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_amcz</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_amcz" title="Permalink to this definition">¶</a></dt> | 87 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_amcz</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_amcz" title="Permalink to this definition">¶</a></dt> |
| 88 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMCZ (Automatic | 88 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMCZ (Automatic |
| 89 | Mostly-Copying Zero-rank) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 89 | Mostly-Copying Zero-rank) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 90 | <p>When creating an AMCZ pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes two | 90 | <p>When creating an AMCZ pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 91 | extra arguments:</p> | 91 | two <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 92 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 92 | <ul class="simple"> |
| 93 | <span class="kt">mps_class_t</span> <span class="n">mps_class_amcz</span><span class="p">(),</span> | 93 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 94 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | 94 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 95 | <span class="kt">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | 95 | objects allocated in the pool. The format must provide a |
| 96 | <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, a <a class="reference internal" href="../glossary/f.html#term-forward-method"><em class="xref std std-term">forward method</em></a>, an | ||
| 97 | <a class="reference internal" href="../glossary/i.html#term-is-forwarded-method"><em class="xref std std-term">is-forwarded method</em></a> and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding method</em></a>.</li> | ||
| 98 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_CHAIN</span></tt> (member <tt class="docutils literal"><span class="pre">.val.chain</span></tt>; type | ||
| 99 | <a class="reference internal" href="../topic/collection.html#mps_chain_t" title="mps_chain_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_chain_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> | ||
| 100 | for the pool.</li> | ||
| 101 | </ul> | ||
| 102 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 103 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_amcz</span><span class="p">(),</span> | ||
| 104 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="n">chain</span><span class="p">},</span> | ||
| 105 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 106 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 96 | </pre></div> | 107 | </pre></div> |
| 97 | </div> | 108 | </div> |
| 98 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 109 | <div class="admonition-deprecated admonition"> |
| 99 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip | 110 | <p class="first admonition-title">Deprecated</p> |
| 100 | method</em></a>, a <a class="reference internal" href="../glossary/f.html#term-forward-method"><em class="xref std std-term">forward method</em></a>, an <a class="reference internal" href="../glossary/i.html#term-is-forwarded-method"><em class="xref std std-term">is-forwarded method</em></a> | 111 | <p>starting with version 1.112.</p> |
| 101 | and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding method</em></a>.</p> | 112 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format and |
| 102 | <p><tt class="docutils literal"><span class="pre">chain</span></tt> specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> for the pool.</p> | 113 | chain like this:</p> |
| 114 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 115 | <span class="n">mps_class_t</span> <span class="n">mps_class_amcz</span><span class="p">(),</span> | ||
| 116 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | ||
| 117 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | ||
| 118 | </pre></div> | ||
| 119 | </div> | ||
| 120 | </div> | ||
| 103 | </dd></dl> | 121 | </dd></dl> |
| 104 | 122 | ||
| 105 | </div> | 123 | </div> |
diff --git a/mps/manual/html/pool/ams.html b/mps/manual/html/pool/ams.html index 7ef790a26d5..36849bfa38a 100644 --- a/mps/manual/html/pool/ams.html +++ b/mps/manual/html/pool/ams.html | |||
| @@ -118,19 +118,36 @@ of this is that the pool’s <a class="reference internal" href="../glossary | |||
| 118 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_ams</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_ams" title="Permalink to this definition">¶</a></dt> | 118 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_ams</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_ams" title="Permalink to this definition">¶</a></dt> |
| 119 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMS (Automatic Mark & Sweep) | 119 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AMS (Automatic Mark & Sweep) |
| 120 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 120 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 121 | <p>When creating an AMS pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes two | 121 | <p>When creating an AMS pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 122 | extra arguments:</p> | 122 | two <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 123 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 123 | <ul class="simple"> |
| 124 | <span class="kt">mps_class_t</span> <span class="n">mps_class_ams</span><span class="p">(),</span> | 124 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 125 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | 125 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 126 | <span class="kt">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | 126 | objects allocated in the pool. The format must provide a |
| 127 | <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a> and a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>.</li> | ||
| 128 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_CHAIN</span></tt> (member <tt class="docutils literal"><span class="pre">.val.chain</span></tt>; type | ||
| 129 | <a class="reference internal" href="../topic/collection.html#mps_chain_t" title="mps_chain_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_chain_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> | ||
| 130 | for the pool. It must have a single generation.</li> | ||
| 131 | </ul> | ||
| 132 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 133 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_ams</span><span class="p">(),</span> | ||
| 134 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="n">chain</span><span class="p">},</span> | ||
| 135 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 136 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 137 | </pre></div> | ||
| 138 | </div> | ||
| 139 | <div class="admonition-deprecated admonition"> | ||
| 140 | <p class="first admonition-title">Deprecated</p> | ||
| 141 | <p>starting with version 1.112.</p> | ||
| 142 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format and | ||
| 143 | chain like this:</p> | ||
| 144 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 145 | <span class="n">mps_class_t</span> <span class="n">mps_class_ams</span><span class="p">(),</span> | ||
| 146 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | ||
| 147 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | ||
| 127 | </pre></div> | 148 | </pre></div> |
| 128 | </div> | 149 | </div> |
| 129 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 150 | </div> |
| 130 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan | ||
| 131 | method</em></a> and a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>.</p> | ||
| 132 | <p><tt class="docutils literal"><span class="pre">chain</span></tt> specifies the <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> for the pool. It | ||
| 133 | must have a single generation.</p> | ||
| 134 | </dd></dl> | 151 | </dd></dl> |
| 135 | 152 | ||
| 136 | <dl class="function"> | 153 | <dl class="function"> |
| @@ -138,18 +155,24 @@ must have a single generation.</p> | |||
| 138 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_ams_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_ams_debug" title="Permalink to this definition">¶</a></dt> | 155 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_ams_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_ams_debug" title="Permalink to this definition">¶</a></dt> |
| 139 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the AMS pool | 156 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the AMS pool |
| 140 | class.</p> | 157 | class.</p> |
| 141 | <p>When creating a debugging AMS pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> | 158 | <p>When creating a debugging AMS pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> |
| 142 | takes three extra arguments:</p> | 159 | requires three keyword arguments: <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> and |
| 143 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 160 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_CHAIN</span></tt> are as described above, and |
| 144 | <span class="kt">mps_class_t</span> <span class="n">mps_class_ams_debug</span><span class="p">(),</span> | 161 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_POOL_DEBUG_OPTIONS</span></tt> specifies the debugging |
| 162 | options. See <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</p> | ||
| 163 | <div class="admonition-deprecated admonition"> | ||
| 164 | <p class="first admonition-title">Deprecated</p> | ||
| 165 | <p>starting with version 1.112.</p> | ||
| 166 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format, | ||
| 167 | chain, and debugging options like this:</p> | ||
| 168 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 169 | <span class="n">mps_class_t</span> <span class="n">mps_class_ams_debug</span><span class="p">(),</span> | ||
| 145 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> | 170 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> |
| 146 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | 171 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> |
| 147 | <span class="kt">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> | 172 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">)</span> |
| 148 | </pre></div> | 173 | </pre></div> |
| 149 | </div> | 174 | </div> |
| 150 | <p><tt class="docutils literal"><span class="pre">debug_option</span></tt> specifies the debugging options. See | 175 | </div> |
| 151 | <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</p> | ||
| 152 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> and <tt class="docutils literal"><span class="pre">chain</span></tt> are the same as for <a class="reference internal" href="#mps_class_ams" title="mps_class_ams"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_ams()</span></tt></a>.</p> | ||
| 153 | </dd></dl> | 176 | </dd></dl> |
| 154 | 177 | ||
| 155 | </div> | 178 | </div> |
diff --git a/mps/manual/html/pool/awl.html b/mps/manual/html/pool/awl.html index 2df8f0d2e77..e926ccc52ab 100644 --- a/mps/manual/html/pool/awl.html +++ b/mps/manual/html/pool/awl.html | |||
| @@ -93,8 +93,8 @@ takes one additional parameter, a <a class="reference internal" href="../glossar | |||
| 93 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a> (to allocate ordinary objects containing | 93 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a> (to allocate ordinary objects containing |
| 94 | <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact references</em></a>), or <a class="reference internal" href="../topic/root.html#mps_rank_weak" title="mps_rank_weak"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_weak()</span></tt></a> (to allocate | 94 | <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact references</em></a>), or <a class="reference internal" href="../topic/root.html#mps_rank_weak" title="mps_rank_weak"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_weak()</span></tt></a> (to allocate |
| 95 | objects that contain weak references). For example:</p> | 95 | objects that contain weak references). For example:</p> |
| 96 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_ap_t</span> <span class="n">ap</span><span class="p">;</span> | 96 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_ap_t</span> <span class="n">ap</span><span class="p">;</span> |
| 97 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 97 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 98 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">ap</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="n">mps_rank_weak</span><span class="p">());</span> | 98 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="o">&</span><span class="n">ap</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="n">mps_rank_weak</span><span class="p">());</span> |
| 99 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"can't create allocation point"</span><span class="p">);</span> | 99 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"can't create allocation point"</span><span class="p">);</span> |
| 100 | </pre></div> | 100 | </pre></div> |
| @@ -169,31 +169,31 @@ values object, and vice versa (if necessary). The scan method looks | |||
| 169 | out for the splatting of a reference, and when this is detected, it | 169 | out for the splatting of a reference, and when this is detected, it |
| 170 | splats the corresponding reference in the dependent object.</p> | 170 | splats the corresponding reference in the dependent object.</p> |
| 171 | <p>For example:</p> | 171 | <p>For example:</p> |
| 172 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">obj_t</span> <span class="n">obj_deleted</span><span class="p">;</span> <span class="cm">/* deleted entry in hash table */</span> | 172 | <div class="highlight-c"><div class="highlight"><pre><span class="n">obj_t</span> <span class="n">obj_deleted</span><span class="p">;</span> <span class="cm">/* deleted entry in hash table */</span> |
| 173 | 173 | ||
| 174 | <span class="k">typedef</span> <span class="k">struct</span> <span class="n">weak_array_s</span> <span class="p">{</span> | 174 | <span class="k">typedef</span> <span class="k">struct</span> <span class="n">weak_array_s</span> <span class="p">{</span> |
| 175 | <span class="k">struct</span> <span class="n">weak_array_s</span> <span class="o">*</span><span class="n">dependent</span><span class="p">;</span> | 175 | <span class="k">struct</span> <span class="n">weak_array_s</span> <span class="o">*</span><span class="n">dependent</span><span class="p">;</span> |
| 176 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* tagged as "length * 2 + 1" */</span> | 176 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* tagged as "length * 2 + 1" */</span> |
| 177 | <span class="kt">obj_t</span> <span class="n">slot</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> | 177 | <span class="n">obj_t</span> <span class="n">slot</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> |
| 178 | <span class="p">}</span> <span class="n">weak_array_s</span><span class="p">,</span> <span class="o">*</span><span class="kt">weak_array_t</span><span class="p">;</span> | 178 | <span class="p">}</span> <span class="n">weak_array_s</span><span class="p">,</span> <span class="o">*</span><span class="n">weak_array_t</span><span class="p">;</span> |
| 179 | 179 | ||
| 180 | <span class="k">typedef</span> <span class="n">weak_table_s</span> <span class="p">{</span> | 180 | <span class="k">typedef</span> <span class="n">weak_table_s</span> <span class="p">{</span> |
| 181 | <span class="n">type_s</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_WEAK_TABLE */</span> | 181 | <span class="n">type_s</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_WEAK_TABLE */</span> |
| 182 | <span class="kt">weak_array_t</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">;</span> | 182 | <span class="n">weak_array_t</span> <span class="n">keys</span><span class="p">,</span> <span class="n">values</span><span class="p">;</span> |
| 183 | <span class="p">}</span> <span class="n">weak_table_s</span><span class="p">,</span> <span class="o">*</span><span class="kt">weak_table_t</span><span class="p">;</span> | 183 | <span class="p">}</span> <span class="n">weak_table_s</span><span class="p">,</span> <span class="o">*</span><span class="n">weak_table_t</span><span class="p">;</span> |
| 184 | 184 | ||
| 185 | <span class="kt">mps_addr_t</span> <span class="nf">weak_array_find_dependent</span><span class="p">(</span><span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> | 185 | <span class="n">mps_addr_t</span> <span class="nf">weak_array_find_dependent</span><span class="p">(</span><span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">)</span> |
| 186 | <span class="p">{</span> | 186 | <span class="p">{</span> |
| 187 | <span class="kt">weak_array_t</span> <span class="n">a</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 187 | <span class="n">weak_array_t</span> <span class="n">a</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 188 | <span class="k">return</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> | 188 | <span class="k">return</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> |
| 189 | <span class="p">}</span> | 189 | <span class="p">}</span> |
| 190 | 190 | ||
| 191 | <span class="kt">mps_res_t</span> <span class="nf">weak_array_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 191 | <span class="n">mps_res_t</span> <span class="nf">weak_array_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 192 | <span class="p">{</span> | 192 | <span class="p">{</span> |
| 193 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 193 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 194 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 194 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 195 | <span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 195 | <span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 196 | <span class="kt">weak_array_t</span> <span class="n">a</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 196 | <span class="n">weak_array_t</span> <span class="n">a</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 197 | <span class="kt">size_t</span> <span class="n">i</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">length</span> <span class="o">>></span> <span class="mi">1</span><span class="p">;</span> <span class="cm">/* untag */</span> | 197 | <span class="kt">size_t</span> <span class="n">i</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">length</span> <span class="o">>></span> <span class="mi">1</span><span class="p">;</span> <span class="cm">/* untag */</span> |
| 198 | <span class="n">p</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> | 198 | <span class="n">p</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">;</span> |
| 199 | <span class="n">MPS_FIX12</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 199 | <span class="n">MPS_FIX12</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| @@ -201,7 +201,7 @@ splats the corresponding reference in the dependent object.</p> | |||
| 201 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> | 201 | <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> |
| 202 | <span class="n">p</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">slot</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> | 202 | <span class="n">p</span> <span class="o">=</span> <span class="n">a</span><span class="o">-></span><span class="n">slot</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> |
| 203 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> | 203 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> |
| 204 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 204 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| 205 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> | 205 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| 206 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">)</span> <span class="p">{</span> | 206 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">a</span><span class="o">-></span><span class="n">dependent</span><span class="p">)</span> <span class="p">{</span> |
| 207 | <span class="cm">/* key/value was splatted: splat value/key too */</span> | 207 | <span class="cm">/* key/value was splatted: splat value/key too */</span> |
| @@ -311,32 +311,63 @@ example</em></a> above.</p> | |||
| 311 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_awl</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_awl" title="Permalink to this definition">¶</a></dt> | 311 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_awl</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_awl" title="Permalink to this definition">¶</a></dt> |
| 312 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AWL (Automatic Weak Linked) | 312 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an AWL (Automatic Weak Linked) |
| 313 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 313 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 314 | <p>When creating an AWL pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes two | 314 | <p>When creating an AWL pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 315 | extra arguments:</p> | 315 | two <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 316 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 316 | <ul class="simple"> |
| 317 | <span class="kt">mps_class_t</span> <span class="n">mps_class_awl</span><span class="p">(),</span> | 317 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 318 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> | 318 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 319 | <span class="kt">mps_awl_find_dependent_t</span> <span class="n">find_dependent</span><span class="p">)</span> | 319 | objects allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan |
| 320 | method</em></a> and a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>.</li> | ||
| 321 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_AWL_FIND_DEPENDENT</span></tt> (member | ||
| 322 | <tt class="docutils literal"><span class="pre">.val.addr_method</span></tt>; type <a class="reference internal" href="#mps_awl_find_dependent_t" title="mps_awl_find_dependent_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_awl_find_dependent_t</span></tt></a>) | ||
| 323 | is a function that specifies how to find the <a class="reference internal" href="../glossary/d.html#term-dependent-object"><em class="xref std std-term">dependent | ||
| 324 | object</em></a> for an object in the pool.</li> | ||
| 325 | </ul> | ||
| 326 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 327 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_awl</span><span class="p">(),</span> | ||
| 328 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 329 | <span class="p">{</span><span class="n">MPS_KEY_AWL_FIND_DEPENDENT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">addr_method</span> <span class="o">=</span> <span class="n">find_dependent</span><span class="p">},</span> | ||
| 330 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 320 | </pre></div> | 331 | </pre></div> |
| 321 | </div> | 332 | </div> |
| 322 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 333 | <div class="admonition-deprecated admonition"> |
| 323 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan | 334 | <p class="first admonition-title">Deprecated</p> |
| 324 | method</em></a> and a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>.</p> | 335 | <p>starting with version 1.112.</p> |
| 325 | <p><tt class="docutils literal"><span class="pre">find_dependent</span></tt> is a function of type | 336 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format and |
| 326 | <a class="reference internal" href="#mps_awl_find_dependent_t" title="mps_awl_find_dependent_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_awl_find_dependent_t</span></tt></a> that specifies how to find the | 337 | find-dependent function like this:</p> |
| 327 | <a class="reference internal" href="../glossary/d.html#term-dependent-object"><em class="xref std std-term">dependent object</em></a> for an object in the pool.</p> | 338 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> |
| 328 | <p>When creating an allocation point on an AWL pool, | 339 | <span class="n">mps_class_t</span> <span class="n">mps_class_awl</span><span class="p">(),</span> |
| 329 | <a class="reference internal" href="../topic/allocation.html#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a> takes one extra argument:</p> | 340 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">,</span> |
| 330 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="kt">mps_ap_t</span> <span class="o">*</span><span class="n">ap_o</span><span class="p">,</span> <span class="kt">mps_pool_t</span> <span class="n">pool</span><span class="p">,</span> | 341 | <span class="n">mps_awl_find_dependent_t</span> <span class="n">find_dependent</span><span class="p">)</span> |
| 331 | <span class="kt">mps_rank_t</span> <span class="n">rank</span><span class="p">)</span> | ||
| 332 | </pre></div> | 342 | </pre></div> |
| 333 | </div> | 343 | </div> |
| 334 | <p><tt class="docutils literal"><span class="pre">rank</span></tt> specifies the <a class="reference internal" href="../glossary/r.html#term-rank"><em class="xref std std-term">rank</em></a> of references in objects | 344 | </div> |
| 335 | allocated on this allocation point. It must be | 345 | <p>When creating an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a> on an AWL pool, |
| 346 | <a class="reference internal" href="../topic/allocation.html#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> requires one keyword argument:</p> | ||
| 347 | <ul class="simple"> | ||
| 348 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_RANK</span></tt> (member <tt class="docutils literal"><span class="pre">.val.rank</span></tt>; type | ||
| 349 | <a class="reference internal" href="../topic/root.html#mps_rank_t" title="mps_rank_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_rank_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/r.html#term-rank"><em class="xref std std-term">rank</em></a> of references | ||
| 350 | in objects allocated on this allocation point. It must be | ||
| 336 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a> (if the objects allocated on this | 351 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a> (if the objects allocated on this |
| 337 | allocation point will contain <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact references</em></a>), or | 352 | allocation point will contain <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact references</em></a>), or |
| 338 | <a class="reference internal" href="../topic/root.html#mps_rank_weak" title="mps_rank_weak"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_weak()</span></tt></a> (if the objects will contain <a class="reference internal" href="../glossary/w.html#term-weak-reference-1"><em class="xref std std-term">weak | 353 | <a class="reference internal" href="../topic/root.html#mps_rank_weak" title="mps_rank_weak"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_weak()</span></tt></a> (if the objects will contain <a class="reference internal" href="../glossary/w.html#term-weak-reference-1"><em class="xref std std-term">weak |
| 339 | references<sup>(1)</sup></em></a>).</p> | 354 | references<sup>(1)</sup></em></a>).</li> |
| 355 | </ul> | ||
| 356 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 357 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">ap</span><span class="p">,</span> <span class="n">awl_pool</span><span class="p">,</span> | ||
| 358 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_RANK</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">mps_rank_weak</span><span class="p">()},</span> | ||
| 359 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 360 | </pre></div> | ||
| 361 | </div> | ||
| 362 | <div class="admonition-deprecated admonition"> | ||
| 363 | <p class="first admonition-title">Deprecated</p> | ||
| 364 | <p>starting with version 1.112.</p> | ||
| 365 | <p>When using <a class="reference internal" href="../topic/allocation.html#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a>, pass the rank like this:</p> | ||
| 366 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="n">mps_ap_t</span> <span class="o">*</span><span class="n">ap_o</span><span class="p">,</span> <span class="n">mps_pool_t</span> <span class="n">pool</span><span class="p">,</span> | ||
| 367 | <span class="n">mps_rank_t</span> <span class="n">rank</span><span class="p">)</span> | ||
| 368 | </pre></div> | ||
| 369 | </div> | ||
| 370 | </div> | ||
| 340 | </dd></dl> | 371 | </dd></dl> |
| 341 | 372 | ||
| 342 | <dl class="type"> | 373 | <dl class="type"> |
diff --git a/mps/manual/html/pool/index.html b/mps/manual/html/pool/index.html index e4ab514e965..007566b276c 100644 --- a/mps/manual/html/pool/index.html +++ b/mps/manual/html/pool/index.html | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="next" title="1. Choosing a pool class" href="intro.html" /> | 30 | <link rel="next" title="1. Choosing a pool class" href="intro.html" /> |
| 31 | <link rel="prev" title="19. Weak references" href="../topic/weak.html" /> | 31 | <link rel="prev" title="20. Weak references" href="../topic/weak.html" /> |
| 32 | </head> | 32 | </head> |
| 33 | <body> | 33 | <body> |
| 34 | <div class="related"> | 34 | <div class="related"> |
| @@ -41,7 +41,7 @@ | |||
| 41 | <a href="intro.html" title="1. Choosing a pool class" | 41 | <a href="intro.html" title="1. Choosing a pool class" |
| 42 | accesskey="N">next</a> |</li> | 42 | accesskey="N">next</a> |</li> |
| 43 | <li class="right" > | 43 | <li class="right" > |
| 44 | <a href="../topic/weak.html" title="19. Weak references" | 44 | <a href="../topic/weak.html" title="20. Weak references" |
| 45 | accesskey="P">previous</a> |</li> | 45 | accesskey="P">previous</a> |</li> |
| 46 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 46 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 47 | </ul> | 47 | </ul> |
| @@ -132,7 +132,7 @@ | |||
| 132 | </a></p> | 132 | </a></p> |
| 133 | <h4>Previous topic</h4> | 133 | <h4>Previous topic</h4> |
| 134 | <p class="topless"><a href="../topic/weak.html" | 134 | <p class="topless"><a href="../topic/weak.html" |
| 135 | title="previous chapter">19. Weak references</a></p> | 135 | title="previous chapter">20. Weak references</a></p> |
| 136 | <h4>Next topic</h4> | 136 | <h4>Next topic</h4> |
| 137 | <p class="topless"><a href="intro.html" | 137 | <p class="topless"><a href="intro.html" |
| 138 | title="next chapter">1. Choosing a pool class</a></p><h4>Downloads</h4> | 138 | title="next chapter">1. Choosing a pool class</a></p><h4>Downloads</h4> |
| @@ -164,7 +164,7 @@ | |||
| 164 | <a href="intro.html" title="1. Choosing a pool class" | 164 | <a href="intro.html" title="1. Choosing a pool class" |
| 165 | >next</a> |</li> | 165 | >next</a> |</li> |
| 166 | <li class="right" > | 166 | <li class="right" > |
| 167 | <a href="../topic/weak.html" title="19. Weak references" | 167 | <a href="../topic/weak.html" title="20. Weak references" |
| 168 | >previous</a> |</li> | 168 | >previous</a> |</li> |
| 169 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 169 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 170 | </ul> | 170 | </ul> |
diff --git a/mps/manual/html/pool/lo.html b/mps/manual/html/pool/lo.html index 48d83ddbd40..c0984e4528f 100644 --- a/mps/manual/html/pool/lo.html +++ b/mps/manual/html/pool/lo.html | |||
| @@ -119,16 +119,31 @@ does not need a <a class="reference internal" href="../glossary/p.html#term-padd | |||
| 119 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_lo</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_lo" title="Permalink to this definition">¶</a></dt> | 119 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_lo</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_lo" title="Permalink to this definition">¶</a></dt> |
| 120 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an LO (Leaf Object) | 120 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an LO (Leaf Object) |
| 121 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 121 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 122 | <p>When creating an LO pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes one | 122 | <p>When creating an LO pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> require one |
| 123 | extra argument:</p> | 123 | <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a>:</p> |
| 124 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 124 | <ul class="simple"> |
| 125 | <span class="kt">mps_class_t</span> <span class="n">mps_class_lo</span><span class="p">(),</span> | 125 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 126 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">)</span> | 126 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 127 | objects allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip | ||
| 128 | method</em></a>.</li> | ||
| 129 | </ul> | ||
| 130 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 131 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_lo</span><span class="p">(),</span> | ||
| 132 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 133 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 127 | </pre></div> | 134 | </pre></div> |
| 128 | </div> | 135 | </div> |
| 129 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 136 | <div class="admonition-deprecated admonition"> |
| 130 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip | 137 | <p class="first admonition-title">Deprecated</p> |
| 131 | method</em></a>.</p> | 138 | <p>starting with version 1.112.</p> |
| 139 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format like | ||
| 140 | this:</p> | ||
| 141 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 142 | <span class="n">mps_class_t</span> <span class="n">mps_class_lo</span><span class="p">(),</span> | ||
| 143 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">)</span> | ||
| 144 | </pre></div> | ||
| 145 | </div> | ||
| 146 | </div> | ||
| 132 | </dd></dl> | 147 | </dd></dl> |
| 133 | 148 | ||
| 134 | </div> | 149 | </div> |
diff --git a/mps/manual/html/pool/mfs.html b/mps/manual/html/pool/mfs.html index 822b00bb104..0a0d5c5cb29 100644 --- a/mps/manual/html/pool/mfs.html +++ b/mps/manual/html/pool/mfs.html | |||
| @@ -100,21 +100,40 @@ managed pools (unless these are registered as <a class="reference internal" href | |||
| 100 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mfs</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mfs" title="Permalink to this definition">¶</a></dt> | 100 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mfs</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mfs" title="Permalink to this definition">¶</a></dt> |
| 101 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MFS (Manual Fixed Small) | 101 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MFS (Manual Fixed Small) |
| 102 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 102 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 103 | <p>When creating an MFS pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes two | 103 | <p>When creating an MFS pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 104 | extra arguments:</p> | 104 | two <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 105 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 105 | <ul class="simple"> |
| 106 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mfs</span><span class="p">(),</span> | 106 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MFS_UNIT_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 107 | <span class="kt">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | 107 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of blocks that will be |
| 108 | <span class="kt">mps_size_t</span> <span class="n">unit_size</span><span class="p">)</span> | 108 | allocated from this pool, in <a class="reference internal" href="../glossary/b.html#term-byte-1"><em class="xref std std-term">bytes<sup>(1)</sup></em></a>. It must be at |
| 109 | least one <a class="reference internal" href="../glossary/w.html#term-word"><em class="xref std std-term">word</em></a>.</li> | ||
| 110 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_BY</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type | ||
| 111 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool | ||
| 112 | will request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>. It must be at least as big | ||
| 113 | as the unit size specified by the | ||
| 114 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MFS_UNIT_SIZE</span></tt> keyword argument. If this is | ||
| 115 | not a multiple of the unit size, there will be wasted space in | ||
| 116 | each segment.</li> | ||
| 117 | </ul> | ||
| 118 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 119 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_mfs</span><span class="p">(),</span> | ||
| 120 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_MFS_UNIT_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">1024</span><span class="p">},</span> | ||
| 121 | <span class="p">{</span><span class="n">MPS_KEY_EXTEND_BY</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">},</span> | ||
| 122 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 109 | </pre></div> | 123 | </pre></div> |
| 110 | </div> | 124 | </div> |
| 111 | <p><tt class="docutils literal"><span class="pre">extend_size</span></tt> is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool will | 125 | <div class="admonition-deprecated admonition"> |
| 112 | request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>. It must be at least as big as | 126 | <p class="first admonition-title">Deprecated</p> |
| 113 | <tt class="docutils literal"><span class="pre">unit_size</span></tt>. If this is not a multiple of <tt class="docutils literal"><span class="pre">unit_size</span></tt>, there | 127 | <p>starting with version 1.112.</p> |
| 114 | will be wasted space in each segment.</p> | 128 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the segment size and |
| 115 | <p><tt class="docutils literal"><span class="pre">unit_size</span></tt> is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of blocks that will be allocated | 129 | unit size like this:</p> |
| 116 | from this pool, in <a class="reference internal" href="../glossary/b.html#term-byte-1"><em class="xref std std-term">bytes<sup>(1)</sup></em></a>. It must be at least one | 130 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> |
| 117 | <a class="reference internal" href="../glossary/w.html#term-word"><em class="xref std std-term">word</em></a>.</p> | 131 | <span class="n">mps_class_t</span> <span class="n">mps_class_mfs</span><span class="p">(),</span> |
| 132 | <span class="n">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | ||
| 133 | <span class="n">mps_size_t</span> <span class="n">unit_size</span><span class="p">)</span> | ||
| 134 | </pre></div> | ||
| 135 | </div> | ||
| 136 | </div> | ||
| 118 | </dd></dl> | 137 | </dd></dl> |
| 119 | 138 | ||
| 120 | </div> | 139 | </div> |
diff --git a/mps/manual/html/pool/mv.html b/mps/manual/html/pool/mv.html index 6fe20766412..c9a91413c7d 100644 --- a/mps/manual/html/pool/mv.html +++ b/mps/manual/html/pool/mv.html | |||
| @@ -97,21 +97,42 @@ managed pools (unless these are registered as <a class="reference internal" href | |||
| 97 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mv</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mv" title="Permalink to this definition">¶</a></dt> | 97 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mv</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mv" title="Permalink to this definition">¶</a></dt> |
| 98 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MV (Manual Variable) | 98 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MV (Manual Variable) |
| 99 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 99 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 100 | <p>When creating an MV pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes three | 100 | <p>When creating an MV pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 101 | extra arguments:</p> | 101 | three <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 102 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 102 | <ul class="simple"> |
| 103 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mv</span><span class="p">(),</span> | 103 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_BY</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 104 | <span class="kt">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | 104 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool |
| 105 | <span class="kt">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | 105 | will request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</li> |
| 106 | <span class="kt">mps_size_t</span> <span class="n">maximum_size</span><span class="p">)</span> | 106 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 107 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted mean size of blocks that | ||
| 108 | will be allocated from the pool.</li> | ||
| 109 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MAX_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type | ||
| 110 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted maximum size of blocks that | ||
| 111 | will be allocated from the pool.</li> | ||
| 112 | </ul> | ||
| 113 | <p>The mean and maximum sizes are <em>hints</em> to the MPS: the pool will be | ||
| 114 | less efficient if these are wrong, but nothing will break.</p> | ||
| 115 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 116 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_mfs</span><span class="p">(),</span> | ||
| 117 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_MEAN_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">32</span><span class="p">},</span> | ||
| 118 | <span class="p">{</span><span class="n">MPS_KEY_MAX_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">1024</span><span class="p">},</span> | ||
| 119 | <span class="p">{</span><span class="n">MPS_KEY_EXTEND_BY</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">},</span> | ||
| 120 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 121 | </pre></div> | ||
| 122 | </div> | ||
| 123 | <div class="admonition-deprecated admonition"> | ||
| 124 | <p class="first admonition-title">Deprecated</p> | ||
| 125 | <p>starting with version 1.112.</p> | ||
| 126 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the segment size, | ||
| 127 | mean size, and maximum size like this:</p> | ||
| 128 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 129 | <span class="n">mps_class_t</span> <span class="n">mps_class_mv</span><span class="p">(),</span> | ||
| 130 | <span class="n">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | ||
| 131 | <span class="n">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | ||
| 132 | <span class="n">mps_size_t</span> <span class="n">maximum_size</span><span class="p">)</span> | ||
| 107 | </pre></div> | 133 | </pre></div> |
| 108 | </div> | 134 | </div> |
| 109 | <p><tt class="docutils literal"><span class="pre">extend_size</span></tt> is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool will | 135 | </div> |
| 110 | request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> | ||
| 111 | <p><tt class="docutils literal"><span class="pre">average_size</span></tt> and <tt class="docutils literal"><span class="pre">maximum</span> <span class="pre">size</span></tt> are the predicted average | ||
| 112 | and maximum size of blocks that will be allocated from the pool. | ||
| 113 | These are hints to the MPS: the pool will be less efficient if | ||
| 114 | these are wrong.</p> | ||
| 115 | </dd></dl> | 136 | </dd></dl> |
| 116 | 137 | ||
| 117 | <dl class="function"> | 138 | <dl class="function"> |
| @@ -119,20 +140,25 @@ these are wrong.</p> | |||
| 119 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mv_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mv_debug" title="Permalink to this definition">¶</a></dt> | 140 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mv_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mv_debug" title="Permalink to this definition">¶</a></dt> |
| 120 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the MV pool | 141 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the MV pool |
| 121 | class.</p> | 142 | class.</p> |
| 122 | <p>When creating a debugging MV pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> | 143 | <p>When creating a debugging MV pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> |
| 123 | takes four extra arguments:</p> | 144 | requires four keyword arguments: <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_SIZE</span></tt>, |
| 124 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 145 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MAX_SIZE</span></tt> are as |
| 125 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mv_debug</span><span class="p">(),</span> | 146 | described above, and <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_POOL_DEBUG_OPTIONS</span></tt> |
| 147 | specifies the debugging options. See <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</p> | ||
| 148 | <div class="admonition-deprecated admonition"> | ||
| 149 | <p class="first admonition-title">Deprecated</p> | ||
| 150 | <p>starting with version 1.112.</p> | ||
| 151 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the debugging | ||
| 152 | options, segment size, mean size, and maximum size like this:</p> | ||
| 153 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 154 | <span class="n">mps_class_t</span> <span class="n">mps_class_mv_debug</span><span class="p">(),</span> | ||
| 126 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> | 155 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> |
| 127 | <span class="kt">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | 156 | <span class="n">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> |
| 128 | <span class="kt">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | 157 | <span class="n">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> |
| 129 | <span class="kt">mps_size_t</span> <span class="n">maximum_size</span><span class="p">)</span> | 158 | <span class="n">mps_size_t</span> <span class="n">maximum_size</span><span class="p">)</span> |
| 130 | </pre></div> | 159 | </pre></div> |
| 131 | </div> | 160 | </div> |
| 132 | <p><tt class="docutils literal"><span class="pre">debug_option</span></tt> specifies the debugging options. See | 161 | </div> |
| 133 | <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</p> | ||
| 134 | <p><tt class="docutils literal"><span class="pre">extend_size</span></tt>, <tt class="docutils literal"><span class="pre">average_size</span></tt> and <tt class="docutils literal"><span class="pre">maximum_size</span></tt> are as | ||
| 135 | documented in <a class="reference internal" href="#mps_class_mv" title="mps_class_mv"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mv()</span></tt></a>.</p> | ||
| 136 | </dd></dl> | 162 | </dd></dl> |
| 137 | 163 | ||
| 138 | </div> | 164 | </div> |
diff --git a/mps/manual/html/pool/mvff.html b/mps/manual/html/pool/mvff.html index 6515ee955d9..9ea159b38bf 100644 --- a/mps/manual/html/pool/mvff.html +++ b/mps/manual/html/pool/mvff.html | |||
| @@ -126,32 +126,60 @@ smaller than the <a class="reference internal" href="../glossary/n.html#term-nat | |||
| 126 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvff</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvff" title="Permalink to this definition">¶</a></dt> | 126 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvff</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvff" title="Permalink to this definition">¶</a></dt> |
| 127 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MVFF (Manual Variable First | 127 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MVFF (Manual Variable First |
| 128 | Fit) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 128 | Fit) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 129 | <p>When creating an MVFF pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes six | 129 | <p>When creating an MVFF pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 130 | extra arguments:</p> | 130 | six <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 131 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 131 | <ul class="simple"> |
| 132 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mvff</span><span class="p">(),</span> | 132 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_BY</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 133 | <span class="kt">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | 133 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool |
| 134 | <span class="kt">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | 134 | will request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</li> |
| 135 | <span class="kt">mps_align_t</span> <span class="n">alignment</span><span class="p">,</span> | 135 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 136 | <span class="kt">mps_bool_t</span> <span class="n">slot_high</span><span class="p">,</span> | 136 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted mean size of blocks that will |
| 137 | <span class="kt">mps_bool_t</span> <span class="n">arena_high</span><span class="p">,</span> | 137 | be allocated from the pool. This is a <em>hint</em> to the MPS: the |
| 138 | <span class="kt">mps_bool_t</span> <span class="n">first_fit</span><span class="p">)</span> | 138 | pool will be less efficient if this is wrong, but nothing will |
| 139 | break.</li> | ||
| 140 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ALIGN</span></tt> (member <tt class="docutils literal"><span class="pre">.val.align</span></tt>; type | ||
| 141 | <a class="reference internal" href="../topic/interface.html#mps_align_t" title="mps_align_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_align_t</span></tt></a>) is the <a class="reference internal" href="../glossary/a.html#term-alignment"><em class="xref std std-term">alignment</em></a> of addresses for | ||
| 142 | allocation (and freeing) in the pool. If an unaligned size is | ||
| 143 | passed to <a class="reference internal" href="../topic/allocation.html#mps_alloc" title="mps_alloc"><tt class="xref c c-func docutils literal"><span class="pre">mps_alloc()</span></tt></a> or <a class="reference internal" href="../topic/allocation.html#mps_free" title="mps_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_free()</span></tt></a>, it will be | ||
| 144 | rounded up to the pool’s alignment. The minimum alignment | ||
| 145 | supported by pools of this class is <tt class="docutils literal"><span class="pre">sizeof(void</span> <span class="pre">*)</span></tt>.</li> | ||
| 146 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_ARENA_HIGH</span></tt> (member <tt class="docutils literal"><span class="pre">.val.b</span></tt>; type | ||
| 147 | <a class="reference internal" href="../topic/interface.html#mps_bool_t" title="mps_bool_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_bool_t</span></tt></a>) indicates whether new segments for | ||
| 148 | buffered allocation are acquired at high addresses (if true), or | ||
| 149 | at low addresses (if false).</li> | ||
| 150 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_SLOT_HIGH</span></tt> (member <tt class="docutils literal"><span class="pre">.val.b</span></tt>; type | ||
| 151 | <a class="reference internal" href="../topic/interface.html#mps_bool_t" title="mps_bool_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_bool_t</span></tt></a>) is undocumented. It must have the same | ||
| 152 | value as <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_ARENA_HIGH</span></tt>.</li> | ||
| 153 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_FIRST_FIT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.b</span></tt>; type | ||
| 154 | <a class="reference internal" href="../topic/interface.html#mps_bool_t" title="mps_bool_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_bool_t</span></tt></a>) is undocumented and must be set to true.</li> | ||
| 155 | </ul> | ||
| 156 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 157 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_mvff</span><span class="p">(),</span> | ||
| 158 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_EXTEND_BY</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="p">},</span> | ||
| 159 | <span class="p">{</span><span class="n">MPS_KEY_MEAN_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="p">},</span> | ||
| 160 | <span class="p">{</span><span class="n">MPS_KEY_ALIGN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">align</span> <span class="o">=</span> <span class="p">},</span> | ||
| 161 | <span class="p">{</span><span class="n">MPS_KEY_MVFF_ARENA_HIGH</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">},</span> | ||
| 162 | <span class="p">{</span><span class="n">MPS_KEY_MVFF_SLOT_HIGH</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">},</span> | ||
| 163 | <span class="p">{</span><span class="n">MPS_KEY_MVFF_FIRST_FIT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">b</span> <span class="o">=</span> <span class="mi">1</span><span class="p">},</span> | ||
| 164 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 165 | </pre></div> | ||
| 166 | </div> | ||
| 167 | <div class="admonition-deprecated admonition"> | ||
| 168 | <p class="first admonition-title">Deprecated</p> | ||
| 169 | <p>starting with version 1.112.</p> | ||
| 170 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the arguments like | ||
| 171 | this:</p> | ||
| 172 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 173 | <span class="n">mps_class_t</span> <span class="n">mps_class_mvff</span><span class="p">(),</span> | ||
| 174 | <span class="n">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | ||
| 175 | <span class="n">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | ||
| 176 | <span class="n">mps_align_t</span> <span class="n">alignment</span><span class="p">,</span> | ||
| 177 | <span class="n">mps_bool_t</span> <span class="n">slot_high</span><span class="p">,</span> | ||
| 178 | <span class="n">mps_bool_t</span> <span class="n">arena_high</span><span class="p">,</span> | ||
| 179 | <span class="n">mps_bool_t</span> <span class="n">first_fit</span><span class="p">)</span> | ||
| 139 | </pre></div> | 180 | </pre></div> |
| 140 | </div> | 181 | </div> |
| 141 | <p><tt class="docutils literal"><span class="pre">extend_size</span></tt> is the <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of segment that the pool will | 182 | </div> |
| 142 | request from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> | ||
| 143 | <p><tt class="docutils literal"><span class="pre">average_size</span></tt> is the predicted average size of blocks that will | ||
| 144 | be allocated from the pool.</p> | ||
| 145 | <p><tt class="docutils literal"><span class="pre">alignment</span></tt> is the <a class="reference internal" href="../glossary/a.html#term-alignment"><em class="xref std std-term">alignment</em></a> of addresses for allocation | ||
| 146 | (and freeing) in the pool. If an unaligned size is passed to | ||
| 147 | <a class="reference internal" href="../topic/allocation.html#mps_alloc" title="mps_alloc"><tt class="xref c c-func docutils literal"><span class="pre">mps_alloc()</span></tt></a> or <a class="reference internal" href="../topic/allocation.html#mps_free" title="mps_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_free()</span></tt></a>, it will be rounded up | ||
| 148 | to the pool’s alignment. The minimum alignment supported by pools | ||
| 149 | of this class is <tt class="docutils literal"><span class="pre">sizeof(void</span> <span class="pre">*)</span></tt>.</p> | ||
| 150 | <p><tt class="docutils literal"><span class="pre">slot_high</span></tt> is undocumented. It must have the same value as | ||
| 151 | <tt class="docutils literal"><span class="pre">arena_high</span></tt>.</p> | ||
| 152 | <p>If <tt class="docutils literal"><span class="pre">arena_high</span></tt> is true, new segments for buffered allocation | ||
| 153 | are acquired at high addresses; if false, at low addresses.</p> | ||
| 154 | <p><tt class="docutils literal"><span class="pre">first_fit</span></tt> is undocumented and must be set to true.</p> | ||
| 155 | </dd></dl> | 183 | </dd></dl> |
| 156 | 184 | ||
| 157 | <dl class="function"> | 185 | <dl class="function"> |
| @@ -159,22 +187,33 @@ are acquired at high addresses; if false, at low addresses.</p> | |||
| 159 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvff_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvff_debug" title="Permalink to this definition">¶</a></dt> | 187 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvff_debug</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvff_debug" title="Permalink to this definition">¶</a></dt> |
| 160 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the MVFF pool | 188 | <dd><p>A <a class="reference internal" href="../topic/debugging.html#topic-debugging"><em>debugging</em></a> version of the MVFF pool |
| 161 | class.</p> | 189 | class.</p> |
| 162 | <p>When creating a debugging MVFF pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> | 190 | <p>When creating a debugging MVFF pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> |
| 163 | takes seven extra arguments:</p> | 191 | requires seven <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>.</p> |
| 164 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 192 | <ul class="simple"> |
| 165 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mvff_debug</span><span class="p">(),</span> | 193 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_BY</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt>, |
| 194 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ALIGN</span></tt>, <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_ARENA_HIGH</span></tt>, | ||
| 195 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_SLOT_HIGH</span></tt>, and | ||
| 196 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_FIRST_FIT</span></tt> are as described above, and | ||
| 197 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_POOL_DEBUG_OPTIONS</span></tt> specifies the debugging | ||
| 198 | :c:options. See <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</li> | ||
| 199 | </ul> | ||
| 200 | <div class="admonition-deprecated admonition"> | ||
| 201 | <p class="first admonition-title">Deprecated</p> | ||
| 202 | <p>starting with version 1.112.</p> | ||
| 203 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the debugging | ||
| 204 | options, and other arguments like this:</p> | ||
| 205 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 206 | <span class="n">mps_class_t</span> <span class="n">mps_class_mvff_debug</span><span class="p">(),</span> | ||
| 166 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> | 207 | <span class="n">mps_debug_option_s</span> <span class="n">debug_option</span><span class="p">,</span> |
| 167 | <span class="kt">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> | 208 | <span class="n">mps_size_t</span> <span class="n">extend_size</span><span class="p">,</span> |
| 168 | <span class="kt">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> | 209 | <span class="n">mps_size_t</span> <span class="n">average_size</span><span class="p">,</span> |
| 169 | <span class="kt">mps_align_t</span> <span class="n">alignment</span><span class="p">,</span> | 210 | <span class="n">mps_align_t</span> <span class="n">alignment</span><span class="p">,</span> |
| 170 | <span class="kt">mps_bool_t</span> <span class="n">slot_high</span><span class="p">,</span> | 211 | <span class="n">mps_bool_t</span> <span class="n">slot_high</span><span class="p">,</span> |
| 171 | <span class="kt">mps_bool_t</span> <span class="n">arena_high</span><span class="p">,</span> | 212 | <span class="n">mps_bool_t</span> <span class="n">arena_high</span><span class="p">,</span> |
| 172 | <span class="kt">mps_bool_t</span> <span class="n">first_fit</span><span class="p">)</span> | 213 | <span class="n">mps_bool_t</span> <span class="n">first_fit</span><span class="p">)</span> |
| 173 | </pre></div> | 214 | </pre></div> |
| 174 | </div> | 215 | </div> |
| 175 | <p><tt class="docutils literal"><span class="pre">debug_option</span></tt> specifies the debugging options. See | 216 | </div> |
| 176 | <tt class="xref c c-type docutils literal"><span class="pre">mps_debug_option_s</span></tt>.</p> | ||
| 177 | <p>The other arguments are the same as for <a class="reference internal" href="#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a>.</p> | ||
| 178 | </dd></dl> | 217 | </dd></dl> |
| 179 | 218 | ||
| 180 | </div> | 219 | </div> |
diff --git a/mps/manual/html/pool/mvt.html b/mps/manual/html/pool/mvt.html index 290483047f4..5374f5118cf 100644 --- a/mps/manual/html/pool/mvt.html +++ b/mps/manual/html/pool/mvt.html | |||
| @@ -122,64 +122,93 @@ managed pools (unless these are registered as <a class="reference internal" href | |||
| 122 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvt</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvt" title="Permalink to this definition">¶</a></dt> | 122 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_mvt</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_mvt" title="Permalink to this definition">¶</a></dt> |
| 123 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MVT (Manual Variable | 123 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an MVT (Manual Variable |
| 124 | Temporal) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 124 | Temporal) <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 125 | <p>When creating an MVT pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes five | 125 | <p>When creating an MVT pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires |
| 126 | extra arguments:</p> | 126 | five <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 127 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 127 | <ul class="simple"> |
| 128 | <span class="kt">mps_class_t</span> <span class="n">mps_class_mvt</span><span class="p">(),</span> | 128 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MIN_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 129 | <span class="kt">size_t</span> <span class="n">minimum_size</span><span class="p">,</span> | 129 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted minimum size of blocks that |
| 130 | <span class="kt">size_t</span> <span class="n">mean_size</span><span class="p">,</span> | 130 | will be allocated from the pool.</li> |
| 131 | <span class="kt">size_t</span> <span class="n">maximum_size</span><span class="p">,</span> | 131 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 132 | <span class="kt">mps_count_t</span> <span class="n">reserve_depth</span><span class="p">,</span> | 132 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted mean size of blocks that will |
| 133 | <span class="kt">mps_count_t</span> <span class="n">fragmentation_limit</span><span class="p">)</span> | 133 | be allocated from the pool.</li> |
| 134 | </pre></div> | 134 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MAX_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 135 | </div> | 135 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is the predicted maximum size of blocks that |
| 136 | <p><tt class="docutils literal"><span class="pre">minimum_size</span></tt>, <tt class="docutils literal"><span class="pre">mean_size</span></tt>, and <tt class="docutils literal"><span class="pre">maximum_size</span></tt> are the | 136 | will be allocated from the pool. Partial freeing is not |
| 137 | predicted minimum, mean, and maximum <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a> of | 137 | supported for blocks larger than this; doing so will |
| 138 | <a class="reference internal" href="../glossary/b.html#term-block"><em class="xref std std-term">blocks</em></a> expected to be allocated in the pool. Blocks | 138 | result in the storage of the block never being reused.</li> |
| 139 | smaller than <tt class="docutils literal"><span class="pre">minimum_size</span></tt> and larger than <tt class="docutils literal"><span class="pre">maximum_size</span></tt> may | 139 | </ul> |
| 140 | be allocated, but the pool is not guaranteed to manage them | 140 | <p>These three arguments are <em>hints</em> to the MPS: the pool will be |
| 141 | space-efficiently. Furthermore, partial freeing is not supported | 141 | less efficient if they are wrong, but the only thing that will |
| 142 | for blocks larger than <tt class="docutils literal"><span class="pre">maximum_size</span></tt>; doing so will result in | 142 | break is the partial freeing of large blocks.</p> |
| 143 | the storage of the block never being reused. <tt class="docutils literal"><span class="pre">mean_size</span></tt> need | 143 | <ul> |
| 144 | not be an accurate mean, although the pool will manage | 144 | <li><p class="first"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVT_RESERVE_DEPTH</span></tt> (member <tt class="docutils literal"><span class="pre">.val.count</span></tt>; |
| 145 | <tt class="docutils literal"><span class="pre">mean_size</span></tt> blocks more efficiently if it is.</p> | 145 | type <tt class="xref c c-type docutils literal"><span class="pre">mps_count_t</span></tt>) is the expected hysteresis of the |
| 146 | <p><tt class="docutils literal"><span class="pre">reserve_depth</span></tt> is the expected hysteresis of the population of | 146 | population of the pool. When blocks are freed, the pool will |
| 147 | the pool. When blocks are freed, the pool will retain sufficient | 147 | retain sufficient storage to allocate this many blocks of the mean |
| 148 | storage to allocate <tt class="docutils literal"><span class="pre">reserve_depth</span></tt> blocks of <tt class="docutils literal"><span class="pre">mean_size</span></tt> for | 148 | size for near term allocations (rather than immediately making |
| 149 | near term allocations (rather than immediately making that storage | 149 | that storage available to other pools).</p> |
| 150 | available to other pools).</p> | ||
| 151 | <p>If a pool has a stable population, or one which only grows over | 150 | <p>If a pool has a stable population, or one which only grows over |
| 152 | the lifetime of the pool, or one which grows steadily and then | 151 | the lifetime of the pool, or one which grows steadily and then |
| 153 | shrinks steadily, use a reserve depth of 0.</p> | 152 | shrinks steadily, use a reserve depth of 0.</p> |
| 154 | <p>It is always safe to use a reserve depth of 0, but if the | 153 | <p>It is always safe to use a reserve depth of 0, but if the |
| 155 | population typically fluctuates in a range (for example, the | 154 | population typically fluctuates in a range (for example, the |
| 156 | client program repeatedly creates and destroys a subset of blocks | 155 | client program repeatedly creates and destroys a subset of |
| 157 | in a loop), it is more efficient for the pool to retain enough | 156 | blocks in a loop), it is more efficient for the pool to retain |
| 158 | storage to satisfy that fluctuation. For example, if a pool has an | 157 | enough storage to satisfy that fluctuation. For example, if a |
| 159 | object population that typically fluctuates between 8,000 and | 158 | pool has an object population that typically fluctuates between |
| 160 | 10,000, use a reserve depth of 2,000.</p> | 159 | 8,000 and 10,000, use a reserve depth of 2,000.</p> |
| 161 | <p>The reserve will not normally be available to other pools for | 160 | <p>The reserve will not normally be available to other pools for |
| 162 | allocation, even when it is not used by the pool. If this is | 161 | allocation, even when it is not used by the pool. If this is |
| 163 | undesirable, a reserve depth of 0 may be used for a pool whose | 162 | undesirable, a reserve depth of 0 may be used for a pool whose |
| 164 | object population does vary, at a slight cost in efficiency. The | 163 | object population does vary, at a slight cost in efficiency. The |
| 165 | reserve does not guarantee any particular amount of allocation.</p> | 164 | reserve does not guarantee any particular amount of allocation.</p> |
| 166 | <p><tt class="docutils literal"><span class="pre">fragmentation_limit</span></tt> is a percentage from 1 to 100 (inclusive). | 165 | </li> |
| 167 | It sets an upper limit on the space overhead of MVT, in case block | 166 | <li><p class="first"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVT_FRAG_LIMIT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.count</span></tt>; type |
| 168 | death times and allocations do not correlate well. If the free | 167 | <tt class="xref c c-type docutils literal"><span class="pre">mps_count_t</span></tt>) is a percentage from 1 to 100 |
| 169 | space managed by the pool as a ratio of all the space managed by | 168 | (inclusive). It sets an upper limit on the space overhead of an |
| 170 | the pool exceeds <tt class="docutils literal"><span class="pre">fragmentation_limit</span></tt>, the pool falls back to a | 169 | MVT pool, in case block death times and allocations do not |
| 171 | first fit allocation policy, exploiting space more efficiently at | 170 | correlate well. If the free space managed by the pool as a ratio |
| 172 | a cost in time efficiency. A fragmentation limit of 0 would cause | 171 | of all the space managed by the pool exceeds the fragmentation |
| 173 | the pool to operate as a first-fit pool, at a significant cost in | 172 | limit, the pool falls back to a first fit allocation policy, |
| 174 | time efficiency: therefore this is not permitted.</p> | 173 | exploiting space more efficiently at a cost in time efficiency. |
| 174 | A fragmentation limit of 0 would cause the pool to operate as a | ||
| 175 | first-fit pool, at a significant cost in time efficiency: | ||
| 176 | therefore this is not permitted.</p> | ||
| 175 | <p>A fragmentation limit of 100 causes the pool to always use | 177 | <p>A fragmentation limit of 100 causes the pool to always use |
| 176 | temporal fit (unless resources are exhausted). If the objects | 178 | temporal fit (unless resources are exhausted). If the objects |
| 177 | allocated in the pool have similar lifetime expectancies, this | 179 | allocated in the pool have similar lifetime expectancies, this |
| 178 | mode will have the best time- and space-efficiency. If the objects | 180 | mode will have the best time- and space-efficiency. If the |
| 179 | have widely varying lifetime expectancies, this mode will be | 181 | objects have widely varying lifetime expectancies, this mode |
| 180 | time-efficient, but may be space-inefficient. An intermediate | 182 | will be time-efficient, but may be space-inefficient. An |
| 181 | setting can be used to limit the space-inefficiency of temporal | 183 | intermediate setting can be used to limit the space-inefficiency |
| 182 | fit due to varying object life expectancies.</p> | 184 | of temporal fit due to varying object life expectancies.</p> |
| 185 | </li> | ||
| 186 | </ul> | ||
| 187 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 188 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_mvt</span><span class="p">(),</span> | ||
| 189 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_MIN_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">4</span><span class="p">},</span> | ||
| 190 | <span class="p">{</span><span class="n">MPS_KEY_MEAN_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">32</span><span class="p">},</span> | ||
| 191 | <span class="p">{</span><span class="n">MPS_KEY_MAX_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">1024</span><span class="p">},</span> | ||
| 192 | <span class="p">{</span><span class="n">MPS_KEY_MVT_RESERVE_DEPTH</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">256</span><span class="p">},</span> | ||
| 193 | <span class="p">{</span><span class="n">MPS_KEY_MVT_FRAG_LIMIT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">50</span><span class="p">},</span> | ||
| 194 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 195 | </pre></div> | ||
| 196 | </div> | ||
| 197 | <div class="admonition-deprecated admonition"> | ||
| 198 | <p class="first admonition-title">Deprecated</p> | ||
| 199 | <p>starting with version 1.112.</p> | ||
| 200 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the arguments like | ||
| 201 | this:</p> | ||
| 202 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 203 | <span class="n">mps_class_t</span> <span class="n">mps_class_mvt</span><span class="p">(),</span> | ||
| 204 | <span class="kt">size_t</span> <span class="n">minimum_size</span><span class="p">,</span> | ||
| 205 | <span class="kt">size_t</span> <span class="n">mean_size</span><span class="p">,</span> | ||
| 206 | <span class="kt">size_t</span> <span class="n">maximum_size</span><span class="p">,</span> | ||
| 207 | <span class="n">mps_count_t</span> <span class="n">reserve_depth</span><span class="p">,</span> | ||
| 208 | <span class="n">mps_count_t</span> <span class="n">fragmentation_limit</span><span class="p">)</span> | ||
| 209 | </pre></div> | ||
| 210 | </div> | ||
| 211 | </div> | ||
| 183 | </dd></dl> | 212 | </dd></dl> |
| 184 | 213 | ||
| 185 | </div> | 214 | </div> |
diff --git a/mps/manual/html/pool/snc.html b/mps/manual/html/pool/snc.html index f3edda27d3d..de2532f5be1 100644 --- a/mps/manual/html/pool/snc.html +++ b/mps/manual/html/pool/snc.html | |||
| @@ -112,25 +112,55 @@ a format of variant auto-header.</li> | |||
| 112 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_snc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_snc" title="Permalink to this definition">¶</a></dt> | 112 | <a class="reference internal" href="../topic/pool.html#mps_class_t" title="mps_class_t">mps_class_t</a> <tt class="descname">mps_class_snc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_class_snc" title="Permalink to this definition">¶</a></dt> |
| 113 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an SNC (Stack No Check) | 113 | <dd><p>Return the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> for an SNC (Stack No Check) |
| 114 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 114 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 115 | <p>When creating an SNC pool, <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> takes one | 115 | <p>When creating an SNC pool, <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> requires one |
| 116 | extra argument:</p> | 116 | <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a>:</p> |
| 117 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="kt">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="kt">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | 117 | <ul class="simple"> |
| 118 | <span class="kt">mps_class_t</span> <span class="n">mps_class_snc</span><span class="p">(),</span> | 118 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt> (member <tt class="docutils literal"><span class="pre">.val.format</span></tt>; type |
| 119 | <span class="kt">mps_fmt_t</span> <span class="n">fmt</span><span class="p">)</span> | 119 | <a class="reference internal" href="../topic/format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the |
| 120 | objects allocated in the pool. The format must provide a | ||
| 121 | <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>, a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding | ||
| 122 | method</em></a>.</li> | ||
| 123 | </ul> | ||
| 124 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 125 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_snc</span><span class="p">(),</span> | ||
| 126 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">fmt</span><span class="p">},</span> | ||
| 127 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 128 | </pre></div> | ||
| 129 | </div> | ||
| 130 | <div class="admonition-deprecated admonition"> | ||
| 131 | <p class="first admonition-title">Deprecated</p> | ||
| 132 | <p>starting with version 1.112.</p> | ||
| 133 | <p>When using <a class="reference internal" href="../topic/pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>, pass the format like | ||
| 134 | this:</p> | ||
| 135 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="n">mps_pool_t</span> <span class="o">*</span><span class="n">pool_o</span><span class="p">,</span> <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">,</span> | ||
| 136 | <span class="n">mps_class_t</span> <span class="n">mps_class_snc</span><span class="p">(),</span> | ||
| 137 | <span class="n">mps_fmt_t</span> <span class="n">fmt</span><span class="p">)</span> | ||
| 138 | </pre></div> | ||
| 139 | </div> | ||
| 140 | </div> | ||
| 141 | <p>When creating an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a> on an SNC pool, | ||
| 142 | <a class="reference internal" href="../topic/allocation.html#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> requires one keyword argument:</p> | ||
| 143 | <ul class="simple"> | ||
| 144 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_RANK</span></tt> (member <tt class="docutils literal"><span class="pre">.val.rank</span></tt>; type | ||
| 145 | <a class="reference internal" href="../topic/root.html#mps_rank_t" title="mps_rank_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_rank_t</span></tt></a>) specifies the <a class="reference internal" href="../glossary/r.html#term-rank"><em class="xref std std-term">rank</em></a> of references | ||
| 146 | in objects allocated on this allocation point. It must be | ||
| 147 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a>.</li> | ||
| 148 | </ul> | ||
| 149 | <p>For example, in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>:</p> | ||
| 150 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_ap_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">ap</span><span class="p">,</span> <span class="n">awl_pool</span><span class="p">,</span> | ||
| 151 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_RANK</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">rank</span> <span class="o">=</span> <span class="n">mps_rank_exact</span><span class="p">()},</span> | ||
| 152 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 120 | </pre></div> | 153 | </pre></div> |
| 121 | </div> | 154 | </div> |
| 122 | <p><tt class="docutils literal"><span class="pre">fmt</span></tt> specifies the <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> for the objects | 155 | <div class="admonition-deprecated admonition"> |
| 123 | allocated in the pool. The format must provide a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan | 156 | <p class="first admonition-title">Deprecated</p> |
| 124 | method</em></a>, a <a class="reference internal" href="../glossary/s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, and a <a class="reference internal" href="../glossary/p.html#term-padding-method"><em class="xref std std-term">padding method</em></a>.</p> | 157 | <p>starting with version 1.112.</p> |
| 125 | <p>When creating an allocation point on an SNC pool, | 158 | <p>When using <a class="reference internal" href="../topic/allocation.html#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a>, pass the rank like this:</p> |
| 126 | <a class="reference internal" href="../topic/allocation.html#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a> takes one extra argument:</p> | 159 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="n">mps_ap_t</span> <span class="o">*</span><span class="n">ap_o</span><span class="p">,</span> <span class="n">mps_pool_t</span> <span class="n">pool</span><span class="p">,</span> |
| 127 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_ap_create</span><span class="p">(</span><span class="kt">mps_ap_t</span> <span class="o">*</span><span class="n">ap_o</span><span class="p">,</span> <span class="kt">mps_pool_t</span> <span class="n">pool</span><span class="p">,</span> | 160 | <span class="n">mps_rank_t</span> <span class="n">rank</span><span class="p">)</span> |
| 128 | <span class="kt">mps_rank_t</span> <span class="n">rank</span><span class="p">)</span> | ||
| 129 | </pre></div> | 161 | </pre></div> |
| 130 | </div> | 162 | </div> |
| 131 | <p><tt class="docutils literal"><span class="pre">rank</span></tt> specifies the <a class="reference internal" href="../glossary/r.html#term-rank"><em class="xref std std-term">rank</em></a> of references in objects | 163 | </div> |
| 132 | allocated on this allocation point. It must be | ||
| 133 | <a class="reference internal" href="../topic/root.html#mps_rank_exact" title="mps_rank_exact"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_exact()</span></tt></a>.</p> | ||
| 134 | </dd></dl> | 164 | </dd></dl> |
| 135 | 165 | ||
| 136 | </div> | 166 | </div> |
diff --git a/mps/manual/html/searchindex.js b/mps/manual/html/searchindex.js index d0d02f15e9e..7ff1eb25988 100644 --- a/mps/manual/html/searchindex.js +++ b/mps/manual/html/searchindex.js | |||
| @@ -1 +1 @@ | |||
| Search.setIndex({objects:{"":{mps_rank_t:[81,2,1,""],CBSDelete:[49,3,1,""],mps_fmt_fencepost_wrap:[45,3,1,""],mps_ap_alloc_pattern_reset:[46,3,1,""],mps_arena_roots_walk:[81,3,1,""],mps_thread_dereg:[93,3,1,""],CBSBlockDescribe:[49,3,1,""],MPS_SAC_CLASS_LIMIT:[12,4,1,""],mps_io_destroy:[31,3,1,""],MPS_RES_FAIL:[10,4,1,""],LockInit:[42,3,1,""],mps_definalize:[89,3,1,""],mps_thread_reg:[93,3,1,""],ACT_ON_RANGE:[18,3,1,""],LockClaim:[42,3,1,""],"-d":[13,0,1,"cmdoption-mpseventsql-d"],MPS_FIX12:[32,3,1,""],"-f":[13,0,1,"cmdoption-mpseventsql-f"],MPS_FIX_CALL:[32,3,1,""],mps_pool_destroy:[80,3,1,""],"-l":[13,0,1,"cmdoption-mpseventtxt-l"],"-o":[13,0,1,"cmdoption-mpseventsql-o"],"-i":[13,0,1,"cmdoption-mpseventsql-i"],MPS_OS_W3:[87,4,1,""],mps_reserve:[83,3,1,""],"-t":[13,0,1,"cmdoption-mpseventsql-t"],mps_message_type_gc_start:[35,3,1,""],"-v":[13,0,1,"cmdoption-mpseventsql-v"],mps_ap_create:[83,3,1,""],"-p":[13,0,1,"cmdoption-mpseventsql-p"],"-r":[13,0,1,"cmdoption-mpseventsql-r"],mps_class_lo:[9,3,1,""],Byte:[33,2,1,""],BTFindResRangeHigh:[18,3,1,""],mps_rank_exact:[81,3,1,""],MPS_ARCH_I3:[87,4,1,""],mps_ap_s:[83,2,1,""],CBSFinish:[49,3,1,""],mps_chain_create:[35,3,1,""],mps_sac_t:[12,2,1,""],MPS_WORD_WIDTH:[87,4,1,""],mps_ap_t:[83,2,1,""],MPS_BUILD_GC:[87,4,1,""],mps_label_t:[47,2,1,""],MPS_RES_COMMIT_LIMIT:[10,4,1,""],mps_reg_scan_t:[81,2,1,""],mps_tramp:[93,3,1,""],mps_clock:[31,3,1,""],mps_class_amc:[22,3,1,""],mps_root_create_reg:[81,3,1,""],mps_lib_memset:[31,3,1,""],mps_alloc_pattern_t:[46,2,1,""],mps_arena_start_collect:[28,3,1,""],LockReleaseGlobalRecursive:[42,3,1,""],mps_fix:[32,3,1,""],mps_arena_clamp:[28,3,1,""],mps_gen_param_s:[35,2,1,""],CBSDescribe:[49,3,1,""],mps_sac_destroy:[12,3,1,""],MPS_PF_LII6GC:[87,4,1,""],MPS_T_WORD:[87,4,1,""],MPS_T_ULONGEST:[87,4,1,""],LockClaimGlobalRecursive:[42,3,1,""],mps_lib_get_EOF:[31,3,1,""],mps_mvff_size:[91,3,1,""],Rank:[33,2,1,""],mps_rank_ambig:[81,3,1,""],mps_awl_find_dependent_t:[8,2,1,""],mps_lib_FILE:[31,2,1,""],mps_lib_get_stderr:[31,3,1,""],mps_chain_t:[35,2,1,""],mps_arena_create:[28,3,1,""],MPS_FIX2:[32,3,1,""],MPS_RESERVE_BLOCK:[83,3,1,""],mps_fmt_put_fencepost_t:[45,3,1,""],MPS_FIX1:[32,3,1,""],mps_mvt_size:[76,3,1,""],mps_telemetry_label:[13,3,1,""],MPS_RES_RESOURCE:[10,4,1,""],BTFindShortResRangeHigh:[18,3,1,""],MPS_SAC_FREE_FAST:[12,3,1,""],MPS_PF_LII3GC:[87,4,1,""],CBSBlockBase:[49,3,1,""],MPS_RES_MEMORY:[10,4,1,""],mps_lib_get_stdout:[31,3,1,""],mps_formatted_objects_stepper_t:[34,2,1,""],mps_ld_isstale:[86,3,1,""],MPS_RM_PROT:[81,4,1,""],mps_fmt_create_auto_header:[34,3,1,""],mps_sac_free:[12,3,1,""],Epoch:[33,2,1,""],mps_fmt_adjust_fencepost_t:[45,3,1,""],Ref:[33,2,1,""],mps_message_type_disable:[0,3,1,""],mps_io_write:[31,3,1,""],mps_ld_s:[86,2,1,""],mps_arena_collect:[28,3,1,""],TraceSet:[33,2,1,""],mps_arena_class_vm:[28,3,1,""],BTCopyInvertRange:[18,3,1,""],mps_fmt_t:[34,2,1,""],mps_sac_alloc:[12,3,1,""],MPS_PF_XCI3LL:[87,4,1,""],mps_message_type:[0,3,1,""],mps_sac_flush:[12,3,1,""],mps_class_mv_debug:[74,3,1,""],mps_class_amcz:[2,3,1,""],mps_message_finalization_ref:[89,3,1,""],CBSSetMinSize:[49,3,1,""],MPS_OS_XC:[87,4,1,""],ArenaFinalize:[82,3,1,""],mps_arena_spare_commit_limit_set:[28,3,1,""],MPS_PF_XCI3GC:[87,4,1,""],mps_rank_weak:[81,3,1,""],mps_arena_create_v:[28,3,1,""],mps_mvff_free_size:[91,3,1,""],mps_ss_t:[32,2,1,""],mps_arena_reserved:[28,3,1,""],mps_arena_unsafe_restore_protection:[28,3,1,""],mps_message_discard:[0,3,1,""],mps_free:[83,3,1,""],mps_message_type_t:[0,2,1,""],Word:[33,2,1,""],mps_arena_class_cl:[28,3,1,""],mps_io_flush:[31,3,1,""],mps_clock_t:[47,2,1,""],mps_class_awl:[8,3,1,""],LockReleaseRecursive:[42,3,1,""],MPS_RES_PARAM:[10,4,1,""],mps_fmt_auto_header_s:[34,2,1,""],mps_commit:[83,3,1,""],mps_message_t:[0,2,1,""],CBSInit:[49,3,1,""],MPS_RES_OK:[10,4,1,""],mps_message_type_gc:[35,3,1,""],mps_pool_walk:[45,3,1,""],MPS_PF_W3I3MV:[87,4,1,""],mps_ld_add:[86,3,1,""],mps_alloc:[83,3,1,""],mps_ap_destroy:[83,3,1,""],mps_arena_commit_limit:[28,3,1,""],mps_clocks_per_sec:[31,3,1,""],mps_root_t:[81,2,1,""],mps_class_mvff_debug:[91,3,1,""],mps_ap_fill:[83,3,1,""],MPS_WORD_SHIFT:[87,4,1,""],mps_class_mv:[74,3,1,""],MPS_SCAN_END:[32,3,1,""],mps_lib_fputc:[31,3,1,""],CONFIG_PLINTH_NONE:[31,4,1,""],BTCopyOffsetRange:[18,3,1,""],MPS_PF_STRING:[87,4,1,""],mps_pool_check_free_space:[1,3,1,""],MPS_ARCH_I6:[87,4,1,""],CBSBlockLimit:[49,3,1,""],mps_fmt_create_A:[34,3,1,""],mps_lib_fputs:[31,3,1,""],mps_addr_fmt:[34,3,1,""],mps_lib_telemetry_control:[31,3,1,""],mps_arena_expose:[28,3,1,""],mps_arena_destroy:[28,3,1,""],Addr:[33,2,1,""],Index:[33,2,1,""],MPS_TELEMETRY_DATABASE:[13,1,1,"-"],mps_mvt_free_size:[76,3,1,""],mps_arena_walk:[45,3,1,""],MPS_PF_ALIGN:[87,4,1,""],Serial:[33,2,1,""],"-h":[13,0,1,"cmdoption-mpseventcnv-h"],LockReleaseGlobal:[42,3,1,""],BTIsSetRange:[18,3,1,""],mps_telemetry_get:[13,3,1,""],CONFIG_VAR_RASH:[10,4,1,""],Bool:[33,2,1,""],MPS_TELEMETRY_CONTROL:[13,1,1,"-"],BTFindResRange:[18,3,1,""],mps_thr_t:[93,2,1,""],mps_root_create_table_masked:[81,3,1,""],mps_class_mvff:[91,3,1,""],RefSet:[33,2,1,""],MPS_PF_FRI6GC:[87,4,1,""],mps_fmt_pad_t:[34,2,1,""],MPS_OS_LI:[87,4,1,""],mps_message_type_enable:[0,3,1,""],mps_arena_extend:[28,3,1,""],MPS_TELEMETRY_FILENAME:[13,1,1,"-"],mps_class_snc:[78,3,1,""],mps_root_scan_t:[81,2,1,""],mps_message_queue_type:[0,3,1,""],mps_pool_check_fenceposts:[1,3,1,""],mps_message_gc_start_why:[35,3,1,""],MPS_RM_CONST:[81,4,1,""],Accumulation:[33,2,1,""],mps_telemetry_control:[13,3,1,""],BTDestroy:[18,3,1,""],mps_addr_t:[47,2,1,""],mps_roots_stepper_t:[81,2,1,""],MPS_BUILD_LL:[87,4,1,""],Res:[33,2,1,""],mps_message_get:[0,3,1,""],LockReleaseMPM:[42,3,1,""],mps_collections:[28,3,1,""],mps_message_clock:[0,3,1,""],BTFindShortResRange:[18,3,1,""],mps_mv_size:[74,3,1,""],mps_pool_create_v:[80,3,1,""],mps_message_gc_live_size:[35,3,1,""],CBSIterateLarge:[49,3,1,""],BTSetRange:[18,3,1,""],RootVar:[33,2,1,""],mps_amc_apply:[22,3,1,""],MPS_PF_W3I6MV:[87,4,1,""],LockClaimGlobal:[42,3,1,""],Align:[33,2,1,""],mps_fmt_A_s:[34,2,1,""],mps_objects_step_t:[45,3,1,""],mps_debug_class:[45,3,1,""],CBSIterate:[49,3,1,""],mps_fmt_fwd_t:[34,2,1,""],BTIsResRange:[18,3,1,""],Fun:[33,2,1,""],mps_arena_release:[28,3,1,""],BTSize:[18,3,1,""],mps_arena_step:[28,3,1,""],mps_arena_spare_commit_limit:[28,3,1,""],MPS_SAC_ALLOC_FAST:[12,3,1,""],Compare:[33,2,1,""],CBSFindFirst:[49,3,1,""],mps_ap_create_v:[83,3,1,""],mps_align_t:[47,2,1,""],MPS_RES_UNIMPL:[10,4,1,""],mps_sac_class_s:[12,2,1,""],mps_mv_free_size:[74,3,1,""],BTSet:[18,3,1,""],LockClaimRecursive:[42,3,1,""],mps_ap_alloc_pattern_end:[46,3,1,""],mps_arena_unsafe_expose_remember_protection:[28,3,1,""],BTFindLongResRange:[18,3,1,""],mps_arena_has_addr:[28,3,1,""],mps_ap_alloc_pattern_begin:[46,3,1,""],CBSFindLast:[49,3,1,""],Size:[33,2,1,""],mps_io_create:[31,3,1,""],mps_lib_assert_fail:[31,3,1,""],mps_arena_t:[28,2,1,""],mps_amc_apply_stepper_t:[22,2,1,""],mps_ap_frame_push:[39,3,1,""],mps_fmt_scan_t:[34,2,1,""],mps_ld_reset:[86,3,1,""],LockFinish:[42,3,1,""],mps_root_create_fmt:[81,3,1,""],MPS_SCAN_BEGIN:[32,3,1,""],BTCreate:[18,3,1,""],mps_stack_scan_ambig:[81,3,1,""],mps_arena_committed:[28,3,1,""],BTGet:[18,3,1,""],mps_sac_create:[12,3,1,""],mps_arena_commit_limit_set:[28,3,1,""],ULongest:[33,2,1,""],mps_pool_create:[80,3,1,""],mps_pool_debug_option_s:[1,2,1,""],mps_root_destroy:[81,3,1,""],mps_root_create:[81,3,1,""],mps_arena_class_t:[28,2,1,""],mps_ld_merge:[86,3,1,""],mps_fmt_B_s:[34,2,1,""],mps_word_t:[47,2,1,""],MPS_RES_IO:[10,4,1,""],mps_finalize:[89,3,1,""],mps_ld_t:[86,2,1,""],BTCopyRange:[18,3,1,""],mps_telemetry_intern:[13,3,1,""],mps_fmt_check_fenceposts_t:[45,3,1,""],Pointer:[33,2,1,""],CBSFindLargest:[49,3,1,""],mps_res_t:[10,2,1,""],mps_class_ams_debug:[27,3,1,""],mps_lib_memcpy:[31,3,1,""],mps_bool_t:[47,2,1,""],MPS_BUILD_MV:[87,4,1,""],MPS_PF_FRI3GC:[87,4,1,""],ACT_ON_RANGE_HIGH:[18,3,1,""],AccessSet:[33,2,1,""],CONFIG_VAR_HOT:[10,4,1,""],TraceId:[33,2,1,""],Attr:[33,2,1,""],mps_root_create_table:[81,3,1,""],mps_tramp_t:[93,2,1,""],mps_ap_frame_pop:[39,3,1,""],Shift:[33,2,1,""],CBSBlockSize:[49,3,1,""],LockSize:[42,3,1,""],mps_class_ams:[27,3,1,""],mps_class_mfs:[84,3,1,""],mps_addr_pool:[80,3,1,""],BTResRange:[18,3,1,""],mps_telemetry_reset:[13,3,1,""],mps_alloc_pattern_ramp_collect_all:[46,3,1,""],MPS_PF_XCI6LL:[87,4,1,""],mps_arena_spare_committed:[28,3,1,""],mps_fmt_skip_t:[34,2,1,""],mps_io_t:[31,2,1,""],mps_fmt_isfwd_t:[34,2,1,""],BTFindLongResRangeHigh:[18,3,1,""],mps_alloc_pattern_ramp:[46,3,1,""],mps_fmt_class_t:[34,2,1,""],mps_class_t:[80,2,1,""],mps_telemetry_flush:[13,3,1,""],mps_frame_t:[39,2,1,""],mps_ap_trip:[83,3,1,""],mps_pool_t:[80,2,1,""],mps_message_gc_not_condemned_size:[35,3,1,""],mps_chain_destroy:[35,3,1,""],CONFIG_VAR_COOL:[10,4,1,""],mps_fmt_create_B:[34,3,1,""],BTRes:[18,3,1,""],mps_message_type_finalization:[89,3,1,""],mps_lib_memcmp:[31,3,1,""],MPS_RES_LIMIT:[10,4,1,""],mps_arena_park:[28,3,1,""],mps_telemetry_set:[13,3,1,""],mps_rm_t:[81,2,1,""],mps_class_mvt:[76,3,1,""],CBSInsert:[49,3,1,""],mps_fmt_destroy:[34,3,1,""],mps_arena_formatted_objects_walk:[34,3,1,""],mps_message_gc_condemned_size:[35,3,1,""],mps_message_poll:[0,3,1,""],MPS_OS_FR:[87,4,1,""]}},terms:{scriptwork:50,nurseri:[52,56,60,62,46,73,35],ru_utim:31,orthogon:[30,37],mps_arena_roots_walk:[81,28],demand:[21,71,73],btset:18,four:[29,81,57,18,69,66,68,7,71,72,49,74],secondli:[6,61,17,15],prefix:[47,4,6,50,57],circuitri:61,oldest:73,effienc:45,forget:[28,25],whose:[0,53,47,65,67,68,39,1,13,41,76,22,75,64,25,80,81,8,12,40,34,86,35,15,89,32,70,92,93,36,37],accur:[29,54,73,76,62,69,79,49],"const":[31,13,35],find_depend:8,mpsioan:31,albuquerqu:30,mps_telemetry_flush:[31,13,28],concret:[58,44,6,45,33,50],swap:[57,59,61,65,67,70,71,73,28],under:[38,55,56,5,18,67,43,10,49,47,45,89,73,3,40,83,28,37],sped:[0,15],spec:33,merchant:5,digit:[4,72,61,30,87],everi:[0,53,17,59,60,61,64,69,39,71,13,41,7,25,28,29,81,30,10,45,40,34,33,16,49,36],risk:[49,44],mps_final:[53,89,82,25],macraki:[92,57],"void":[0,53,18,59,47,69,13,2,1,74,40,42,76,6,78,25,27,28,80,29,81,9,30,31,8,82,45,46,12,22,33,34,84,86,35,87,83,89,49,91,93,36,50,71],rise:70,risc:62,lofix:17,implicit:[56,40,69,39,70],quantiz:73,addrstruct:33,jacob:30,affect:[35,18,78,43,69,11,89,66,45,68,16,70,50,56,28],mps_pool_check_fencepost:[45,1],poorli:[29,24,12,64],trace_max:[6,33],deleterang:49,vast:88,agesen:30,extend_s:[91,74,84],kilobyt:[63,61,35,36,57],ferreira:30,factori:71,vector:[81,62,57,18,67,25,45,58,70,32,36],terabyt:[69,57],cmu:30,parenthes:47,initialis:[49,42],cmp:[86,25],x86_64:4,lockw3:10,deutsch:[55,30,15],mps_lib_get_stdout:31,naiv:40,direct:[52,54,55,56,5,18,31,11,64,68,40,83,50],histor:[52,53,55,56,57,58,59,61,64,66,67,69,70,71,72,4,42,44,82,48,87,15],nail:[26,60,73],consequ:[9,10,50,8,78,2,25,27,93,28],second:[83,17,87,43,31,61,64,48,24,70,25,40,13,36,28,37],doubt:5,aggreg:[67,58],type_fwd:36,p_v:[83,12],ap_o:[78,83,8],thisclass:40,even:[0,52,55,56,17,18,64,65,66,68,69,70,71,73,83,41,58,5,76,24,25,26,28,29,32,45,46,12,13,34,15,89,16,49,93,36,50],hide:[45,67],fmt_o:34,arena_poll_max:6,neg:[80,86,18,31,34,28],asid:12,weren:56,btcopyoffsetrang:18,children:[52,60,69],cheng:30,supplier:29,"new":[0,38,56,57,18,53,60,61,62,64,66,52,69,39,71,73,19,4,40,41,20,42,6,24,49,8,28,80,29,81,30,10,25,45,47,91,13,34,79,86,35,87,88,15,83,89,32,70,36,37],mps_ss_t:[81,17,8,32,36,77,70,25,34],upward:[91,18],ever:[29,81,87,6,11,69,13,93],singhal:[30,73],protocolensuresomeclass:40,elimin:[29,56,17,61,88,15,66,70,71,83],port_ref:25,dahl:[30,15],mps_arena_class_cl:[36,28],mem:[33,49],splinter:[45,6],here:[0,17,18,62,4,13,41,21,43,6,25,28,81,10,45,83,86,35,89,16,32,36,37],block_requiring_fin:89,met:[66,5],undef:[47,15],studio:[4,87],subword:18,debugg:[13,16,81,28],path:[83,20,56,17,48,10,32,64,36,66,45,16,70,71,73,40,13,65,33,51],mps_message_type_dis:0,interpret:[0,80,81,86,56,1,43,32,69,85,15,89,16,39,79,25,13,36,28],michal:30,bevan:92,precis:[52,29,54,57,30,61,73,68,7,70,49,34],findshortresrangehigh:18,bitmask:[81,13,57],drj:[6,33,18,79],scaveng:[52,70,69,56,30],permit:[0,29,56,58,5,45,76,6,49,88,67,38,69,50,73,40,83,61,28],krishnan:30,aka:[6,87,18,44],prolog:[52,56,11,15],mps_lib_telemetry_control:31,basereturn:[18,49],joshua:30,frombas:18,norsk:30,"000ae0397335c8b5":13,tempt:[86,47,32],skippabl:36,"_mps_fix":17,brought:44,mps_releas:21,unix:[52,57,59,10,61,70,71,31,4,93,33,50],mps_sac_free_fast:12,brk:[70,57,58],amherst:30,strai:45,printf:[0,25],newspac:[60,69],total:[29,35,43,6,61,76,24,16,70,79,25,56,33,74,91,36,28],cbsfindlast:49,mps_fmt_create_b:34,unit:[41,55,56,17,59,31,6,36,71,72,73,33,34,61,57],highli:[38,29,17,15,36],bookkeep:[29,24,11,61,15],describ:[52,53,56,17,58,59,61,64,69,39,71,73,3,4,13,57,41,21,6,24,49,25,29,81,31,8,11,85,12,33,34,79,35,47,88,15,83,32,40,70,36,50,37],would:[83,53,54,56,17,18,60,62,66,2,13,57,41,5,76,6,24,25,28,29,81,10,8,11,45,12,40,34,84,86,33,31,88,15,89,82,49,36,71],tail:[45,30,15],unpredict:29,vol:30,edward:[61,30,15],call:[0,38,55,56,17,18,53,59,61,1,64,66,52,69,39,71,73,4,33,57,41,49,58,42,76,6,77,78,24,7,8,27,28,80,29,81,9,10,25,11,45,46,12,91,13,34,79,86,35,47,31,88,68,15,36,83,89,16,82,32,40,70,93,22,50],card:[56,30,73],"0x1003fb148":16,recommend:[17,31,11,47,36,12,32,93,34,37],indiana:30,promptli:[0,53,11,24,71,83],type:[0,53,54,55,56,17,18,59,61,62,64,66,67,68,69,39,71,73,33,57,41,20,58,87,6,24,7,8,28,80,29,81,30,44,10,25,11,45,46,12,49,13,34,79,86,35,47,1,31,15,36,83,89,16,32,40,70,93,22,50,51],until:[0,53,56,58,59,60,64,69,70,73,42,6,24,25,28,80,29,81,9,79,82,46,12,83,34,86,35,89,32,36],buddi:[53,55,57,30,29,88,64,23,66,70],mps_arch_m2:87,mps_arch_m4:87,buckets_find_depend:25,mps_arch_m6:87,relax:25,relat:[52,53,54,55,56,57,58,59,60,61,62,63,64,66,67,68,69,70,71,73,13,7,29,11,40,34,86,33,15,49],notic:[30,47,18,5,73],warn:[38,44,12,32,33,93,83],exce:[29,35,18,76,6,13],mps_pf_string:[87,21],phd:30,wari:6,excl:83,hold:[0,53,54,57,18,61,64,39,71,4,83,42,6,25,28,80,81,12,33,34,85,35,89,70,93,37],overrun:45,must:[0,38,55,56,17,18,53,59,60,61,1,64,67,52,69,39,2,73,4,74,33,41,49,58,5,42,76,6,77,78,24,7,8,26,27,28,80,29,81,9,31,25,11,45,12,91,13,34,84,79,86,35,47,71,88,68,36,83,89,16,82,32,40,70,93,22,50,37],shoot:29,btfindshortresrangehigh:18,springer:30,join:[90,47],room:[45,35,67],err:6,restor:[0,56,30,42,15,70,32,36,28],chenei:[52,69,56,30],work:[38,52,56,17,18,61,62,64,66,69,70,71,4,13,41,43,6,24,8,27,28,29,81,30,82,79,11,12,33,35,88,15,83,89,49,92,36,37],btsetrang:18,pierc:30,doubleword:[55,62,72],mccaughan:92,coalesc:[53,54,55,56,57,58,20,76,29,44,88,66,70,49,62],sharp:46,poolfinish:79,hansen:[92,30],root:[38,52,54,56,17,58,61,66,68,69,70,71,73,4,74,40,57,41,20,76,6,77,24,49,25,27,28,81,9,30,44,8,82,22,33,84,85,15,83,89,32,91,51,93,36,37],cbsst:49,pierr:30,overrid:[40,17],defer:[55,56,58,30,24,46,71,49,83,75],obj_fmt_:[34,36],give:[0,29,76,86,35,45,43,31,87,11,47,66,38,7,70,60,56,13,28,37],mps_ld_reset:[86,25],jelica:30,indic:[0,53,55,58,59,47,69,39,71,13,41,42,6,24,49,31,26,28,81,10,25,82,46,40,34,79,86,33,87,32,70,36,50,37],sick:30,caution:[81,8,89,25,19,83,34,51],fibonacci:[53,88,57],want:[38,52,18,71,73,4,13,41,6,31,28,29,81,10,25,45,12,22,33,34,16,36],noprint:16,mysegclass:40,keep:[57,64,66,69,70,71,73,17,41,42,6,77,24,8,28,29,9,25,49,11,45,35,88,15,89,90,32,36,50],unsign:[0,49,81,86,58,18,87,31,6,25,47,36,7,12,8,13,33,50],"1003fd328":13,motion:[68,56,30,28,73],vanish:16,end:[53,54,17,18,59,64,70,71,83,6,25,28,81,10,46,47,40,34,89,16,49,36,37],"0x000000010000206b":16,quot:[53,61,47,66,70,36],icfp:30,ordinari:[71,61,56,34,8],findfirst:49,classifi:[53,73],revisit:30,how:[0,38,55,56,17,18,53,61,69,71,57,41,5,6,48,24,25,28,80,29,81,30,8,11,45,12,13,34,79,35,88,16,32,36,50,37],hot:[56,17,10,65,67,71,4,13,50],recoveri:30,env:16,"000ae0397333bc6d":13,answer:[29,56,36,18,37],symposium:30,ancestor:15,config:[33,50,21],updat:[52,53,55,56,17,61,64,68,70,71,33,57,41,6,24,31,25,28,80,29,30,10,49,47,13,34,79,32,36,50],lam:30,simmon:92,recogn:[10,83,86,8],lai:36,after:[0,53,55,56,17,61,1,68,71,73,4,13,57,41,21,43,6,77,78,24,25,28,29,81,10,49,45,46,12,40,34,86,31,42,88,15,83,89,16,32,93,36,50,37],lovemor:92,"0x0000000100011ded":16,diagram:[24,56,83],befor:[83,53,17,18,61,47,70,1,13,57,42,6,24,25,28,29,81,10,8,45,22,40,86,88,15,89,32,91,36,37],wrong:[29,85,35,17,10,11,16,33,74,36],mps_tramp:93,arch:[41,50,21],parallel:[52,29,56,30,64,69,70,73,34],averag:[91,33,62,74],poolmvff:49,errror:81,type_port:25,attempt:[55,56,17,18,61,70,71,73,58,76,79,28,29,11,82,45,83,34,88,15,49,36],third:[17,30,87,43,48,24,25,33,36],opaqu:[55,42,59,47,69,86],grant:70,baker:[56,57,30,59,62,15,67,69],cbsiter:49,perform:[0,52,55,56,17,18,53,61,64,69,70,71,73,4,83,41,20,42,43,24,7,8,28,29,81,9,30,49,11,85,45,40,34,79,86,35,88,15,76,89,16,32,36,37],type_:[36,8],maintain:[55,56,17,58,61,62,66,69,70,71,41,42,6,28,81,12,40,84,85,49,92,36,50],environ:[71,29,57,30,42,59,31,73,15,36,83,16,58,25,4,93,13,50,51],abysm:49,reloc:[41,56,57,70,71,34],finalis:[79,42],exclus:[42,36,69,93,34,37],mps_telemetry_reset:13,lambda:[89,16,25],order:[52,53,55,56,17,58,60,61,62,64,65,66,32,39,71,4,13,57,42,6,24,7,25,26,29,30,82,8,69,12,91,33,88,15,83,89,16,49,70,93,36,50],finaliz:[26,66,89,71,25],decl:50,origin:[53,17,18,44,6,15,66,89,70,71,25,92,34],mpstd:[33,87,50,21],composit:[67,70,56,15],feedback:90,afip:30,diagnos:13,over:[55,56,17,18,61,1,70,73,41,58,76,6,7,25,28,81,31,11,45,46,33,34,86,35,82,49,36],config_var_cool:[10,16,50],message_type_o:0,becaus:[38,52,54,55,56,17,18,53,59,60,61,62,64,65,66,67,69,39,71,73,13,57,41,49,58,42,6,77,24,7,8,28,29,81,10,25,11,45,12,91,33,79,86,47,1,31,88,15,83,89,16,82,32,40,70,36,50],fifo:[53,62,58,91],poolcreat:79,dijkstra:[61,69,56,30],ulongest:33,flexibl:[38,41,81,55,59,88,66,12,28],vari:[29,56,17,53,43,76,70,50],btcopyrang:18,digest:73,sigplan:30,hashf:25,fit:[52,53,54,55,1,57,18,60,61,62,64,66,70,71,73,19,74,83,41,20,58,5,43,23,29,30,46,33,88,76,49,91,50,37],obj_pool:[34,36],fwrite:31,fix:[0,38,55,56,17,58,53,62,64,70,71,73,19,83,41,20,6,48,49,8,26,29,81,44,10,25,11,45,13,34,84,79,77,16,32,51,36,50,37],arenaent:6,better:[53,81,36,17,18,88,32,11,34,86,65,71,8,4,37,33,9],drawback:24,fig:50,persist:[80,81,35,30,46,12,32,34,28],comprehens:56,shire:92,hidden:[81,82,15],erlang:11,taiichi:30,easier:[41,29,11,88],define_pool_class:40,descend:15,them:[0,38,55,56,17,18,71,60,61,62,64,66,52,70,2,40,57,41,58,43,6,77,24,49,25,27,28,29,81,9,8,11,45,12,22,13,34,79,35,47,88,15,76,89,16,32,91,93,36,50,37],poolclass:[40,13,33,79],nygaard:15,thei:[0,38,55,56,17,18,53,71,61,62,64,66,67,52,69,70,2,73,40,57,41,49,58,42,6,75,24,7,8,26,27,28,29,81,9,30,44,31,25,11,45,12,33,34,79,86,35,47,1,88,68,15,36,83,77,82,32,93,22,37],fragment:[53,54,56,57,58,60,61,62,64,65,70,71,73,76,24,28,30,11,45,12,84,88,49,91,37],dirk:30,thee:13,safe:[0,29,81,86,83,58,30,42,76,15,53,38,69,70,47,33,93,36,28,78],mps_reg_scan_t:[81,36],debugmixin:45,"break":[83,57,18,87,82,15,45,16,70,71,32,40,4,36,28],band:[53,57,59,64,65,69],inescap:45,promis:[56,36],closer:88,interrupt:[29,24,5],itanium:87,yourself:[36,28,37],epdr:40,choic:[55,35,58,18,67,61,88,15,45,70,36],tendenc:[60,22],"0x000000010001f2d2":16,mps_messag:82,codewarrior:[4,50,87],string_hash:25,"0x7fff5fbff7a0":16,harri:30,xcppgc:87,accommod:[52,12,34],loss:[18,5,32],dest_ld:86,"000ae039733592f9":13,arrow:52,each:[0,52,54,55,56,17,18,53,59,60,61,62,64,66,67,69,70,71,73,4,13,57,41,49,58,87,43,6,24,7,8,28,29,81,10,25,11,45,12,33,34,84,79,86,35,47,1,88,36,83,76,77,16,32,40,93,22,50,37],debug:[0,55,58,69,13,1,4,74,40,20,42,22,31,27,28,44,10,25,11,45,12,33,34,85,83,16,49,91,36,51],went:[10,33],european:30,oblig:36,side:[45,83,47],mean:[52,53,17,18,59,61,62,64,65,66,67,69,39,71,73,13,57,41,58,5,76,22,7,8,26,28,29,81,9,10,25,45,47,33,34,79,86,15,83,89,16,32,40,70,93,36,50,37],data_scan:32,laboratori:30,poolepvm:18,btfindshortresrang:18,overflow:29,bufferfil:45,oppos:[29,33,55,56,64],mps_res_limit:[10,12],cbsbl:49,forgot:16,collector:[38,52,54,55,56,17,58,53,59,60,61,62,64,66,68,69,70,71,73,4,83,57,41,43,22,23,78,24,25,28,80,29,81,30,10,11,13,34,35,15,89,16,36],x86:[38,4,87,13,57],unbound:[0,71],network:[29,55,31,11,15,89,28],goe:[29,81,30,45,70,4,28],newli:[56,83,35],crucial:[24,25],content:[0,38,55,35,57,67,22,15,36,45,16,71,79,83,34,28],rewrit:[83,50],laid:[53,16],daniel:[92,30],adapt:[38,90,30,92],reader:32,mps_arena_create_v:28,protocolclass:40,forth:70,kiem:30,mccarthi:[52,13,61,30,15],cbsblockstruct:49,arizona:30,linear:[30,62,70,17,18],barrier:[55,57,71,62,64,66,67,69,70,2,73,74,83,41,76,6,78,8,27,28,81,9,30,44,82,22,33,34,84,15,16,91,93,36,37],worthwhil:29,mps_class_awl:[25,8],situat:[86,59,6,49,64,24,16,8,34,28],free:[38,52,54,55,56,57,18,53,59,60,61,62,64,65,66,68,69,70,71,73,4,74,41,58,76,6,24,8,28,29,81,10,79,11,45,12,83,84,1,88,15,89,49,91,36,37],ineffici:[76,88,62,11,24,70,71,73],mps_commit:[83,16,36,25],ian:30,cytron:30,hand:[29,17,18,20,10,47,36,58,71,8,33,34,51],mvt:[20,76,49,19,83,74,37],atc:[69,58],puzzl:25,epvm:18,assert_mpm:50,filter:[31,13,69,17],ish:45,iso:[47,31,57,30,21],isn:[29,56,17,46,79,45,24,16,25,33,50],"__int_64":[47,87],bufferstruct:79,"0x0000000000000000":16,subtl:[53,17,71],onto:[29,58,79,45,70,1,39],cbstest:[18,49],"0x0000000000000004":16,"0x0000000000000005":16,dimens:[67,70,30],rang:[57,18,59,61,73,66,45,68,76,70,71,49,33,36],kim:30,nhc:30,p_o:[83,16,12],hoop:79,independ:[41,55,9,30,64,28,50],wast:[18,43,88,11,64,12,73,84],rank:[54,17,58,2,66,70,71,19,20,78,25,81,9,8,82,33,77,16,32,37,36,51],necess:28,restrict:[83,57,31,8,64,45,89,49,39,50,73,70,4,34,28],hook:[6,81],instruct:[83,1,17,30,61,62,11,15,90,68,69,70,64,8,33,36,57],alreadi:[0,53,55,56,17,42,6,49,24,25,40,13,93,36],wrapper:[66,31,49,45,25],wasn:[10,12,17],tag_siz:25,agre:[0,15],flagella:[30,15],primari:[61,50,73],brock:30,"00000001003fc000":13,provabl:[55,62,36],nomin:5,top:[38,29,35,18,6,49,66,16,70,25,22],epdrpoolclass:40,sometim:[0,53,55,56,57,18,59,64,52,68,69,70,71,73,4,58,24,8,29,45,15,89],amcscannail:16,timothi:30,toi:[0,81,86,43,25,89,16,32,13,36],too:[38,29,35,43,50,8,69,61,15,41,66,45,24,16,12,25,33,80,49,36,28],kanefski:30,epdralloc:40,mps_message_get:[0,61,35,89,25],upshot:86,john:[52,30,61,15,13,92],bttest:18,hewitt:[54,30],mps_build_cc:87,mps_fill_fencepost:45,tricolor:[66,69,70],tool:[29,30,21,31,61,87,11,15,71,4,13,50],tractofaddr:6,took:[83,86],"10g":16,mps_sac_class_:[70,12],incur:[54,2],serial:[31,6,33,30],somewhat:[25,70,17,73],conserv:[52,29,54,56,57,30,53,61,8,11,15,24,58,70,64,73,26,33],happili:82,simula:[30,15],config_var_rash:[10,71],mps_clock_t:[0,31,47],technic:[38,41,85,30,91,34,37],symptom:12,modula3:15,nmk:4,r4000:87,silli:18,target:[38,29,85,17,18,44,31,32,36,7,73,4,87,33,50],keyword:70,cxref:87,provid:[38,53,56,17,18,59,61,62,69,70,2,73,4,40,41,49,58,5,42,22,78,24,7,31,27,28,29,81,9,25,10,8,11,45,12,13,34,79,86,71,88,15,36,83,89,90,32,1,6,37],lvalu:[83,12],tree:[53,58,44,6,64,65,45,70,49,4],mps_os_w3:[50,87],withington:[62,30,92],project:[38,85,30,15,90,4,36,50],matter:[24,86,57,30],mpmtype:[33,18],poolinit:[6,13,79],searchlimit:18,provis:[79,49],fashion:[61,89,15],entail:[24,56,17,34],mps_ap_frame_push:[78,39,58],ran:[33,12],mps_count_t:76,ram:[55,58,61,11,70,71,73,36,28],mind:[43,70,24,11],mine:30,bitfield:33,raw:[6,68,71],rat:50,lookup_in_fram:[13,16],manner:[45,5,79],increment:[38,52,56,57,53,61,62,64,66,69,70,71,73,83,41,6,24,8,28,29,30,10,79,33,15,93,36,37],infring:5,seen:[29,42,73,45,70,49,50],seem:[29,24,33,45,36],strength:[88,71],recreat:79,harper:30,latter:[66,71,18],cope:[29,81,61,8,89,73],client:[0,52,55,56,17,18,53,59,61,62,47,69,39,71,73,3,13,41,20,58,42,76,6,49,8,26,28,80,29,81,44,10,25,82,45,46,12,33,34,79,86,35,1,31,36,83,89,16,32,40,70,51,93,22,50,37],fwd2:36,thoma:30,thoroughli:33,memo:30,eagerli:49,wherebi:[0,62,46,56],simplifi:[38,52,57,18,53,25,69,45,58,2,32],transistor:70,table_set:25,shall:[47,6,18,5],mps_ap_frame_pop:[78,39,58],object:[0,52,54,55,56,17,18,53,59,60,61,62,75,64,65,66,67,68,69,70,2,73,19,4,74,33,57,41,20,58,21,43,6,77,23,78,24,7,8,26,27,87,28,29,81,9,30,44,10,25,11,85,45,12,13,34,84,79,35,47,71,42,88,15,36,83,76,89,16,82,32,40,91,51,1,22,37],mps_root_scan_t:81,lexic:15,regular:[0,66,4,89,25],alan:30,letter:[47,30],phase:[41,44,61,24,70,73],fwd_:36,coin:30,character_:36,prematur:[52,29,55,61,11,68,73],tradit:42,event_poolinit:13,simplic:[93,50,18,32],don:[38,29,79,41,17,18,71,57,6,49,47,36,66,45,89,50,25,40,22,28,37],simplif:29,doc:[41,18],"0x1003f9878":16,flow:15,doe:[0,52,56,17,18,53,59,60,61,62,64,66,68,70,71,73,74,57,41,49,5,42,43,6,77,78,24,7,8,27,28,29,81,9,10,25,11,12,13,34,84,79,86,47,1,31,88,15,36,76,89,16,82,32,91,93,22,50,37],buckets_:[36,25],dummi:[6,83],declar:[83,29,81,18,30,21,47,53,78,66,58,39,50,79,70,33,40,28,71],metat:15,dimm:55,sun:[30,15],unchang:[1,49],notion:[29,6],came:[59,45,50],kristen:15,ungar:[62,30,15,71],introspect:[80,81,44,76,22,78,91,19,40,74,34,28,51],wow64:38,sigsegv:93,opposit:[52,53,54,55,56,57,18,59,60,61,62,69,64,65,66,67,68,58,70,71,73],cheapli:55,syntax:[40,15],minimum_s:76,modula:[52,11,15],identifi:[18,21,6,62,64,36,67,70,47,32,40,13,34,50,51],figueiredo:15,involv:[29,17,18,59,88,61,8,11,66,45,46,69,71,73,70,40,49,34,57],despit:[86,56,57,11,15,70,71,25,40],layout:[56,17,25,11,16,70,32,34],acquir:[76,10,28,91],mpsliban:[31,4],i5m2cc:87,menu:4,explain:[10,11,8,40,36,50],configur:[20,27,9,18,42,76,6,22,15,78,44,69,50,8,84,91,4,74,13,28,37],btget:18,rich:[29,15],weakrefer:[66,71,15],mps_chat:0,predecessor:15,plate:70,stoy:[59,30],likewis:[6,61],stop:[29,30,1,64,24,70,25,28],compli:68,ceil:18,mpscmvff:91,watson:30,mps_variety_str:21,report:[83,29,86,30,31,82,15,69,64,49,13,36],reconstruct:[16,18],mps_ap_fil:[83,16],mustn:81,first_fit:91,softli:[15,66,45,70,71,73],bar:[70,50],gareth:[18,21,6,42,82,45,7,79,49,26,3,92,50],emb:40,"\u00e5ke":30,baz:50,patch:47,"__date__":21,twice:[29,81,49,39,45],bad:[29,57,88,69,64,45,16,15,25,83],fourteenth:30,told:[41,64],steal:28,respond:[88,11,12],mps_arena_has_addr:28,cbssetmins:49,fragmentation_limit:76,victim:13,fair:18,fp_size:45,btcv:18,light:29,datatyp:42,loreclaim:17,nul:[31,13,83],accumulatorscal:33,result:[0,53,56,17,18,61,64,68,39,71,73,40,76,6,49,8,27,28,80,29,81,10,25,45,46,12,33,34,79,86,35,47,31,83,13,89,16,32,70,93,36,50,51],"0x1003faf20":[13,16],respons:[38,29,79,55,56,58,42,6,49,64,41,24,12,73,40,80,61,28],fail:[83,55,17,18,47,39,13,58,43,6,24,25,28,29,10,82,45,46,12,40,34,35,33,15,16,49,70,36,50],hash:[85,55,86,8,15,66,45,77,16,64,25,36,37],epdrinit:40,tractofbaseaddr:6,best:[38,53,57,58,64,66,52,70,73,76,25,28,29,30,49,33,88,15,32,91,36,50],subject:[0,81,31,49,66,45,89,70,25,4,34,28,84],awar:[53,40,8],said:[41,52,60,61,45,68,69,71,73,13],hopefulli:17,erez:30,databas:[30,79,18,5,21,6,42,82,45,24,7,71,49,26,3,4,13,50],delphi:15,phantomli:73,shenker:30,yet:[0,41,35,17,10,49,82,89,15,52,83,45,24,16,8,40,33,36],figur:[38,41,83,45],languag:[52,53,55,56,17,58,59,61,62,64,67,68,69,70,71,73,83,57,20,5,77,23,24,29,30,31,11,47,40,38,85,15,89,36,50,51],res_io:45,sos8cx:87,awai:[11,17],approach:[47,88,11,50,30],glasgow:30,pad_:36,attribut:[33,86,79],inabl:[53,54],accord:[41,29,17,18,53,60,88,64,83,46,70,47,73,91,40,33],never:[52,53,57,18,61,62,47,67,71,33,43,6,78,24,25,80,29,31,79,13,34,86,15,83,76,89,49,36],extend:[41,17,18,6,49,15,90,58,79,8,40,36,28,57],sram:70,weak:[38,55,17,18,66,69,70,71,73,19,41,20,22,77,78,8,27,81,25,33,85,88,15,89,37,36,51],obj_chain:[36,25],extens:[52,81,56,18,44,43,10,61,11,15,65,50,40,36,28,37],lazi:[64,82,30,18],unabl:[22,28],preprocessor:[87,60,31,15,16,47,10,50],extent:[54,55,56,58,62,11,64,65,89,70,15],dbgpool:[10,45],toler:[66,69,8],xci6ll:[4,87],mps_clocks_per_sec:31,protect:[52,53,57,71,61,47,66,67,70,2,73,19,74,40,41,42,76,6,78,25,27,28,81,9,30,8,82,22,33,34,84,79,83,16,91,37,93,36,50,51],accident:[33,61],expos:[52,67,70,28],fault:[38,52,57,30,6,8,64,66,67,70,71,73,19,34,61],howev:[0,53,55,56,57,18,59,61,64,70,71,4,83,41,58,5,43,6,24,25,27,28,29,31,12,40,15,32,92,93,36,50],against:[29,86,43,6,73,32,61],logic:[17,18,59,62,15,67,71,50,37],browser:15,com:[38,4,90,5],con:[0,56,30,58,15,66],rehash:[86,36,25],epdldebugsig:40,consumpt:53,mps_telemetry_set:13,bool:[18,6,7,49,26,40,33],toni:[40,6,92,30,18],character:[66,29,30,15],ref_o:89,delic:8,loader:28,dconfig_var_cool:[4,16],guil:15,exemplari:5,sml:[30,15],vmmap:13,wider:4,guid:[20,85,86,18,11,47,71,8,40,36],assum:[41,52,81,56,10,89,66,45,24,12,8,40,33,83,36,50,60],summar:[6,37],duplic:[41,56,57,6,11,68,50],mps_lib_fput:31,liabil:5,degener:62,fre:15,union:[41,86,58,6,47,69,25,33,36],three:[0,53,56,61,64,66,67,68,70,71,73,3,4,74,83,41,21,43,6,24,7,25,27,28,29,10,49,11,45,47,13,34,86,87,88,15,16,32,36,50],been:[0,38,55,56,17,18,53,59,61,62,66,52,69,70,71,73,13,57,41,87,6,77,75,24,25,26,28,80,29,44,10,49,11,45,12,22,33,34,79,86,35,68,15,83,89,16,82,32,40,92,93,36,37],specul:[18,15],accumul:[60,33,11,79],much:[0,52,55,17,18,61,69,4,57,41,43,24,28,29,44,32,11,46,12,38,35,88,89,49,36,50],mps_arena_unsafe_restore_protect:28,mult:40,interest:[0,29,36,17,44,10,49,15,34,77,90,71,32,41,4,13,28,37],subscrib:90,insert_link:83,cohen:30,quickli:[56,57,6,61,69,71,36,28,17],life:[76,62,30,25],retrospect:30,lifo:[53,62,70,58],suppress:47,tractreturn:6,ani:[0,53,55,56,17,18,59,61,62,64,65,66,68,69,70,71,73,4,33,57,41,49,58,5,21,76,6,24,7,31,28,29,81,25,10,8,11,45,12,13,34,79,86,47,1,42,88,15,36,83,89,16,82,32,40,91,93,22,50,37],"0x0000000100001ef7":16,unzip:4,dave:30,lift:18,child:[7,64],"catch":[55,35,50,15],pool_o:[80,9,76,22,78,2,8,91,27,74,84],"_m_ix86":50,emploi:62,type_fwd2:36,mps_alloc_pattern_ramp_collect_al:46,ident:[86,18,87,43,62,82,47,67,2,49,40,12],aix:59,gnu:[0,87,15,16,4,13],servic:[41,29,5,88,61,11,69,70,12,49],properti:[18,62,64,66,69,70,2,19,74,33,20,76,22,78,25,27,28,9,30,8,40,84,86,35,49,91,37,36,51],mps_lib_memcpi:[31,33],commerci:[38,29,5],mps_rm_const:[81,56],aim:[30,15],calcul:[66,33,88,34],publicli:[29,15],thrash:[29,30,61,66,69,71,73],aid:[81,49],vagu:57,anchor:30,spawn:15,seven:91,cons:58,mps_amc_apply_stepper_t:22,arenasetcommitlimit:6,mexico:30,tabl:[54,55,56,17,18,64,65,66,67,69,71,73,13,57,20,87,43,75,8,28,81,30,44,25,33,85,86,15,77,16,36,37],toolkit:30,trishul:30,cond:7,conf:[50,30,37],mps_thr_t:[81,69,93,36],symtab_s:[81,36],tediou:29,disappear:[89,71,47,49],grown:15,mps_word_t:[81,86,17,47,36,16,32,33,13,28],op_env:16,incorrectli:[89,58],receiv:[29,81,16,56,5,59,88,11,36,89,7,49,13,34],suggest:[29,18,43,10,59,90,49,91,92,36],make:[0,38,54,55,17,18,53,61,62,64,67,52,69,39,71,73,4,13,57,41,58,5,21,43,22,48,24,25,87,28,80,29,81,10,49,11,45,47,33,34,85,35,31,42,88,15,83,76,77,16,32,40,70,51,93,36,50,37],transpar:[81,55,59,10,47,45,69,83,86],complex:[29,58,61,69,11,15,45,16,64,40,50,71],split:[53,55,57,18,88,62,11,66,45,70,49,3,13],mps_mvt_free_siz:76,complet:[41,29,81,56,5,18,43,10,61,32,11,36,66,24,70,50,31,40,83,34,28],elli:[41,30,15],mps_fmt_adjust_fencepost_t:45,fragil:32,evid:[16,58],vvv:13,quentin:30,rail:53,kit:[20,4,85,5],fairli:[54,71],rais:34,refil:[83,93],ownership:42,refin:[41,24,56,71,15],gustavo:30,poolarena:40,protocolerror:49,mps_io_t:31,studi:[45,11,30],tune:[20,85,30,29,43,22,36,16,34,61],dylan:[17,5,82,6,25,11,15,67,50,8,40,18],char_bit:87,undesir:76,bewar:[83,16],mps_ap_trip:83,mps_lib_assert_fail:31,thu:[0,29,56,17,59,60,73,15,66,76,52,69,25,33,83],messeng:[29,30],thr:[81,93],inherit:[20,40,58,15,44],poolmrg:[26,82],contact:[38,20,81,5,8,47,90,83,78,77,16,39,25,91,4,93,27,28],greatest:18,thi:[0,38,54,55,56,17,18,53,59,60,61,62,63,64,65,66,67,52,69,39,2,73,3,4,74,33,57,41,49,58,5,21,43,22,77,78,24,7,8,26,27,87,28,80,29,81,9,44,10,25,11,45,46,12,91,13,34,84,79,86,35,47,71,93,31,42,88,68,15,36,83,76,89,16,82,32,40,70,1,6,50,37],endif:50,lockstruct:42,programm:[0,29,58,53,59,61,87,11,89,64,76,52,70,15,40],jean:30,portabl:[38,30,31,15,70,47,32,13,36,50],arenasetsparecommitlimit:6,left:[49,56,18,1,10,6,25,88,61,15,47,32,2,73,13,33,28],arena_ld_length:6,protocol:[38,56,58,64,66,39,33,41,20,6,78,79,26,81,44,32,45,40,83,49,36,50,51],background:[18,44,6,42,68,28,50],just:[0,53,56,17,18,66,13,1,4,40,57,41,58,43,77,25,28,29,81,49,82,45,33,34,15,89,16,32,70,93,36,50,37],mps_sac_alloc_fast:12,shapiro:30,pool_create_v:80,orient:[41,53,30,59,61,15,40],bandwidth:[61,71],human:[3,13,21],ifdef:50,nowadai:[66,70],unbuff:91,poolcondemn:79,act_on_rang:18,previous:[17,58,42,89,25,26,13],easi:[81,18,22,11,15,36,66,16,4,93,34,50],interfer:28,had:[0,29,57,82,15,41,45,16,71,25,91,13,65,36],lumpi:35,define_class:40,fortran:[11,15],spread:[29,88,60],"0x1003f9ae0":16,board:30,henriqu:15,els:[0,41,8,16,50,25,83,36,28],save:[52,54,56,30,32,15,70,49],gave:[29,15],opt:4,applic:[38,53,58,61,67,52,70,73,4,76,23,28,29,30,31,11,88,15,89,16,32,37],race:[10,40,83],"0x1003f9c18":16,preserv:[55,17,60,66,69,70,79],r_o:93,locu:41,pretest:[0,15],distanc:34,lcc:87,birth:76,"0x1003f99d8":16,obj_isfwd:[34,36],"0x000000010000ea40":16,apart:[7,11],linux:[38,42,87,16,8,4,93,50],measur:[57,30,61,70,32,33,28,17],overcompens:61,specif:[56,17,18,61,62,71,73,33,41,58,42,6,23,79,26,29,81,30,11,45,13,35,15,49,50],arbitrari:[40,6,34,47,65],bufferinit:79,hunt:30,manual:[0,52,55,58,53,60,61,1,65,39,79,73,19,74,41,20,76,23,78,24,8,80,29,81,49,11,45,12,91,83,38,84,15,32,70,37,36,51],mit:30,dep:50,"0x00000001003fb130":16,mps_pf_fri3gc:87,src_ld:86,colmerau:15,unnecessari:[52,29,17,25],underli:[56,25,11,89,70,49],www:4,right:[29,18,30,43,49,11,47,45,32,33,5,36,37],old:[52,53,56,57,58,59,60,61,62,69,71,73,83,87,6,24,25,29,44,33,34,86,15,49,36],mps_arch_s8:87,deal:[29,54,86,67,33,15,66,59,70,73,40,27],interv:[0,53,18,25,49,83,36,28],mps_arch_s9:87,maxim:[41,76,40],percentag:76,mmqa_test_funct:18,zct:[55,75],born:73,intern:[83,53,54,17,18,82,64,70,73,4,13,57,20,6,25,28,80,29,30,44,10,11,45,12,33,48,84,31,88,16,49,37],printer:[13,15],addrcomp:33,pain:[29,17],"0x0000000100003f55":[13,16],successfulli:[80,81,55,35,83,46,12,49,40,34,28,71],make_pair:36,insensit:15,cooper:[41,57,30,42,6,15,24,69,28],combat:8,bottom:[81,8,25,16,49,36],stronger:57,segmyseg:40,fox:30,arthur:30,subclass:[45,6,40,57],tempor:[20,76,49,19,83,74,37],track:[41,29,56,53,10,15,45,24,16,70,64,36,71],ucsc:30,morereturn:16,overcom:15,condit:[52,29,36,80,58,5,10,46,11,64,34,83,7,70,49,40,4,33,50],foo:[47,16,12,79,13,50],type_integ:[36,25],fencepost:[53,55,59,10,45,1],core:[61,55,56,47],plu:[76,6,50,5],sensibl:79,bole:30,bold:29,someclass:40,pose:36,libsqlite3:4,confer:30,promot:[52,35,58,60,22,69,73,40],"0x7fff5fbff808":16,hsu:30,mps_frequenc:12,post:[0,53,35,61,89,25],"super":[45,40],gartner:15,proceed:30,chapter:[50,16,30,28,36],obj:[16,6,25,82,36,45,77,7,32,83,34,86],harlequin:[92,15],patchi:71,slightli:[71,6,49,17,25],simul:[67,30,15,49],felleisen:30,poolscan:[16,79],despair:37,frame_o:39,old_symtab_s:36,liber:93,commit:[83,81,56,44,10,6,61,70,12,79,33,36,28],sept:30,produc:[81,35,18,15,45,71,13],encount:[10,13,11,32],curiou:13,"float":[52,53,58,60,64,68,70,73,50],encod:[57,18,21,66,67,68,69,71,13],bound:[0,55,35,57,18,59,61,62,15,67,16,70],soo:30,down:[0,53,17,18,69,70,71,4,41,87,6,7,31,28,29,10,45,12,34,15,16,49,36],attrincr_rb:33,"0x0":16,formerli:[87,56,25],lieu:41,wrap:[66,29,68,45,32],opportun:[45,35],cafeteria:70,storag:[0,52,55,56,57,18,59,61,62,65,66,67,70,71,73,58,76,24,28,29,30,40,15,49],kakkad:30,lockclaimglobalrecurs:42,accordingli:[3,15,31],suffici:[52,18,76,88,15,69,40,36],mps_class:34,mps_t_word:[33,50,87],config_var_:50,support:[0,38,55,56,57,18,53,61,47,65,69,39,71,73,3,4,74,40,41,58,42,76,6,77,78,24,49,8,27,29,81,9,30,10,25,45,46,12,91,33,34,84,85,86,31,87,88,15,36,83,89,32,70,51,93,22,50,37],why:[0,29,16,35,18,31,89,7,25,33,83,37],avail:[38,53,56,57,18,61,64,67,69,70,71,73,4,83,58,5,43,31,28,80,29,10,25,11,13,88,15,76,16,49,93,50],width:[33,87,58,50,49],reli:[29,56,17,59,10,89,47,76,24,69,13,93,83,37],editor:[92,15],fraction:91,acknowledg:[20,92],overhead:[41,29,17,18,76,6,69,11,64,67,24,58,49,40,61,37],btfindresrang:18,lowest:[7,58,18],head:[45,83,60],traceid:33,toward:[29,70,18],form:[0,53,55,56,18,59,60,61,62,64,65,66,52,69,70,71,73,5,7,8,10,79,11,13,88,15,16,49,91,93,50],offer:[52,15,66,45,70,73],forc:[29,13,36,15,32],poolno:79,mpscmv:74,somehow:15,multiprocessor:30,hear:37,dead:[52,53,55,56,17,58,59,60,61,62,64,68,39,71,41,43,22,78,79,46,83,35,16,36],heap:[52,53,55,56,57,58,61,64,65,69,70,71,41,22,79,28,29,81,30,11,34,88,15,16,32,36],old_symtab_root:36,oopsla:30,hashtabl:25,"true":[0,53,58,47,32,83,18,6,7,8,26,28,80,29,25,40,34,86,33,89,49,91,36],cached_count:12,reset:[86,18,6,25,33,13],"throw":11,attr:[10,6,33],rattl:29,maximum:[41,62,35,18,76,6,50,45,12,49,33,74,28],tell:[0,38,54,86,21,73,81,15,41,53,52,50,25,83,36,28,71],mps_pool_t:[80,36,1,9,84,78,76,22,8,34,83,45,12,73,91,27,74,25,2],tucson:30,absenc:[31,82,45],autoconf:4,emit:[13,58,50,79],mpscsnc:78,accessset:33,uncoop:[61,30],featur:[0,55,58,47,69,70,71,1,13,20,6,25,28,81,44,8,11,45,22,83,15,36],alongsid:[40,55],mps_word_width:[50,18,87],classic:[29,4,70,24,65],utc:[13,16,30],"abstract":[41,29,30,18,42,6,44,15,53,45,7,50,33,40,28],consciou:30,decrypt:32,mps_class_t:[80,9,78,76,22,8,45,2,73,91,27,74,84],"__line__":45,postscript:[56,70,11,15,67],exist:[0,55,17,18,61,47,70,3,13,41,6,24,26,29,45,12,40,34,35,33,49,92,36],darko:30,strive:[6,86],mps_root_create_fmt:81,indirect:[54,55,17,5,64,68],pirinen:[41,57,30,6,64,66,45,69,70,92],sticki:[62,70,30],assembl:[30,50,17,15],"_io":[47,64],encrypt:32,testor:42,index:[20,86,17,18,53,15,66,70,64,73,33,57],when:[0,52,54,55,56,17,18,53,59,60,61,62,64,65,66,68,69,70,2,73,3,4,74,33,57,41,58,43,22,77,78,24,49,8,27,28,29,81,9,10,25,11,45,12,13,34,84,79,86,35,47,71,93,31,88,15,36,83,76,89,16,82,32,40,91,1,6,50,37],lockclaimrecurs:42,mps_begin:45,poolstruct:79,accessread:33,jone:[29,55,18,30,21,59,82,11,64,69,71,79,3,92],fmt_scan:81,test:[0,52,17,18,59,61,67,13,4,40,87,43,7,25,28,29,44,10,33,86,15,83,77,16,49,91,36,50,51],mpsacl:28,presum:[6,42],telemetri:[20,86,17,43,10,31,79,69,47,36,16,25,4,13,28,51],unlimit:[29,7],jonl:[92,57],node:[52,54,56,60,66,69,70,49],matur:[10,22,30],notif:[82,49],intend:[18,59,2,33,42,76,22,7,79,28,81,9,10,32,40,34,86,31,15,49,93,36,50,71],prot:[6,50],benefici:18,felt:29,stringid:13,mps_debug_option_:[91,27,74],intens:[55,30],intent:[18,47,69,49,13,33],consid:[52,29,35,17,18,53,60,6,62,11,58,70,79,49,83,80,34,61,37],occasion:17,mps_build_ac:87,russo:30,younger:[52,54,56,60,64,71],event_kind:13,my_malloc:29,longer:[0,53,55,56,18,61,62,70,71,73,33,24,8,26,80,29,10,79,11,12,40,34,35,15,89,92,36],furthermor:[76,45,81,17],home:15,arenainit:6,phantomrefer:[71,73],blockrang:49,candid:[56,34,18],iwmm:30,phong:30,ignor:[81,56,17,46,64,24,7,71],gracefulli:59,config_:50,time:[0,38,54,55,56,17,18,59,61,62,64,65,66,67,52,69,70,71,73,4,33,41,58,5,21,43,22,77,24,8,28,29,81,30,10,25,11,45,46,12,13,34,86,35,47,1,31,42,88,68,15,36,83,76,89,16,82,40,91,51,93,6,50,37],push:[70,62,39,58,84],mps_fmt_fwd_t:[53,34,36],offsetof:[8,32,36,16,79,83,25],backward:[52,6,18],strong_buckets_ap:25,chunksiz:13,rom:[61,71],chain:[0,52,55,57,58,53,60,61,62,66,68,70,2,1,43,22,25,27,28,40,85,35,88,36,51],globals_root:36,skip:[83,53,85,17,18,22,25,36,78,16,70,2,8,27,34,9],mps_:47,global:[29,79,17,42,6,73,81,36,85,16,70,71,25,40,4,92,33],ost:30,invent:[52,24,57,15],osi:5,cacm:30,signific:[52,29,58,18,76,31,6,88,11,66,69,73,91,13,61],addrcopi:33,dalton:30,milo:30,pldi:30,osf:[4,87],hierarch:30,decid:[41,29,35,17,18,79,11,83,45,70,12,73,56,33,36,28,37],middl:[81,56,61,64,16,71,49,40,83,28],depend:[52,49,55,56,17,18,53,62,47,66,67,68,39,71,73,19,74,13,20,58,87,76,6,78,7,8,27,28,29,81,9,44,10,25,45,91,22,33,84,85,86,35,88,15,77,32,40,70,51,93,36,50,37],zone:[41,6,17],graph:[52,54,55,56,60,64,66,69,70],cornel:30,intermedi:[76,17],w3ppmv:87,rel:[29,55,57,15,69,70,12],environment:31,yve:30,rightmost:18,decis:[35,17,18,31,77,58,39,36],jvm:15,lasttract:6,henderson:30,brown:30,sourc:[38,58,13,4,40,20,5,21,6,8,28,29,30,44,31,49,45,33,86,15,77,32,50,37],mps_sac_t:12,string:[83,29,35,17,30,21,31,69,15,67,16,2,64,25,13,36],barrett:[92,30],blumof:30,"1003fe000":13,unfamiliar:63,feasibl:45,broadli:[62,34],bruggeman:30,octob:30,word:[52,55,56,17,18,60,61,64,66,69,70,71,72,73,13,57,58,90,8,81,25,32,45,47,33,34,84,83,16,49,36,50],exact:[53,54,56,17,58,61,47,69,70,71,73,33,87,22,78,8,27,81,10,25,83,36,37],seemingli:16,cool:[56,10,65,67,16,71,4,13,50],"0x1003f9af8":16,format_return:45,"0x1003fe278":16,administr:[11,15],level:[38,56,58,61,64,65,66,67,70,71,73,13,87,6,24,7,8,29,25,11,45,33,15,16,49],did:[29,36,28,15,25],die:[52,35,17,58,22,64,16,71,25],gui:30,henri:[69,30],metadata:[25,8],iter:[17,18,44,6,15,49,36],rusag:31,magnet:57,item:[6,70,21],"__time__":21,quick:[53,62,88],recogniz:57,dip:45,round:[57,10,88,11,70,12,25,91,83,36,28],dir:50,o1algc:87,prevent:[0,56,17,30,6,89,77,24,69,12,8,33,71],edelson:[70,30,15],slower:[29,61,56,57,18],attrbuf_alloc:33,sign:6,oldspac:[59,53],colin:30,cost:[54,55,59,61,62,66,69,70,2,83,41,5,43,24,25,30,49,12,13,15,76,32,36,50],unprotect:[81,55,8],maximum_s:[76,74],relocat:65,port:[31,15,89,25,36,50],leaf_ap:25,addr:[80,49,36,33,6,8,82,34,83,45,16,25,40,13,22,28,86],malo:30,texa:30,uniform:[58,18,79],current:[0,38,56,57,18,53,67,69,39,71,73,4,40,41,58,42,6,8,27,87,28,81,49,11,45,33,21,15,13,32,70,93,50],"0x00000001003f9730":16,arenafinish:6,suspect:16,mps_os_i5:87,va_list:[80,45,40,83,28],tolimit:18,failobj1:40,lockclaimglob:42,deriv:[55,56,57,59,31,6,64,24,69,47,49,33,40],increasingli:46,vector_:[36,32],guardian:[40,82,30],gener:[0,38,54,55,56,17,18,53,59,60,61,62,63,64,66,52,69,39,2,73,4,74,40,57,41,20,58,42,43,6,77,8,26,27,28,29,81,30,44,25,11,85,45,46,12,33,34,79,35,47,71,88,15,36,83,89,16,32,70,93,22,50,51],"1003fa7d0":13,integer_:36,disclaim:5,consult:[83,31,6,17],explicitli:[38,52,47,62,15,64,40,33,13,28],modif:[56,18,5,15,45,24,70,71,4],address:[0,53,54,55,17,18,59,60,61,62,64,65,66,67,68,69,70,71,73,13,57,58,43,6,49,8,28,80,29,81,44,10,25,12,22,33,34,86,47,88,15,83,16,32,91,93,36],failnoteseg:40,ratio:76,along:[56,60,25,88,79,10,33,40],lii6gc:[4,87],wait:[0,38,6,28,25],epdldebugpoolclass:40,mps_os_ia:87,shift:[33,50,17,18],steffen:30,queue:[0,56,17,61,25,82,66,89,70,71,49,51],weak_array_:8,attrpm_no_read:33,behav:[29,56,11,47,67,46,40],thirti:30,extrem:[69,70,50],bob:30,rafael:30,reclaim:[0,38,55,56,53,60,62,64,66,52,69,39,71,73,74,75,41,76,22,77,78,24,8,27,80,81,9,44,10,25,45,91,33,84,79,1,15,83,89,70,36,37],macintosh:[50,30,87],mps_rank_t:[81,78,33,71,8],chalmer:30,semant:[31,6,55,40,15],refsetuniv:41,regardless:[28,49],prerequisit:[4,85],grunwald:[62,30],extra:[55,17,18,61,64,66,2,74,76,6,78,24,79,27,28,80,29,9,8,83,84,91,22],pentium:55,modul:[41,20,29,5,18,21,31,6,42,11,15,52,44,49,64,73,40,48,50],prefer:[57,6,24,33,4,17],reig:30,type_uniniti:83,visibl:[47,58,28],marker:[53,81,58,59,36,39,34],prompt:[53,89,15,24,71,8,4,28],prei:73,sigbu:[16,93],memori:[0,38,54,55,56,17,18,53,59,60,61,62,63,64,65,66,67,52,69,70,71,72,73,4,33,57,41,20,58,5,87,43,22,23,24,49,90,8,26,28,80,29,81,30,44,10,25,11,85,92,45,46,12,13,34,14,79,86,35,47,1,31,88,68,15,36,83,89,16,32,75,51,93,6,50,37],wherev:33,univers:[41,30],visit:[52,81,57,22,16,4,34,28],todai:[29,70,15],perl:[52,53,11,15],cmp_t:[86,25],live:[0,53,54,55,56,58,61,62,66,52,69,71,73,43,22,77,24,8,29,81,9,30,10,25,46,12,79,35,1,68,89,16],handler:[16,6,67,7,73,13,93,34],scope:[40,70,17,15],prev:83,reorder:83,unsaf:[89,70,28],idempot:13,afford:[41,29,17],peopl:[0,29,56,61,63,15,90,69,70,92],claus:5,brooksbi:[38,30,18,21,6,42,82,45,7,79,49,26,3,92,50],scholten:30,visual:[38,4,50,15,87],appel:[41,57,64,30,73],olivi:30,prototyp:[50,18,15],examin:[41,55,17,18,60,24,86,70,40,36,28,57],alexand:30,mps_pool_check_free_spac:1,effort:[10,61,64,28,73,50],easiest:45,behalf:29,fly:30,judi:92,graphic:[92,50,15,57],dissimilarli:58,poolam:[10,18],car:[16,36,30,32],prepar:[0,35,18,16,12,79,83],pretend:11,uniqu:[41,57,30,13,33,50],imper:15,descriptor:[53,6,79,49],minimum:[53,56,17,18,76,73,45,71,49,91,50],can:[0,38,54,55,56,17,18,53,59,60,61,62,64,65,66,67,52,69,39,71,73,4,33,57,41,58,5,21,43,6,77,75,24,49,90,8,27,87,28,29,81,9,30,10,25,11,45,12,91,13,34,79,86,35,47,1,42,88,68,15,83,76,89,16,82,32,40,70,93,36,50,37],inadequ:[70,11],findshortresrang:18,purpos:[53,56,57,61,70,2,4,74,13,5,42,6,8,28,29,30,44,49,12,22,40,34,15,32,93,36],laughter:13,traceabl:[6,79],cisc:62,boilerpl:40,strother:30,mps_arena_t:[0,58,59,47,2,74,76,22,78,8,27,28,80,81,9,82,45,34,84,86,35,89,91,93,36],encapsul:[86,6,73,66,70,71,25,28],stream:[53,57,10,31,49,69,36,16,79,25,4,13,28,51],predict:[29,76,35,17,18,43,62,11,59,58,70,91,56,83,74,28],winston:30,agent:41,limitreturn:[18,49],heard:29,critic:[83,20,56,17,30,42,10,61,64,48,45,16,32,40,13,65,36,51],abort:[31,13,16,36,32],tracesetempti:6,recycl:[52,53,56,17,58,61,62,64,69,70,71,1,41,20,22,23,24,79,28,81,11,88,15],mps_pf_xci6ll:87,unfortun:[29,11],occur:[0,53,55,56,58,59,61,64,66,67,68,69,70,71,73,33,24,28,10,11,46,40,86,83,36],verlag:30,alwai:[0,53,57,58,62,64,66,67,52,70,71,1,33,87,76,25,26,28,29,81,10,45,46,47,13,34,88,16,32,91,36,50],differenti:71,exit_cod:81,multipl:[38,52,55,58,53,59,60,1,65,66,68,69,70,73,83,41,18,42,6,8,28,29,44,45,46,12,40,84,86,15,89,93,36,51],instant:[80,53,28],mps_frame_t:39,reg_root:[81,36],mps_telemetry_intern:[13,69],write:[0,55,56,17,59,82,64,66,67,13,71,73,19,4,33,57,41,20,5,8,28,29,81,9,30,31,11,45,47,40,15,83,89,90,3,32,70,93,36,37],vital:[57,10,64,32,83,33],anyon:29,pure:[38,52,55,25],familiar:[41,36],parameter:50,predictor:30,controlalloc:[6,40],poolclassepvm:18,unlucki:89,product:[38,52,85,17,5,21,10,22,34,45,16,50,27,4,58,13,28],proc:[30,21],snc:[19,37,39,78,20],book:[92,11,50],csl:30,max:6,clone:30,make_t:25,usabl:28,jacqu:30,membership:[6,49],mad:30,"1993a":[67,71],mai:[0,38,54,55,56,17,58,53,59,61,62,64,66,67,52,69,39,2,73,4,74,33,57,42,76,22,77,78,24,49,8,27,28,80,29,81,9,30,10,25,11,46,12,91,13,34,84,79,86,35,47,71,93,31,88,68,15,36,83,89,16,32,40,70,1,6,50,37],underscor:47,allocat:42,data:[38,52,55,56,17,18,53,59,61,62,64,65,66,67,68,69,70,71,73,33,57,58,5,42,6,24,7,25,28,29,81,9,30,44,10,49,11,45,46,12,13,1,31,15,83,16,32,40,93,36,37],grow:[0,29,35,76,61,70,49],man:[61,18],mps_fmt_class_t:34,stress:[4,49],mps_arena_:[59,47],practic:[41,86,56,18,30,11,47,66,24,32,13,36,57],findshortresetrang:18,mpsio:[31,13],explicit:[53,55,57,29,11,15,45,40],mps_root_create_t:[81,36,25],pooltrivbufferinit:79,inform:[0,52,55,56,17,58,53,59,61,63,64,66,67,68,69,73,13,57,41,5,21,6,23,24,90,79,28,30,31,49,11,45,40,34,35,16,32],"switch":[17,25,15,36,32,4,27],preced:88,combin:[38,29,56,30,87,88,6,49,11,15,41,66,45,24,12,73,4,50,71],block:[0,38,54,55,56,57,58,53,59,60,61,62,64,66,52,69,39,2,73,74,83,41,20,43,6,77,78,24,49,25,27,28,80,29,81,9,44,10,8,11,45,46,12,91,13,34,84,86,35,47,71,31,88,15,36,76,89,16,32,70,1,22,50,37],finddelet:49,csd:30,callabl:6,talk:45,tbl:[86,25],approx:41,"_ts_":45,schwartz:[66,69,30],anticip:[29,73],softrefer:[70,71],approv:[5,49],ymmv:38,cutt:30,mps_fmt_destroi:[34,36],thr_o:93,size_t:[18,47,1,74,83,42,76,22,8,28,29,81,31,25,45,12,33,34,35,16,32,91,93,36,50],equip:30,still:[52,55,17,18,61,62,69,72,73,4,41,58,42,77,24,25,28,29,79,11,45,13,34,86,15,89,16,49],ieee:30,dynam:[52,29,55,56,58,30,6,62,88,89,64,65,68,69,70,15,40,61,71],"0x000000010006631f":16,conjunct:[55,50,42],mps_arena_start_collect:28,group:[92,50,15],thank:92,concis:[13,49],polici:[38,52,55,56,17,58,53,62,64,66,69,70,73,57,18,76,6,80,30,47,40,88,91,51,36,12],zendra:30,bekker:30,tort:5,window:[38,52,57,42,31,61,87,68,8,4,93,33,50],mail:[18,6,45,90,40,50],main:[29,81,55,56,57,30,88,61,49,69,47,67,24,16,70,71,73,40,36,50],message_o:0,confin:[33,11],non:[56,18,60,61,64,69,70,71,1,3,33,41,58,5,42,6,49,25,26,27,28,81,30,44,10,8,40,34,79,86,31,15,32,36],free_templ:1,recal:36,halt:[52,58],halv:69,mmqa:18,mps_arena_walk:45,cbsblocksiz:49,jame:30,alist:10,mayuseinlin:49,initi:[83,53,56,17,18,62,66,69,70,33,42,43,6,79,28,29,81,25,12,40,49,36,50],tucker:[92,30],therebi:[52,18],half:[69,18],superset:41,provision:41,discuss:[41,53,21,11,66,45,89,90,40,36,50],nor:[55,61,62,66,70,12,73],introduct:[38,20,79,36,40,18,21,6,44,85,23,45,7,50,49,26,3,4,33,41],critiqu:30,obj_scan:[77,36,34,32],term:[38,53,54,55,56,17,58,59,60,61,62,64,65,66,67,52,69,70,71,72,73,4,57,5,76,29,11,45,68],workload:30,name:[57,18,59,62,64,13,79,4,40,41,58,21,8,7,31,29,44,10,25,45,47,33,34,87,15,49,50],lewi:[30,15],perspect:[30,8],didn:[52,45,58,15],revert:41,type_vector:32,buckets_pool:25,separ:[54,56,17,18,59,61,62,47,67,70,71,4,33,41,6,24,25,28,29,11,45,12,40,84,49,91,50],mps_addr_return:82,massachusett:30,sigusr2:93,januari:[41,30],mps_fmt_put_fencepost_t:45,confid:[24,27,25],compil:[38,53,55,56,17,18,59,61,62,64,65,67,68,69,70,71,73,3,4,83,57,5,21,24,29,81,30,10,13,85,87,15,16,32,36,50],everyth:[81,13,36],domain:[29,15],replai:79,dialect:15,moher:30,replac:[53,59,8,15,34,45,77,25,40,36],individu:[86,56,18,6,46,73],continu:[38,29,62,56,58,18,88,32,11,15,66,69,24,7,64,25,49,36,28,71],lookasid:[67,69,58],dramat:[43,52],"0x00000001003f9b70":16,redistribut:5,replay:79,"0x00000001003f9bc8":16,significantli:[41,29,88,18],poolreadi:6,year:30,operand:[33,16],happen:[41,29,56,17,71,10,61,25,11,36,83,45,16,12,8,40,80,93,34,60],dispos:[34,15],conting:49,shown:[69,66,89,16,25,13,83],myformat:4,jackson:[92,30],space:[83,53,55,56,17,58,59,60,61,62,64,67,69,39,71,73,74,33,57,41,43,6,24,25,26,28,29,30,10,79,11,45,12,91,13,84,86,35,1,15,76,16,82,49,70,36,50],profit:5,protocolsomeclassguardian:40,rankfin:33,mps_cached_count:12,"0x7fff5fbff174":16,profil:[30,87,43,69,76,16,13],underwrit:[45,1],toolchain:[4,87],rational:[60,33,50,44],mps_arch_i4:87,mps_alloc_pattern_t:46,mps_arch_i6:87,mps_arena_expos:28,correct:[38,49,56,44,42,10,6,8,69,89,83,24,32,39,25,40,27,87,34,61],mps_arch_i3:[50,87],undead:[68,55,62],earlier:[0,55,70,57],"goto":[40,17,18],newsiz:49,thirdli:[6,15],million:[43,36],seventh:36,argv:[81,16],mps_message_t:[0,82,89,35,25],california:30,lab:30,carl:30,org:[4,15],"byte":[52,56,57,18,61,63,66,67,68,69,70,1,74,83,58,76,6,79,28,81,31,32,45,12,33,84,88,15,49,91,36],argc:[81,16],sigxfsz:[16,93],boehm:[52,29,81,56,57,30,64,89,15,92],care:[83,53,81,17,58,34,25,40,33],reusabl:40,kaufmann:30,wai:[83,17,18,61,64,66,69,71,73,4,40,41,5,21,6,77,24,8,28,29,81,10,25,11,45,46,33,86,31,42,88,15,89,16,36,50,37],mps_word_shift:[50,18,87],badli:[66,88,69,11,8],prescrib:70,frequenc:[24,12],synchron:[0,29,55,56,57,30,69,58,70,12,83,71],mps_size_t:[91,74,84],refus:[6,28],recov:[29,46],turn:[41,52,62,35,1,25,45,16,70,79,32,56,13,34],tlb:69,place:[57,61,64,69,70,71,73,83,76,6,8,28,29,81,25,11,13,34,86,35,15,89,16,36,50,37],unwis:45,principl:[41,50,30],imposs:64,frequent:[52,20,36,17,29,22,15,23,24,16,73,34,28],first:[0,52,56,17,18,53,60,61,62,64,66,70,1,19,4,74,40,57,20,58,87,43,6,23,24,25,26,28,80,30,8,82,45,12,13,34,86,35,88,15,83,76,16,49,91,93,36,50,37],oper:[0,38,55,56,17,18,53,61,64,65,66,67,52,69,70,71,73,4,33,57,41,49,58,5,42,76,6,23,24,7,8,28,80,29,81,9,30,10,25,11,45,12,13,34,86,47,87,88,15,83,16,32,93,36,50],findlast:49,suspend:[41,6,93,34,42],written:[38,55,56,17,18,69,71,1,13,41,6,8,29,31,11,40,88,15,77,49,92,36,50],directli:[52,81,55,57,5,21,61,89,15,65,83,24,7,71,73,40,13,33,50],subrang:18,carri:[86,73,58,32,89,79,25],onc:[30,29,62,56,17,18,45,8,15,41,47,38,70,12,64,25,33,83,40,28,71],arrai:[53,54,36,35,57,18,93,6,25,81,15,34,67,70,12,64,8,56,33,62,22],resultreturn:16,bufferempti:6,supernam:40,acquisit:89,act_on_range_high:18,fast:[38,29,55,35,17,30,76,49,88,83,58,70,32,40,56,13,62,36,18,57],symmetri:18,xci3gc:[4,87],fromlimit:18,ring:[6,56,33],mps_arena:[82,28],open:[30,20,17,18,53,31,25,77,15,38,89,49,8,4,5,28,37],predefin:[36,50],size:[52,53,54,55,56,17,18,59,60,62,64,65,66,68,70,71,72,73,74,13,57,58,42,43,6,78,49,8,27,28,29,81,9,44,10,25,11,85,45,46,12,33,34,84,79,86,35,47,1,31,87,88,15,36,83,76,16,32,40,91,93,22,50,37],mps_build_sc:87,given:[41,29,54,55,1,58,59,31,61,49,82,81,64,66,45,12,25,40,13,36],unlink:69,capac:[0,29,35,43,22,27,36,61],pad1_:[16,36],fmt:[9,22,1,78,2,8,27,34],anderson:92,gen_param:35,necessarili:[56,33,69,36,16,40,13,28],draft:[45,6,50],yip:[61,30],circl:15,handbook:[92,11,30],white:[41,52,54,56,17,59,6,64,66,69,70,79,26,92,34,57],conveni:[0,29,81,18,10,6,32,31,15,41,66,49,25,40,36],chilimbi:30,mps_mv_size:74,mps_pool_create_v:80,mps_fmt_scan_t:[81,17,36,70,32,34],demer:[52,30],mps_res_io:10,especi:[29,55,17,59,73,64,45,69,71,49],resetrang:18,copi:[52,53,56,17,18,59,61,62,64,66,67,68,69,70,2,73,19,4,83,57,41,20,5,43,6,24,25,26,27,29,9,30,10,45,46,47,40,34,35,71,31,15,36,32,1,22,37],specifi:[0,38,56,18,53,1,64,52,2,73,74,6,77,78,8,27,80,29,81,9,10,25,45,46,12,22,13,34,79,35,89,49,91,36,37],ebi:30,blacklist:57,weak_array_t:8,enclos:[53,56,47],mostli:[17,18,61,62,47,39,2,19,4,20,43,6,25,27,29,9,30,10,11,45,46,22,33,35,15,16,32,70,36,37],floppi:[61,57],domin:29,holder:5,than:[0,52,55,56,17,18,53,59,60,61,62,64,66,67,69,39,71,73,40,57,41,5,43,6,49,8,28,29,81,10,25,11,45,46,12,91,33,34,79,86,35,47,1,31,88,15,83,76,16,32,70,93,36,50,37],serv:[76,6],wide:[29,55,35,76,22,62,15,24],amcfix:17,subexpress:83,kolodn:30,balanc:[61,58],mpsavm:[47,36,28],were:[83,53,55,56,18,62,66,69,39,2,13,87,43,22,25,29,81,45,12,40,34,86,35,15,49,93,36],posit:[80,81,86,58,18,25,47,34,32,33,36],server:[61,30,15],transport:[69,70],seri:[66,53,13,55,24],pre:4,analysi:[0,41,81,18,30,59,22,36,58,71,13,34],sai:[41,29,31,61,73,11,34,83,69,70,71,25,4,33],look:[0,53,56,17,18,60,13,71,40,6,24,25,30,10,8,11,83,34,86,77,16,32,50,37],obj_empti:[16,36],anywher:29,dash:25,"1992a":70,nickola:30,"1992c":[59,69],"20g":16,deliv:[15,21],ravenbrook:[38,4,90,5,92],fp_pattern:45,repack:30,sat:[13,16],buffercr:79,engin:[41,15],techniqu:[38,52,55,56,17,58,60,61,62,66,67,70,71,57,41,20,43,6,23,24,29,30,11,40,88,15,32],advic:[85,16,12,28],scanstat:[26,33],destroi:[80,29,81,55,35,18,59,79,82,15,36,83,76,70,12,64,1,13,34,28,71],note:[0,52,55,56,17,18,53,59,61,64,66,67,69,39,71,72,4,13,57,41,58,87,43,22,77,24,49,25,27,28,80,29,81,9,30,44,10,8,45,46,12,91,33,34,79,86,35,47,31,88,15,83,89,32,70,93,36,50,37],ideal:[9,43,61,11,64,71,40,17],take:[83,53,56,17,18,62,64,69,70,2,74,40,41,49,58,76,6,78,24,7,25,27,28,80,29,81,9,10,8,11,45,12,22,13,84,79,86,35,88,15,89,16,32,91,36,50,37],advis:[91,5,49],"0x000000010001287d":16,interior:[55,56,57,64,32],unfix:[51,32],noth:[41,35,42,33,1,67,50,25,13,36,28,37],wirf:30,begin:[41,53,56,18,21,10,79,88,64,47,45,66,69,70,50,60,4,83,28],sure:[29,54,45,16,70,32,36,50],tospac:[53,70,69,56,60],norman:[59,30],trace:[52,55,56,17,58,61,62,64,66,69,70,71,33,57,41,6,23,24,79,28,81,30,44,82,13,34,16,32,36],normal:[0,54,56,17,47,70,71,73,83,42,76,24,7,8,28,25,45,33,86,13,89,40,50],buffer:[83,9,18,31,6,69,64,67,58,70,79,91,33,93,13,57],friedman:[59,30],enter:[16,70,58,73],compress:[70,56],clearer:33,eclect:15,poollo:18,egc:[4,87],wire:[61,73],tract:[6,17,44],pair:[49,55,57,18,87,25,16,32,4,36],neatli:29,paulo:30,mps_alloc_pattern_ramp:46,spector:92,perceiv:[0,15],synonym:[56,57,18,15,70,73],proud:13,quantiti:[52,29,57,61,63,65,69,73],runtim:[30,17,15,36],pattern:[20,55,35,58,29,88,62,11,86,53,45,46,39,71,1,83,51],senior:92,mrg:[26,82],review:[30,17,18,36],mrb:59,uncontrol:[31,13],messageempti:82,mps_amc_appli:22,show:[29,43,6,24,16,25,13,40],mps_mvff_free_siz:91,maint:50,infant:[52,64,30],merit:45,concurr:[38,53,56,57,30,66,89,71,73,40],overlarg:12,permiss:[83,34,15],hack:18,threshold:6,obj_delet:[25,86,8],cbschangesizemethod:49,ground:71,slot:[53,40,83,8],onli:[38,52,54,55,56,57,18,59,60,61,62,64,65,66,68,69,39,71,73,13,41,49,5,21,76,6,77,78,24,7,8,27,28,80,29,81,9,10,25,82,45,46,12,33,34,79,86,47,1,31,42,88,15,36,83,89,16,32,40,70,93,22,50,37],slow:[0,29,17,62,69,15,45,16,70,12,28],slop:45,fenc:[45,53],pointer:[0,53,54,55,56,17,18,59,60,61,1,64,65,66,68,69,70,71,73,83,57,41,49,58,87,6,77,78,24,7,8,27,28,80,29,81,9,30,31,25,11,45,12,33,34,84,79,86,35,47,88,15,36,89,16,32,93,22,37],"0x7fff5fbfef2c":16,transact:30,activ:[41,29,55,56,58,42,6,61,15,53,68,70,64,62,36,28],behind:[41,13,56,2,25],z80:18,luc:30,black:[41,52,56,57,44,59,64,66,69,70,79,34],btfindshort:18,sigusr1:93,petrank:30,analys:35,wilei:30,overwritten:[59,24,16,71],moreau:30,nearli:[83,61,17,64,36],variou:[20,81,36,17,18,21,29,49,61,15,23,45,32,4,33,50],get:[0,56,17,18,60,67,70,73,4,83,41,43,22,8,28,29,10,25,82,45,12,40,85,35,88,16,32,36,50],genera:30,mung:50,clang:[38,4,16,87],secondari:[50,30],cannot:[0,54,55,56,18,64,65,66,68,69,70,71,33,41,58,6,24,49,25,27,28,29,10,8,11,45,46,47,40,88,83,89,32,36,50,37],murali:30,freestor:[53,65],eventrep:79,mps_io_writ:31,requir:[0,52,55,56,57,18,53,59,60,61,1,64,66,69,13,71,73,40,58,42,6,24,49,8,28,80,29,81,44,10,25,11,45,33,34,79,86,31,21,88,15,83,89,90,82,32,70,93,36,50,37],ssb:70,reveal:[16,58,25],discontigu:58,arenaclamp:6,seldom:67,borrow:45,yield:73,hash_t:[86,25],joker:13,tillotson:92,"0x7fff5fbfef28":16,roger:30,though:[17,18,61,89,15,68,16,50,73,34,28],scott:30,where:[83,53,54,55,56,17,18,60,61,62,64,67,69,13,71,73,4,40,49,58,21,6,48,24,7,8,28,29,81,82,25,11,45,12,33,34,86,35,47,42,88,16,32,70,93,36,50],summari:[41,6,79,17,49],kernel:71,ams_alloc:10,highest:[71,18],lasttractbas:6,mps_formatted_objects_stepper_t:[70,34],closurep:49,symtab_root:[36,25],zaphod:18,tape:57,lnc:30,concern:[41,29,59,61,11,69,16,71,49,36],infinit:61,checkl:7,detect:[55,58,62,64,66,71,1,83,77,8,28,29,81,44,25,11,45,12,40,89,16,49,36,50,37],"0x1003cb958":16,parent:[60,64,7,39,33,40],mps_sac_flush:12,mps_telemetry_filenam:[31,13],checkd:7,enumer:[33,70,49],"0x000000010007b14a":16,label:[13,69,47,51],hist:[41,18,21,6,42,82,45,7,79,49,26,3,40,50],palimpsest:73,enough:[58,29,88,36,57,18,53,76,10,49,11,34,16,12,31,13,62,33,28],between:[0,52,54,55,56,17,53,61,64,65,66,67,70,71,73,4,83,87,76,6,24,25,28,29,30,31,49,11,45,12,22,40,79,35,47,89,32,36,50],"import":[83,29,81,17,18,43,32,69,15,36,47,24,7,70,64,25,13,49,33,71],checku:7,across:[56,64,49,91,4,50],dybvig:[71,30],spars:[54,58,64,71,73,15],august:30,amort:49,mps_arena_extend:28,mps_build_:50,comp:15,tarditi:30,style:[40,79,17,15,18],cheap:[52,55,88],blame:29,cycl:[52,53,56,58,43,8,64,66,69,70,15,73,28],sparc:[4,18,87],spare:[53,44,6,11,70,28],inflex:[69,11],uncondition:89,shortag:[93,11],come:[36,18,6,49,11,61,15,34,67,55,64,8,13,4,28],caar:16,reaction:13,unrel:16,mono:15,region:[29,58,30,53,79,15,16,70,71,32,40],mps_var_df:50,contract:[6,5],retir:50,audienc:13,saguaro:56,coucaud:30,mani:[38,53,54,55,56,17,18,61,62,64,65,67,70,71,73,13,57,41,58,24,25,28,29,81,31,11,12,40,86,88,15,83,89,16,92,36,50,37],unstructur:9,mann:[6,92],bitset:[33,57],nettl:[71,30],bufferpool:10,undocu:[91,93],color:[52,56,57,59,64,66,69,70],overview:[38,20,85,41,18,21,82,6,42,11,23,45,44,49,3,40,36,50],inspir:15,period:[29,55,24,46,70,36,28],dispatch:[49,36,17,15,25],mps_class_mv_debug:[74,1],duti:15,exploit:[76,22,17],qin:30,anti:40,exclud:[31,4,57,18],sentinel:6,constant:[81,56,18,87,10,49,64,45,16,47,31,50,71],poll:[0,6,44,25],poli:40,damag:[61,5],ultim:6,clarif:50,coupl:[29,36],resort:25,invert:[64,18,15,73],feldt:92,invers:[52,18],fixabl:79,mark:[52,53,56,17,18,60,61,62,64,66,68,69,70,73,19,57,41,20,24,25,26,27,30,10,79,13,35,1,15,92,37],klauser:30,workshop:[30,87],sparecommitexceed:6,weak_table_:8,scannabl:[41,58,70,25,36,37],string_equalp:25,"0x0000000100002fe4":16,parser:36,mps_arena_spare_commit:[6,70,28],"000ae0397334e0a0":13,derefer:1,thousand:43,resolut:[31,13],andrew:[92,30],catastroph:70,mps_sac_class_limit:12,compactli:[67,70,57],ironpython:15,lectur:[13,30],former:[41,53,66,71,21],mps_arena_spare_commit_limit:[70,28],sound:[11,18],"char":[83,86,35,57,31,25,36,16,32,13,33],"0x000000010000261b":16,thesi:30,"0x000000010002686d":16,mps_align_t:[47,91,33,34,58],diagnost:4,poolfre:[33,79],epdlpoolclass:40,antoni:30,thisclasscoerc:40,wasmark:26,trick:36,cast:[53,59,31,47,69,32,33,40],invok:[29,56,58,18,49,45,89,7,32,40,13,34],mps_ap_alloc_pattern_end:[46,71],mps_pool_debug_option_:[45,1],"na\u00efv":[89,25],amcscan:16,invoc:[56,58,47,70,49,40],mps_message_gc_not_condemned_s:35,addroffset:33,findshortresetrangehigh:18,advantag:[29,57,42,76,88,11,64,45,70,71,25],stdout:31,metric:63,henc:[52,29,54,56,73,69,83,7,71,25,40,49,34,79],mps_scan_begin:[81,17,8,32,47,36,77,25,34],worri:[29,17,11,15,25,83],destin:[31,86,28],cluster:18,"0x1003f9b98":16,cobol:[11,15],eras:15,cbsiteratelarg:49,"0x7fff5fbff830":16,mps_ss:17,nearbi:[62,16,11],smalltalk:[52,53,55,30,11,15,71],sos9sc:87,develop:[38,18,69,4,5,21,43,6,7,27,28,30,44,10,11,45,40,85,15,49,50,37],"0x1003f9b58":16,alphabet:18,stepper:[81,10,22,67,70,34],lippgc:87,same:[83,53,54,55,56,17,18,61,62,47,66,67,68,39,71,73,13,57,41,58,42,76,22,77,78,49,8,26,27,28,29,81,30,10,25,45,46,12,33,34,84,86,35,31,87,89,32,40,91,36,50,37],check:[0,53,55,17,18,59,39,79,1,19,4,33,41,20,42,6,78,7,25,28,80,29,30,44,10,49,45,12,40,87,88,83,89,16,32,36],binari:[53,55,17,5,21,31,6,42,88,66,50,13,28,57],epoch:[31,6,33],mps_arena_class_t:[58,28],pad:[53,79,36,56,9,1,59,60,22,8,85,64,34,45,16,2,73,27,25,78],protsync:50,sos8gc:87,circularli:70,knuth:70,document:[38,17,18,59,61,47,69,39,3,4,74,33,41,5,21,6,7,79,26,28,80,29,30,44,10,82,45,46,40,42,15,83,49,70,93,50],ensuresomeclass:40,week:15,exhaust:[76,34],finish:[0,29,9,60,6,25,11,64,41,45,52,16,79,73,13,49,40,28,57],typesett:15,poolfix:17,nest:[46,56],assist:[70,13,16,69,64],driver:50,someon:[29,47],treadmil:[59,69,56,30],event_param:13,driven:[66,30],capabl:[83,13,70,71,15],mps_root_create_table_mask:81,mps_addr_pool:[80,28],improv:[55,18,62,67,71,4,43,22,24,31,27,29,9,30,10,8,45,35,88,15,76,90,91,50],extern:[53,54,55,56,57,18,64,70,71,73,41,24,79,28,29,44,11,82,40,88,89,49,91,50],postpon:[36,25],mps_fmt_skip_t:[70,34,36],tradition:66,appropri:[55,56,57,18,61,64,70,71,73,41,58,21,76,7,79,28,81,25,40,34,88,89,36,37],port_:[36,25],macro:[83,17,18,21,60,6,87,47,45,7,12,32,40,33,36,50,51],attrscan:33,justifi:[58,18,49],w3i6mv:[4,87],without:[0,38,54,55,17,18,53,59,61,64,66,52,70,71,4,40,5,6,24,27,28,80,29,81,9,30,10,49,11,45,46,12,33,34,85,35,47,15,83,89,32],evict:56,temptat:32,model:[52,30,15],branquart:[30,15],dereferenc:[33,83,15],commitlimit:6,table_rehash:[86,25],tobt:18,gdr:79,warranti:5,printezi:30,execut:[38,54,55,56,17,18,61,73,69,1,57,58,5,42,43,8,31,79,40,21,15,93],among:[29,15,45],unflush:13,rest:[93,34,36],halfwai:49,mps_build_lc:87,gdb:[13,16,28],doligez:[30,15,73],kill:29,tracequantum:16,aspect:[56,21,43,87,11,70,49,28],touch:[10,83,86,60],rankexact:33,speed:[29,56,18,76,11,15,70,12,32,13,83,37],mps_build_ll:87,concentr:[29,50,21],death:[52,76,30,25],autocad:52,miscellan:[29,31,23],issetrang:18,mmap:[59,61,71,50],except:[38,57,18,61,47,66,2,73,58,5,42,6,64,79,29,81,49,82,45,12,13,34,88,15,32,93,22,50,71],littl:[41,29,18,6,62,11,15,45,12,79,61,50],desktop:70,"0x1003cbe50":16,instrument:50,setenv:4,treatment:56,exercis:[16,69,30,18,49],notori:15,role:[53,36],doctorat:30,pitman:92,disrupt:30,splayfindfirst:49,nielsen:30,hypothesi:[52,22,64],read:[0,57,18,62,47,66,69,70,71,73,13,41,42,6,8,28,81,9,31,25,82,45,33,34,15,89,16,93],outermost:46,amc:[20,35,17,10,22,47,16,46,2,79,19,27,36,37],mop:45,mov:8,vivek:30,reassembl:32,sac_o:12,anchovi:49,insist:40,sobalvarro:[56,30,15],mod:50,intel:[55,57,87],distil:15,patrick:30,robson:30,integ:[53,81,36,57,18,87,31,8,34,66,68,7,70,58,25,13,33,86],shrink:[76,6,57,49],benefit:[41,29,53,6,45,70,8,40,61],weakest:71,either:[38,56,57,18,61,62,64,66,70,71,4,41,5,42,76,6,24,25,26,28,80,29,81,82,8,11,45,12,33,34,86,47,88,15,89,16,49,36,50],larchant:30,output:[10,31,47,16,70,49,4,13],downward:18,inter:[56,22,64,66,24,71,34],manag:[0,38,54,55,56,17,18,53,59,60,61,62,63,75,64,65,66,67,52,69,39,2,72,73,74,33,57,41,20,58,5,76,6,23,78,24,49,8,26,27,84,28,80,29,81,9,30,44,82,25,11,45,12,91,13,34,14,79,86,35,47,71,93,88,68,15,36,83,89,16,32,40,70,92,1,22,50,37],fulfil:6,arena_o:28,cbsfinish:49,minsiz:49,free_:79,poolawl:18,thermodynam:30,legitim:32,interlock:86,splayroot:49,journei:36,cruz:30,assert_mpsi:50,has_reservoir_permit:12,constitut:[36,18],resfail:[33,49],basic:[41,29,57,6,73,11,15,45,69,70,50,25,91,40,36,28,71],slice:[41,35],poolmv2:49,thereund:45,definit:[81,55,17,18,44,6,79,15,45,7,47,49,40,50],average_s:[91,74],moon:[92,30,15],pioneer:15,moor:[30,18,42],noop:50,"0x00000001003f9a58":16,mps_fix2:[53,81,17,8,32,36,77,25,34],mps_fix1:[53,81,17,8,32,36,77,25,34],virtualalloc:50,sus8gc:87,blocksiz:49,obj_pad:[34,36],immun:[56,64],compris:[6,71,18,42],power:[55,57,18,87,8,88,15,66,24,58,70,47,25,33],event_typ:13,sixth:36,garbag:[0,38,54,55,56,17,58,53,59,60,61,62,64,66,52,69,70,71,73,4,74,13,57,41,20,43,22,23,78,24,25,27,28,80,29,81,9,30,10,8,11,92,46,33,34,84,85,86,35,68,15,36,83,76,89,16,91,51,93,6,37],inspect:[18,64,16,3,34,28],indira:30,"0x00007fff9050ae2a":16,broken:[53,56,57,70,71,79,26],great:[55,62,17],fulli:[56,47,7,70,79,40],regexp:10,referr:64,s7m6mw:87,w3almv:87,src:50,central:[70,56],greatli:[29,4,69,88],mps_mvt_size:76,arena_class_vm:28,joyner:[61,30],drag:30,acm:30,arenafin:82,degre:[45,47],wolf:30,stand:[66,29,24],wold:1,act:[41,61,79,56,73],johnston:[53,54,30,66,69,70,91,92],luck:[10,83,17],processor:[38,55,56,17,58,61,62,47,65,66,68,69,70,71,73,83,57,87,8,81,31,64,13,15,50],mps_message_type_en:[0,89,25],"001b":13,routin:[53,29,82,45],effici:[52,38,17,18,61,62,64,66,68,69,39,71,74,83,57,41,58,76,6,24,8,27,28,29,81,9,30,11,45,91,22,33,88,49,70,36],"001a":13,shaw:30,"00000001003fd000":13,wordindex:18,terminolog:[86,61,66,70,73,40,51],surviv:[41,52,55,35,17,58,61,11,15,68,73,36],vigil:17,fence_templ:1,btrangessam:18,artur:30,nikla:30,your:[38,54,17,67,13,4,83,43,31,28,29,81,10,25,46,33,85,89,16,32,36,37],stare:8,fmtdy:17,certainli:29,log:[33,31,4,13,49],unflip:82,area:[41,29,55,56,57,58,53,60,61,62,11,64,65,70,49,28],aren:[38,17,5,25,33,93,83,18],mps_class_snc:78,poolclassmrg:82,overwrit:[53,55,57,18,29,59,61,45,68,16,70,58,1,83],checkabl:6,strip:32,start:[0,53,54,56,17,18,64,69,39,71,4,74,13,57,41,58,6,78,24,25,28,81,32,46,47,40,79,35,88,15,16,49,70,37,93,36,51],mps_os_li:87,"00000001003fd328":13,interfac:[0,38,55,17,18,53,59,60,82,64,67,52,69,2,3,19,74,33,57,20,58,42,76,6,7,8,26,27,28,29,81,9,30,44,10,49,11,45,12,13,48,84,79,86,47,71,31,87,88,15,36,83,89,32,40,91,93,22,50,51],low:[41,29,35,18,44,59,31,8,15,66,45,32,70,73,91,13,87,49,34,28],lot:[41,29,86,35,17,6,49,11,15,45,24,73],resum:93,strictli:[52,50,18,57],obj_skip:[16,34,36],repetit:[11,32],enorm:[45,92],longword:[55,62],morrison:30,programmat:3,conclud:29,tomasev:30,regard:[24,55,56,61],alain:[30,15],aslr:16,amongst:86,allegro:15,procedur:[56,58,44,25,15,89,70,71,32,36,50,37],obj_t:[83,81,86,8,25,77,16,32,13,36],illus:[0,61,70],trickier:36,untag:8,faster:[0,29,61,11,15,52,70,12,32,33,83],notat:18,amcscannailedonc:16,table_ref:[86,25],dirti:[55,56],sbrk:[59,70,57],possibl:[38,52,54,55,17,18,61,62,64,70,71,33,57,41,49,58,5,42,76,24,7,25,28,29,81,10,8,45,12,40,34,79,86,15,83,16,32,36,50,37],"default":[0,10,31,32,36,16,25,40,4,13,50],"__mode":15,poolalloc:[33,79],nearest:70,unusu:[61,28,15],manuel:30,embed:[30,21,31,49,15,64,32,36],deadlock:[6,62,89,42],powerless:38,pool_superclass:40,gone:28,addradd:33,creat:[0,38,56,18,53,59,60,61,1,47,66,69,70,2,73,74,13,41,76,6,77,78,8,27,28,80,29,81,9,25,82,45,12,22,40,34,84,85,86,35,71,15,83,89,49,91,93,36,50,51],conundrum:36,pseudo:17,deep:7,strongli:[52,30,73,15,66,70,71,25,91],intro:[41,18,21,6,45,49,3,40,33,50],decreas:[29,88,57,71],file:[53,17,61,47,65,70,71,3,4,5,21,24,25,28,29,44,31,13,15,89,16,36,50],type_str:[16,25],ecoop98:30,proport:[52,29,35,17,43,61,49,65,24,32,36],eliot:[92,30],tv_sec:31,fill:[83,81,18,31,6,62,36,45,79,73,91,33,34,61],hit:[41,57,61,62,65,16,71,73,93],again:[41,52,86,57,18,53,31,61,73,11,89,83,45,24,25,40,36],beyond:[81,17,15,28,4,34,50],fput:[29,36,31],"0x1003f9ba8":16,hybrid:[52,61,49,58,44],reduct:[41,30],idiom:70,"0x00000001003fb000":16,valid:[53,56,58,61,65,71,18,6,7,79,28,80,81,8,25,11,45,83,35,16,49,50],compet:[64,28],copyright:5,epdldebugpoolclassstruct:40,you:[0,38,17,53,59,47,66,52,39,71,4,13,41,5,43,22,77,90,78,24,49,25,27,28,80,29,81,9,10,8,11,45,46,12,91,33,34,86,35,31,83,89,16,32,70,93,36,50,37],zvi:30,coerceclass:40,freestand:31,fork:56,discours:56,btre:18,genuin:[29,36,32],sigmod:30,config_var_df:50,sequenc:[81,56,18,88,6,1,69,16,39,32,40,33,34],symbol:[83,81,18,30,31,85,15,16,47,25,13,36,50,51],gnumak:4,lueh:30,wirth:15,mps_class_mvt:76,briefli:[88,24,11,17],cbsfindlargest:49,peak:[17,28,36],nrevers:30,pool:[38,52,55,56,17,18,53,59,61,1,64,67,39,2,73,19,4,74,33,57,41,20,58,5,87,43,22,77,48,78,49,90,8,26,27,28,80,81,9,30,44,10,25,82,85,45,12,91,13,34,84,79,35,47,36,83,76,89,16,32,40,70,51,93,6,37],reduc:[41,29,55,56,17,30,59,88,6,62,82,64,52,24,50,32,65,28,71],bulk:62,"0x1003f9b48":16,symbol_pool:13,directori:[4,50],readership:[18,44,6,21,45,49,40],descript:[0,79,36,18,10,32,81,15,34,83,86,70,64,73,13,93,33,71],unseg:70,contraven:40,tricki:[33,32],inevit:18,mimic:1,mass:61,potenti:[52,81,17,18,42,31,24,58,36],appl:[13,16,30,15,65],mps_chain_destroi:[35,36],degrad:[29,9,49],cpu:[52,29,55,87,61,62,11,4,28],scm:[43,16],represent:[52,53,86,17,30,60,6,64,66,67,68,69,70,28,49,61,18,71],all:[0,38,54,55,56,17,18,53,60,61,62,64,65,66,52,69,39,71,73,4,33,57,41,49,58,5,42,43,6,77,24,7,8,26,28,80,29,81,10,25,11,45,46,12,91,13,34,84,79,86,35,47,1,87,15,36,83,76,89,16,82,32,40,70,93,22,50,37],caleb:30,consider:[29,17,30,53,61,3,48,50],illustr:[69,17,28,36],lack:[31,61,15],ala:18,scalar:[67,62,70,34,58],extrapol:36,attrincr_wb:33,abil:[41,57,11,15,45,50],ptw:45,follow:[0,56,18,61,64,69,39,71,40,41,5,21,6,90,24,49,25,29,81,10,8,11,46,12,22,33,34,79,47,42,88,15,83,13,16,32,70,36],disk:[29,57,30,61,62,65,67,70,71,73],ruinou:43,resok:[33,40,18,79],abid:6,mps_ap_alloc_pattern_reset:46,accesswrit:33,ron:30,tracefix:[6,13,79],codasyl:15,mps_message_gc_condemned_s:35,cbsdelet:49,program:[0,38,55,56,17,58,53,59,61,62,64,65,66,67,52,69,39,71,73,3,4,83,57,5,21,43,22,77,24,8,27,28,80,29,81,30,10,25,11,46,12,13,34,86,35,47,1,31,88,68,15,76,89,16,32,70,93,36,50,37],those:[53,55,56,17,18,60,62,64,69,70,71,73,83,57,41,42,6,7,31,28,29,10,79,45,13,88,77,36],"10992f000":13,segclass:40,swallow:73,neglig:5,introduc:[41,29,81,60,6,11,64,70,15,71],xiaohan:30,attrbuf:33,straightforward:[50,25],replic:[67,61,71,30,73],far:[41,29,17,18,42,59,11,64,16,25,33,36,28],mps_shift_t:33,mpm:[41,33,17,18,79],fat:50,util:[13,51,15,49],mpw:50,mps_class_amc:[22,36],verb:[61,18],mechan:[0,52,54,55,56,57,58,53,59,60,61,62,64,66,69,70,71,73,83,20,42,6,25,28,80,44,45,40,38,21,15,89,49,93],quantifi:30,veri:[38,53,17,18,60,61,62,64,69,39,71,73,83,57,41,58,43,6,24,8,29,81,44,10,25,11,12,91,40,84,88,15,76,82,49,70,36,50],rebuild:13,gmake:4,distant:[29,16],"0x0000000100005ff5":16,lisp:[52,29,56,58,30,61,11,64,65,66,67,69,70,15,13],rescommit_limit:[6,33],list:[0,52,54,55,56,57,18,53,61,67,69,70,71,83,5,42,24,90,8,28,80,29,30,10,45,12,13,48,87,88,15,16,49,91,36,50,51],mps_free:[38,80,9,84,76,22,83,78,12,8,91,27,74,34,61,37],arenapark:6,emul:[38,8],reset_mask:13,adjust:[55,59,62,64,45,24,69,70,79],mps_lib_get_stderr:31,stderr:[29,16,32,36,31],small:[38,52,54,56,17,18,60,61,62,64,69,70,71,19,41,20,58,43,6,24,28,29,9,32,11,45,12,83,84,35,88,15,49,36],tear:[31,36],kemeni:15,compareless:33,lockreleaserecurs:42,synergi:45,inherit_class:40,tupl:58,ref_io:32,computation:67,ten:[43,53,13,69,56],ensuredebugclass:45,addrset:33,pun:[51,69,36,47,32],past:[38,29,56,17,18,34,66,36,37],rate:[30,6,62,15,65,66,69,70,61],pressur:71,design:[38,52,17,18,53,61,62,79,1,3,40,41,20,58,21,6,24,7,25,26,28,29,30,44,31,8,11,45,49,33,42,15,83,89,90,82,32,93,36,50,37],pass:[0,53,56,17,18,61,64,65,66,68,70,79,1,13,57,41,22,31,26,28,80,81,9,30,10,49,11,45,12,40,34,86,35,33,15,83,77,16,32,91,93,36,50,37],further:[0,29,81,86,56,17,6,68,83,24,32,13,34,28],suboptim:[35,36],mps_chain_creat:[35,36],mps_arena_class_vm:[36,28],cursor:17,what:[0,38,56,17,18,53,71,33,41,58,43,6,48,24,8,28,29,81,10,79,11,45,12,40,34,85,35,88,83,16,32,93,36,50],stood:29,sub:[40,57,18,49],richard:[30,18,21,6,42,82,45,7,79,49,26,3,33,92,50],clock:[0,56,31,6,16,70,25],diag:50,sum:[53,81,58,76,61,88,66,91,74,34,28],mps_pool_class_mv_debug:45,abl:[53,81,56,18,21,71,42,11,68,15,36,45,24,16,64,49,93,34,28,37],overload:70,"0x000000010002b399":16,delet:[0,29,55,8,77,15,66,24,49,70,25,13,33,38],abbrevi:[70,62,63,25],version:[0,17,18,47,39,3,74,13,41,20,58,42,6,78,25,27,87,28,29,81,44,49,45,91,33,34,86,21,15,83,16,32,70,93,36,50],regnesentr:30,intersect:49,consecut:[76,53,58],mps_build_mw:87,mps_build_mv:[50,87],runfinalizersonexit:89,"public":[52,53,54,55,56,57,58,59,60,61,62,64,66,67,68,69,70,71,73,4,29,10,47,83,15],contrast:[54,70,61,28,73],sizeisalign:10,millisecond:28,hasn:[52,13],full:[29,16,18,53,46,87,69,15,65,89,7,12,25,13,36,28],themselv:[29,55,18,66,89,33,40],berkelei:[30,5],variat:[88,24,70,61,71],sanctifi:33,sophist:[76,24,50],client_is_wait:28,behaviour:[83,42,10,6,44,47,67,45,89,49,32,40,13],modular:[10,61,45,15,29],shouldn:[41,17,36],procur:5,box:[56,57,64,66,68,71],omiss:50,solari:[4,87],excess:15,free_siz:1,method:[83,53,55,56,17,59,64,70,2,73,4,40,57,41,21,6,77,78,49,25,26,27,81,9,30,44,10,8,85,45,47,22,33,34,79,35,71,15,89,16,32,51,36,50,37],standard:[80,29,83,30,21,31,6,32,63,61,15,47,50,24,69,64,25,40,4,13,28],modifi:[53,35,18,21,6,15,45,24,70,64,56,61],pointeradd:33,valu:[0,53,54,55,56,17,18,61,62,64,66,67,68,69,70,71,73,13,57,49,58,87,6,24,7,8,26,28,29,81,10,25,12,33,34,79,86,47,1,31,15,83,77,16,32,40,91,36],arena:[0,38,56,17,18,71,61,1,47,67,68,70,2,73,74,13,41,20,58,43,6,78,8,27,28,80,81,9,44,10,25,82,45,12,22,33,34,84,85,86,35,76,89,16,49,40,91,93,36,51],search:[53,18,30,60,88,24,70,49,13,57],ahead:56,garwick:30,fwd:[36,34,25],fstruct:36,removeadjacentrang:49,mac:[4,30,65],prior:[0,13,86,15,49],amount:[41,29,55,35,17,18,43,6,88,64,76,24,70,50,8,91,33,74,36,28,71],calder:30,pick:[40,68,30,25],action:[41,29,55,53,79,66,45,89,39,71,25,70,33,83,28],pauillac:42,mps_addr_fmt:[34,28],magnitud:[67,61,62,70],via:[83,61,1,47,69,71,73,74,13,5,76,6,78,7,8,27,28,80,29,81,9,10,79,11,12,22,40,84,86,31,15,82,49,91,93,36],depart:30,declin:46,primit:[29,24,56,64,15],transit:41,"0x1003fb130":16,reservoirpermit:40,readili:[31,24],filenam:13,mps_telemetry_get:13,inappropri:24,mps_io_destroi:31,heurist:[59,56,15,73],demonstr:13,gratuit:18,decrement:[66,24,62,71],coercion:40,dangl:[41,61,55,11,1],select:[41,18,30,10,6,65,67,71,73,13,50,57],gudeman:[66,68,69,57,30],hexadecim:13,sparecommit:6,"0x1003cb970":16,distinct:[53,57,21,59,87,11,64,67,70,17],findlongresetrangehigh:18,etc:[57,59,61,11,90,70,4,13,50],regist:[38,53,56,17,58,61,62,64,66,69,70,71,74,13,76,22,77,78,25,27,28,81,9,8,32,82,33,84,79,15,83,89,49,91,37,93,36,51],two:[0,53,54,55,56,57,18,61,1,64,66,67,69,70,2,73,4,33,41,58,21,22,24,49,8,27,28,29,81,30,10,25,11,45,46,12,13,84,79,86,35,47,31,42,88,15,36,83,16,32,91,6,50,71],coverag:18,workstat:[64,15],rhel:38,azaguri:[56,30],taken:[35,6,11,69,24,7,70,25,33,28],zorn:[29,56,57,30,15,92],minor:0,more:[0,38,56,17,18,53,59,60,61,62,64,66,67,52,69,39,2,73,4,33,57,41,58,5,42,76,22,77,23,24,8,28,80,29,81,30,10,25,11,45,46,12,91,13,34,86,47,31,68,15,36,83,89,16,49,40,70,93,6,50,71],mps_reserv:[10,47,36,45,16,71,25,83,34],flat:[17,15],mellon:30,desir:[29,70,57,45],mps_alloc_dbg_v:45,hundr:[43,69,56],brisl:[49,18,21],mps_sac_creat:[70,12],flag:[24,55,82],stick:62,particular:[0,52,56,17,18,53,59,61,62,64,69,70,71,73,83,58,5,42,76,6,24,25,28,29,49,45,46,47,13,34,79,86,15,32,92,22,50],known:[38,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,52,69,70,71,73,33,5,76,6,75,24,25,29,79,11,47,40,86,88,68,15,83,89,93,36],beown:42,cach:[55,56,17,18,61,62,65,66,69,70,71,74,20,58,76,6,78,24,8,27,80,9,30,44,11,12,84,91,37,22,51],canterburi:30,none:[41,86,18,10,6,83,50,8,40,13,34,28,37],mps_class_mvff:91,methodolog:30,operator_:36,damien:30,outlin:49,dev:[4,71],histori:[41,20,30,18,21,6,42,82,61,15,45,44,7,79,49,26,3,13,40,50],rootstruct:33,remain:[41,53,79,56,9,88,73,69,89,36,66,24,49,70,50,25,13,83,33,28],den:[66,29,69,30],learn:[38,29,15],abandon:64,motiv:[58,15],btfindresrangehigh:18,dee:55,def:[6,50,33,18,49],stubborn:16,omit:[7,16],rootvar:33,bogu:26,useabl:6,scan:[38,52,54,55,56,17,18,53,71,62,64,67,69,70,2,73,74,13,57,41,20,58,43,22,77,48,78,24,8,27,28,81,9,30,44,10,25,85,45,47,33,34,84,79,88,83,76,89,16,32,91,51,93,36,37],rodriguez:30,registr:[56,25,51,93,73],share:[56,59,61,67,69,70,4,13,42,6,24,25,28,29,30,11,45,40,15,16,32,93],accept:[35,61,79,36,69,12,32,56,40,34,50,37],pessim:76,prehistori:6,unreli:[29,11],"0x0000000100001947":16,partner:15,phrase:67,struggl:16,strlen:25,resmemori:[33,49],condemn:[0,41,35,17,44,79,69,64,66,53,52,16,70,25,26,56],uncheck:7,huge:[29,62,70,65],cours:[52,31,6,36,83,34,28],untru:50,awkward:8,divid:[52,53,54,56,57,18,31,61,88,11,66,69,24,58,70,33,36],rather:[41,29,55,56,18,53,59,10,6,62,15,47,76,52,16,64,13,83,36],anoth:[0,52,54,56,57,18,53,59,64,65,69,70,71,73,33,41,24,8,28,80,29,81,25,32,11,46,12,40,86,35,47,88,15,83,89,16,49,93,36],comfort:43,nwper96:30,commonli:[41,53,55,57,58,10,61,62,65,66,67,70,73],rapport:30,narrowli:52,daconta:[30,15],heck:30,compactifi:[56,30],aaron:33,reject:[29,32],strong:[41,17,18,64,66,89,69,70,15,25,71],simpl:[56,17,18,69,70,71,4,57,58,42,76,24,25,30,31,8,84,88,15,16,32,37,36,50,2],mps_fmt_create_auto_head:34,pieper:[92,30],survivor:[22,35],arenaseri:6,resourc:[0,53,58,59,61,64,65,69,39,79,4,33,76,31,28,29,10,25,11,40,34,89,49,50],referenc:[52,53,55,56,58,60,61,62,67,70,73,83,22,78,24,7,8,27,9,33,89,16,36],algebra:[67,70,58],mps_fmt_copy_t:34,variant:[9,60,22,8,15,36,78,70,71,32,27,34,37],reflect:[57,30],okai:[26,33],type_t:[83,86,36,25],sos8gp:87,rovner:30,varianc:34,associ:[0,29,79,86,83,58,42,6,49,89,15,66,68,69,12,64,25,13,61,50],unreserv:79,cmpf:25,circumst:[80,86,56,59,61,89,24,49,36,28],"short":[41,79,62,17,18,43,49,67,70,12,73,33,71],confus:[33,70,36,58],mpseventtxt:13,ambigu:[54,56,17,58,61,68,70,71,73,83,41,6,78,8,26,27,28,81,30,25,22,33,89,32,37,36,51],caus:[53,17,59,60,61,1,64,67,69,70,71,73,57,41,5,76,6,24,25,28,80,29,30,10,11,46,12,89,16,49,91,36,51],callback:[49,44],chiefli:52,leroi:[30,73],issubclasspoli:40,began:13,target_check_deep:7,rotat:60,reservoir:[45,13],root_o:81,soon:[41,81,55,56,17,73,89,64,36,24,32,4,34,28],mps_lib_memset:[31,33],reachabl:[52,53,56,57,58,61,62,64,66,68,69,70,71,73,22,78,24,8,27,28,29,81,9,30,25,11,83,79,15,89,32,36],cook:30,scientist:15,through:[41,54,40,17,18,6,79,15,36,66,45,89,12,64,49,26,13,33],cbsalign:49,word_act:18,hierarchi:[56,61,62,65,66,70,71,73,40],coerceinst:40,exponenti:52,suffer:[29,62,53],kistruck:92,tracescansegr:16,paramet:[83,56,17,18,59,64,13,79,40,76,22,78,31,27,81,9,44,10,8,45,12,33,34,47,15,49,91,93,36,50],"0x1003f9b70":16,typedef:[83,86,35,18,1,6,8,69,47,36,49,12,25,40,34,50],make_bucket:25,special_:36,fri4gc:87,mps_pool_class_epdr_debug:45,late:[80,61,25],harmless:[45,46],classofpoli:40,pend:[79,18,49],rapidli:[43,15],exchang:90,stephen:[92,30],tractstruct:6,might:[52,53,55,56,17,18,59,60,61,64,66,67,13,71,73,40,41,43,77,24,49,31,28,80,29,81,25,10,8,45,12,33,34,86,35,47,88,83,89,16,32,70,93,36,50,37],alter:[39,50],hyperspec:[56,15],finer:71,wouldn:[24,11,25],good:[38,41,81,17,5,57,43,31,62,88,89,83,52,70,13,36,28,18],"return":[0,38,56,17,18,53,61,82,64,69,39,2,74,13,49,58,42,43,6,77,78,24,7,25,27,28,80,29,81,9,10,8,11,46,12,91,33,34,84,79,86,35,47,31,88,36,83,76,89,16,32,40,70,93,22,71],amelior:45,mps_ap_t:[58,8,78,46,39,25,83,36],timestamp:13,pollut:41,entry_interpret:16,inria:[30,42],symbol_t:83,framework:[41,20,30,15,44],swizzl:30,mps_rank_ambig:[81,70,36,58,71],arenaalloc:6,compound:[29,50],abi:87,arbitr:61,detach:79,complain:45,bigger:[43,56,34,18],feet:28,eventu:[0,41,11,15,45],redesign:15,weak_buckets_ap:25,osarct:[4,87],datastructur:[6,18,49],refresh:[55,70,49],mysteri:[29,55,15],easili:[38,86,58,5,62,15,45,24,33],achiev:[81,55,76,6,64,24,70,61],ecru:[59,54],tracescan:79,type_pad:[16,36],"12th":30,found:[17,18,73,70,1,13,57,43,79,80,29,81,25,11,45,12,83,34,86,49,91,36],difficult:[29,55,58,53,61,89,15,24,16],out:[38,53,55,56,17,18,59,60,61,62,64,65,67,69,39,79,73,13,41,58,5,6,49,8,26,28,29,10,25,11,45,12,33,34,86,35,47,1,15,83,89,16,32,70,36],mps_telemetry_label:13,clamp:[6,56,68,28,73],interleav:[38,53,61,56,2],weight:[55,18,30,66,24,71,57],"0x0000000100074106":16,arenaread:82,lua:15,hard:[41,29,81,57,61,11,24,16,70,71,83,36],idea:[41,56,44,15,45,89,70,25,13,40],ifip:30,realli:[41,29,80,53,6,45,32],heavi:29,linkag:50,cbsfinddeletelow:49,expect:[52,58,62,73,41,18,21,43,79,28,29,81,46,12,33,34,35,42,15,76,16,36],mps_stack_scan_ambig:[83,81,36,71],longjmp:34,operation:66,thing:[29,86,17,30,82,6,50,11,45,89,7,12,40,33,36,28,71],todo:25,event:[0,29,36,5,44,10,31,49,11,34,86,69,89,16,79,25,4,13,28,51],"0x00000001003f9c90":16,ftp:4,mps_sac_alloc:12,safeti:[51,93,86,42],uncollect:24,robert:30,mnemon:[33,62,70],publish:[52,90],research:[11,30,15],handl:[0,54,17,61,47,65,66,39,71,73,83,41,42,77,78,8,81,31,25,11,45,12,33,34,15,89,16,32,70,93,50,51],bibop:[71,17,15,57],resparam:33,mps_arena_cr:[6,36,28],fmt_ah:34,arenareleas:6,cbsiteratemethod:49,benjamin:[29,92,30],difficulti:[0,73],qualifi:[62,15],mps_lib_get_eof:31,proxi:53,uncommit:28,advanc:[20,85,57,30,29,60,8,11,15,25],mmu:[67,61,73],guess:16,pair_:[16,36,32],controlpoolstruct:6,wakel:30,mps_ap_creat:[83,9,76,22,8,78,25,91,27,36],reason:[17,58,64,70,71,73,83,18,5,6,49,79,28,29,81,10,8,33,34,31,88,15,89,32,91,37],base:[55,17,18,62,64,65,32,70,71,4,13,57,41,58,87,6,78,8,27,28,81,9,30,25,69,47,40,34,79,86,15,36,77,16,49,91,22,50,37],isymtab:36,believ:[55,69],suddenli:13,ask:[41,20,36,56,29,82,15,23,12,80,34,28,37],classnamestruct:40,canon:40,earliest:15,mps_alloc:[80,9,84,78,71,10,22,8,47,36,83,45,76,12,73,91,27,74,34,61,37],lag:30,basi:[41,24,18],mps_label_t:[13,47],director:92,kept:[41,88,55,56,42,10,25,82,77,24,49,71,32,36,50],mpsc:47,thread:[38,56,17,58,61,62,66,69,71,33,57,41,20,42,6,28,29,81,9,30,12,40,34,85,86,83,16,93,36,51],mpsa:47,worth:[29,70],vararg:45,"_mps_fix2":17,mpsi:[10,16],mymp:4,perhap:[41,18,10,61,16,25,28],perman:[71,64],cbsstruct:49,lifetim:[52,54,55,17,30,59,60,22,62,11,15,65,76,70,64,25,36,61,71],entry_string_append:16,hasseg:6,simultan:[38,29,25,56,73],major:[41,29,55,56,5,22,88,15,45,52,61,28],dont:16,obviou:[45,6,33,18],upper:[76,47,50],feel:[45,36],articl:36,number:[0,52,55,56,17,18,53,59,61,62,66,67,68,69,70,2,73,4,13,57,58,42,43,6,25,27,28,29,81,9,30,10,49,82,12,33,79,35,31,88,15,76,16,32,40,36,50,71],placehold:36,globals_scan:36,mps_res_fail:[10,89,46,32],pop:[55,58,78,70,39,84],mps_message_typ:0,done:[0,52,56,57,61,70,73,4,41,25,28,29,31,82,45,13,86,35,15,16,49,36,50],uninterest:[17,49],stdlib:29,stabl:[76,30],implementor:[52,40],miss:[41,55,30,6,69,64,65,66,16,70,61],"000ae03973352375":13,fanci:45,gpl:5,differ:[38,54,17,18,61,64,66,67,69,70,3,4,57,41,5,43,6,25,28,29,30,10,49,11,45,12,33,34,86,35,47,88,76,16,32,91,36,50,37],fuller:11,script:[4,15],mps_t_ulongest:87,gpf:52,luiz:15,least:[0,53,56,17,18,60,61,47,66,69,70,73,83,58,6,79,28,29,49,45,12,13,84,86,35,32,36],mps_message_queue_typ:[0,61,25],checkpoint:21,paint:64,stori:[6,36],reclam:[66,89,30],statement:[83,47],relink:69,aver:[45,82,49],scheme:[0,52,56,57,58,64,66,70,71,43,25,81,30,11,13,85,86,15,89,16,32,36,51],supernamestruct:40,store:[0,38,54,55,56,17,18,53,59,61,62,64,65,66,67,69,70,71,73,33,57,41,58,42,6,24,25,28,29,81,30,82,49,11,45,12,40,34,84,47,88,15,83,89,32,93,36,37],eql:67,lii3gc:[4,87],alleg:32,assign:[83,29,58,18,61,88,15,66,69,12,33,13],parc:30,option:[1,6,49,45,70,79,27,91,13,74,36,28],table_delet:25,mps_thread_reg:[81,69,93,36],"0x7":32,similarli:[32,12,18,25],park:[80,81,56,6,68,73,22,28],pari:30,illeg:[79,39,1],part:[52,53,55,56,17,18,61,62,47,66,67,68,69,70,71,73,33,57,41,58,5,6,24,8,28,29,81,10,79,11,45,40,1,31,88,15,83,16,49,92,36,50],"0x1003fe820":16,mps_lib_fil:[31,49],fall:[52,86,30,76,10,15,24,12,33,71],mps_message_pol:[0,61],ncc:30,std:18,kind:[0,53,56,17,47,59,10,61,32,15,66,45,16,70,50,73,60,36,28,37],grep:13,doubli:[55,8,66,69,70,25,83,51],mipspro:87,cyclic:[38,29,55,56,30,15,71],remot:[22,78,71,8,27,37],remov:[0,41,79,55,6,73,81,15,36,45,24,49,70,47,32,34,50,71],dant:30,prot_bar:50,niklau:15,ringstruct:33,reus:[41,80,55,76,88,6,11,15,24,16,70,71,40],architect:92,sigcheck:10,arrang:[38,41,57,53,79,17],stale:[38,86,56,6,73,25,26,28,51],unalign:[81,57,58,61,68,79,91,83],typic:[52,53,54,55,56,57,18,59,61,62,64,66,67,68,69,39,71,73,13,41,58,5,87,76,6,24,8,28,29,81,10,79,11,12,40,34,86,47,31,88,15,83,49,70,36],grei:[41,52,79,44],randomli:11,cleaner:[52,11],comput:[41,29,86,56,57,30,6,25,11,15,24,16,70,71,73,61],"0b00":17,deleg:32,grarup:30,packag:[4,55,71,15],overran:16,perri:30,succeed:[10,33,36],dedic:[93,15],"null":[29,81,86,6,8,47,36,45,77,16,70,79,25,83,49,34],commonplac:57,imagin:[45,13],wilson:[52,29,54,56,57,30,53,60,62,11,64,66,58,70,88],xref:41,brad:30,relationship:[45,40,7,15,67],thingcheck:7,mps_ld_:[33,86,25],ancillari:29,odd:56,lin:30,violat:[52,57,10,61,73,64,66,89,70,71,49,33],mps_res_param:[10,12],align_up:36,accessor:[40,49],count_max:18,build:[38,20,85,56,17,44,46,15,36,67,16,70,4,13,50],mps_fix:[34,32],"00000001003ff000":13,analogu:69,brace:40,ecmascript:15,splai:[45,49,44],mktemp:13,pipelin:70,distribut:[38,52,55,35,5,30,43,62,15,66,24,64,71],alignof:36,unsur:[68,58],kai:30,previou:[60,53,17,42,10,79,88,89,16,70,73,13],reach:[0,53,55,56,61,73,11,24,49,71,25,33],mixtur:[53,8,32,47,15,25],backtrac:[10,16],crash:[89,11,28],most:[38,52,56,17,18,60,61,62,47,65,66,69,70,71,73,4,83,57,41,58,43,6,24,7,8,28,29,81,10,25,11,46,12,22,33,86,31,88,15,89,16,32,92,93,36,37],plai:30,buckets_skip:25,plan:[30,37],moss:[92,30,73],alpha:[4,72,87],splat:[8,25,77,66,89,70,1],getrusag:31,appear:[38,29,86,56,57,82,61,73,69,64,16,47,25,40,13,49,36,50],bug:[38,29,55,53,10,31,88,11,15,16,64,73,13,83,28],filesystem:50,weak_table_t:8,reg_scan:81,cover:[41,81,62,11,47,70,32,83,36,28],recherch:30,destruct:[29,79],dimension:[70,15],quadword:[55,72],ext:50,getter:6,abnorm:[13,11],clean:[40,55,15,73],mpscawl:8,addr_io:45,blend:15,microsoft:[38,4,50,15,87],iwooo:30,think:[83,81,15,45,24,12,33,13],"0x000000010000d75f":16,summer:30,"0x0000000100005e30":16,pooltriv:79,xcode:4,memorandum:30,eq_hash:[86,25],faq:[29,15],session:[28,25],particularli:[29,55,56,18,11,64,68,69,73,40],cdr:[16,36,32],fine:[61,16,89],find:[0,38,55,56,17,18,53,59,62,52,69,70,71,4,13,57,41,6,24,49,25,28,29,81,30,8,45,40,48,86,35,88,32,36,37],leewai:32,impact:50,buckets_fmt_:25,dosser:30,coerc:40,pretti:17,writer:15,solut:[29,54,44,6,49,11,15,45,24,73,4,36],"0x0000000100008ca2":16,peculiar:71,ambig:41,rangessam:18,tag_mask:81,templat:[45,1],factor:[29,61,69],unobtrus:[29,30],iec:[31,47,30],pooldebugmixinstruct:45,writef:33,boulder:30,remedi:73,poolamc:16,unus:[29,56,57,18,58,61,88,16,70,28,1,34,50],behavior:[29,56,30,11,15,70],"__file__":45,express:[30,16,83,18,5,58,61,32,88,15,47,7,64,25,40,4,87,33,50],cheaper:[59,29,61,57,53],allen:30,nativ:[71,87],mainten:[40,50,49],fastest:[70,83,56,32],liabl:[13,5],cgi:15,cbsfindfirst:49,him:29,obligatori:40,morgan:30,napier88:30,whenev:[81,86,18,21,59,15,66,24,7,33,36],someclassstruct:40,synthes:30,"0x1003f9b68":16,"0x100001b80":16,mps_build_gp:87,common:[53,54,55,56,57,58,60,61,62,64,66,69,70,73,83,6,23,24,29,10,49,11,40,34,88,15,77,16,32,93,36,50,51],mps_chain_t:[22,36,35,2,27],fuzzi:11,unmaintain:15,"0x0000000100068050":16,sac:12,crl:30,tr99:30,"0x1003f9b88":16,set:[52,53,54,56,17,18,59,61,62,64,66,67,69,39,71,76,4,40,57,41,58,42,43,6,24,25,26,28,29,81,30,44,31,49,12,91,33,34,79,86,35,15,83,13,16,32,70,50],art:[61,15],fputc:31,btcreat:18,buildsi:50,"0x1003f9b80":16,extant:78,vinc:30,"00000001078c85b8":13,mutabl:[61,64,42],seg:[41,10,6,16,13,33,40],isfinalpool:6,see:[0,38,54,55,56,17,18,53,59,60,61,62,63,64,65,66,67,52,69,39,2,72,73,3,4,74,33,57,41,49,58,21,43,6,77,75,78,24,7,8,27,28,80,29,81,9,10,25,82,45,47,91,13,34,84,79,86,35,71,93,31,42,88,68,15,36,83,76,89,16,32,40,70,1,22,50,37],ierusalimschi:15,undergradu:15,arg:[80,40,83,28],reserv:[56,17,58,59,61,47,67,68,70,71,33,57,5,76,79,28,29,81,10,12,83,36],"1003fd000":13,arm:57,analog:[31,61,28],barn:[92,50,30],"_win32":50,hess:30,expert:[29,92,11,37],misalign:[61,68],someth:[41,29,81,17,10,6,82,15,45,12,79,33,50],particip:79,struct:[83,81,86,35,1,59,31,6,8,82,47,36,49,12,25,40,33,34,50],weakli:[8,15,66,70,71,73],"case":[0,38,56,17,58,53,59,64,52,39,71,4,13,87,43,6,24,49,25,27,28,29,81,30,10,8,82,45,46,12,91,33,34,79,86,47,15,83,76,89,16,32,40,70,93,36,50],won:[41,17,6,11,70,12,83,36,71],mutex:42,amalgam:4,experi:[29,50,90,36,30],type_link:83,altern:[80,53,58,30,31,25,12,49,83,28,71],signatur:[6,7,40,18],mpsevent:13,chain_o:35,disadvantag:[24,69,11,36,57],numer:[68,15,8],complement:29,sole:67,isol:49,mps_ap_destroi:[83,36],res_v:[83,12],incident:5,matthia:30,stroustrup:[29,15],valuabl:92,resresourc:33,distinguish:[52,53,56,17,22,34,66,68,69,36,57],mps_ld_add:[86,25],classnam:40,"1003ff000":13,mps_class_am:27,popul:[76,12,15,18],water:57,cryptic:79,last:[41,29,55,35,17,18,6,49,88,68,16,70,25,40,36,86],delimit:[81,34,32],linuxthread:[93,42],retent:70,hint:[29,56,58,46,12,35,74,36],alon:71,algol:[56,11,30,15],isomorph:69,xleroi:42,aver_and_check:50,context:[56,58,42,89,15,36,24,70,49,83,34,50],forgotten:16,oopsla97:30,mps_res_ok:[17,47,71,1,89,31,28,80,81,25,10,8,46,12,83,34,35,77,16,32,93,36],maclisp:[57,30],fermin:30,whole:[41,52,79,1,17,18,73,15,66,58,50,25,27,83,28],elsevi:30,ecma:15,load:[29,17,71,57,62,15,70,64,4,13,28,51],songworm:30,simpli:[29,56,58,18,42,31,11,53,45,66,46,70,12,49,33,40,28,71],elliot:30,point:[0,38,56,17,58,53,59,61,1,64,66,52,69,39,71,73,74,13,57,41,42,43,6,77,78,24,25,27,28,80,29,81,9,10,8,45,46,12,91,33,34,84,86,35,47,31,68,15,36,83,76,89,16,32,70,51,93,22,37],instanti:[45,6,49],schedul:[0,62,35,9,30,43,31,22,8,61,89,46,58,25,13,27,28,51],hudson:[56,30],sweep:[20,35,30,18,1,57,10,56,62,15,24,70,79,60,19,27,61,37],arbitrarili:[12,36],header:[53,56,57,59,62,64,65,69,70,71,3,4,22,78,8,27,9,49,47,34,32,37,36,50,51],uniniti:[83,36],hangov:18,church:16,lar:[92,30],mistak:[83,16,12,58],gavin:[92,7,30,49],poolclassam:18,coincid:45,simpler:[0,29,36],topla:30,prot_:50,xci3ll:[4,87],stamp:[31,13],help:[29,17,53,61,1,16,32,40,13,92,36,28],devic:[61,11,58,73],due:[38,41,56,53,59,61,79,15,65,76,89,70,71,73,83],empti:[0,41,57,18,88,82,52,33,36],destructor:[29,55,56,30,53,15],clocks_per_sec:31,arenapol:[6,16],newcom:25,arenapok:82,txt:13,threaten:[69,56,30],devis:[61,69],obj_u:36,strategi:[41,56,58,30,42,45,24,70],anthoni:92,invis:[45,8],modern:[29,17,58,61,11,15,65,67,24,73,36],versa:[41,6,25,15,8],gavinm:[33,49],"0x0000000100067ca1":16,fire:[45,1],clariti:[10,33,81],imag:[29,70,71,18],ada:53,consequenti:5,unnecessarili:[70,25],gap:[45,65,34,36],fund:6,understand:[11,17,30,25],func:12,weak_array_find_depend:8,cbsdescrib:49,chatter:[0,51],vulner:[29,37],henriksson:30,mergerang:49,strictest:52,"0x1003f9b78":16,mpscmvt:76,solid:27,typecheck:7,straight:[45,17],batch:15,durat:[41,55,58,15,70,34,28],"while":[0,55,61,64,69,70,73,24,8,28,80,29,81,25,11,45,83,15,77,16,32,36,50],unifi:45,smart:[70,30,15,71],abov:[80,29,36,17,5,6,49,11,34,83,50,24,39,12,8,4,13,18,57],guido:15,fun:[18,6,82,45,7,33,50],mps_root_t:[81,36,71],loos:[52,70,57,15],loop:[53,86,56,17,18,76,89,24,25,83,36,28],pack:[57,34,36],propag:[40,17,36],malloc:[38,29,57,58,6,11,15,36,61],untag_s:25,clinger:30,readi:[40,6,36,79],rip:15,willi:30,itself:[55,56,17,64,65,66,68,70,71,73,4,13,42,6,7,25,29,11,45,12,40,86,21,89,16,32],costli:[52,61,62],virtu:60,limit:[0,55,56,17,18,59,61,62,70,71,13,57,5,8,6,24,25,28,81,44,10,32,11,12,40,34,35,33,15,83,76,77,49,92,36,50],arenar:6,pedagog:[33,79],chase:[57,30],weakref:15,yuasa:30,mps_sac_fre:12,tobas:18,minim:[41,18,30,67,61,15,45,69,12,40,36,50],belong:[0,38,56,58,53,39,71,73,74,76,6,78,25,27,28,80,81,9,8,91,12,22,83,34,84,86,35,32,70,93,36,37],shorten:50,x64:4,shorter:[83,36],stefanov:30,decod:[17,58,71,4,13,51],mps_res_t:[17,39,71,1,74,76,22,77,78,25,27,28,80,81,9,10,8,82,45,46,12,83,34,84,35,31,89,16,32,91,93,36,2],varp:36,sqlite3:4,mps_bool_t:[0,80,86,25,47,45,12,32,91,83,34,28],conflict:6,higher:[53,81,31,6,64,15,36],vmcreat:13,sigxcpu:93,lie:56,optim:[29,81,62,56,17,30,53,6,32,89,67,68,12,85,25,4,36,28],target_check_shallow:7,wherea:[56,61,39,67],pretenur:30,amd:87,mps_pf_w3i6mv:87,moment:[33,82,25],arenacreatevm:13,temporari:[45,58,30],user:[0,59,67,43,31,6,61,11,15,45,64,79,8,13,40,28],bartlett:[61,70,30,15],robust:[29,55,11,18,91],yuan:30,transitori:49,recent:[53,81,56,17,58,60,6,62,39,73],sunpro:[4,87],travers:[29,6,55],task:[29,59,61,11,64,15,32,36],net:15,equival:[52,53,22,32,88,49,40,33,4],older:[52,29,54,56,87,60,61,34,24,70,71,73,36],entri:[54,86,17,18,71,6,25,11,15,64,8,92,93,37],mps_pf_xci3ll:87,yehudai:30,spent:[61,28],diwan:30,person:30,mps_lib_memcmp:[31,33],epdlpoolclassstruct:40,expens:[41,29,54,55,56,57,53,61,70],arenacommitlimit:6,cedar:53,johan:15,insidepol:6,spend:[0,29,56,61,11,69,28,50],poolclassawl:18,propos:[29,45,49,30,44],explan:[41,29],construct:[29,55,56,18,11,36,40,34,50],"000ae0397334df9f":13,buckets_scan:25,epcor:[45,49,18,21],table_:[86,36,25],obscur:[12,57],"0x00000001003fb148":16,relianc:47,shape:56,mysql:5,love:37,fflush:31,simm:55,stoutamir:92,site:[29,90,53],isfwd:[34,25],cup:28,scenario:[40,83],restructuredtext:[18,21,6,42,82,45,7,79,49,26,3,50],theoret:[29,56],failnextmethod:40,eager:[58,49],mps_message_type_gc_start:[0,61,35],"0x10012a000":16,appli:[41,81,17,5,61,64,66,45,70,12,79,83,36,50],snap:[26,69,70],input:[52,58,10,47,89,70,25,13,28],unlik:[56,17,15,70,36,84],subsequ:[53,55,56,29,49,28],btresrang:18,useless:13,indentifi:69,subroutin:56,xcodebuild:4,march:30,obsolet:[36,87,34,25],format:[38,53,54,56,17,58,59,62,64,69,70,2,73,4,74,13,57,41,20,76,22,48,78,1,25,27,28,29,81,9,10,8,85,45,33,34,84,79,71,15,83,16,32,91,51,36,37],big:[41,57,43,11,70,28,84],single_act:18,mps_class_ams_debug:[27,1],"0x1003f9bb8":16,alias:[40,17],mps_arena_reserv:28,cierniak:30,insert:[45,83,49,51,73],bit:[38,53,55,56,17,18,59,61,62,64,66,69,71,72,73,4,13,57,41,20,58,87,6,24,49,8,81,30,44,25,45,33,34,79,86,32,36,50],characterist:[66,53,76],formal:15,xcodeproj:4,lost:[45,83,18,15],semi:[53,56,57,30,29,61,69,58,70,49],rossum:15,signal:[16,70,1,13,93,34,51],resolv:[29,33,69],manifest:16,heart:[53,56,57,79,70,71,32,26],collect:[0,38,54,55,56,17,58,53,59,60,61,82,64,66,52,69,39,71,73,74,33,57,41,20,87,43,6,23,78,24,25,26,27,28,29,81,9,30,44,10,8,11,92,46,91,13,34,84,85,86,35,31,68,15,36,83,76,89,16,70,51,93,22,37],princip:[15,49],pithi:79,popular:[15,73],eec:30,mps_pool_class_epdl_debug:45,setrang:18,mps_gen_param_:[35,36],often:[52,53,55,56,57,18,60,61,62,63,64,66,67,69,70,71,73,58,6,24,79,29,10,11,88,15,16,32,36],comparegreat:33,spring:70,creation:[62,56,17,58,49,82,45,89,39,25,13,36,28,57],some:[0,38,54,55,56,17,18,53,59,61,62,64,65,66,67,52,69,70,71,73,4,13,57,41,58,42,6,77,24,25,28,80,29,81,30,44,10,49,11,45,46,12,33,34,79,86,35,47,31,88,68,15,83,89,16,32,40,93,36,37],back:[76,86,73,57,58,21,59,82,61,25,11,67,45,44,49,70,71,32,33,83,28],understood:71,strongest:71,unspecifi:[71,18],sampl:[31,45],"0x1003faf30":16,instal:[29,4,13,85],scienc:[11,30],sizeof:[83,49,79,86,35,57,18,87,8,32,47,77,16,12,25,40,91,33,36],surpris:29,obj_fwd:[34,36],teco:15,scale:[29,61,15,66,70,33],laru:30,predefinit:50,mps_message_finalization_ref:[89,82,25],mps_awl_find_dependent_t:8,per:[17,30,31,61,11,15,49,13,93,83,18],block_on_client_with_timeout:28,substitut:[7,5,32],mathemat:[66,18],larg:[52,53,54,55,17,18,61,62,64,65,66,69,70,71,73,57,58,43,6,24,8,29,9,30,11,45,46,12,33,34,88,15,49,91],undon:82,leftmost:[58,18],prod:50,reproduc:[29,16,5,53],worst:[52,53,30,58,88,66,89,8,91],mps_message_discard:[0,89,35,25],link_t:83,machin:[55,57,58,61,62,64,66,69,70,71,73,13,87,29,81,30,10,11,83,33,15,50],mps_var_:50,run:[0,38,55,17,18,53,59,61,62,64,65,69,70,71,4,13,57,41,58,5,43,6,24,25,28,29,30,10,8,11,33,34,85,86,15,83,89,16,32,40,93,36,50,51],mps_fmt_t:[9,78,10,22,36,45,2,8,27,34],epdrpoolclassstruct:40,nmake:[4,50],pietro:30,step:[38,17,18,32,69,83,45,24,16,25,27,36],convent:[20,54,55,18,29,59,64,69,47,73,40,50,51],mps_ap:16,squeez:65,santa:30,not_condemn:[0,16,25],mps_pool_walk:45,from:[0,38,54,55,56,17,18,53,59,60,61,62,64,66,67,52,69,39,71,73,3,4,74,33,57,41,49,58,5,21,43,22,77,78,24,7,8,26,27,87,28,80,29,81,9,30,10,25,11,45,46,12,91,13,34,84,79,86,47,1,31,42,88,68,15,36,83,76,89,82,32,40,70,93,6,50,37],subtract:[0,29,17,58,70,32,34],impos:[89,55,39,18],mps_class_mvff_debug:[91,1],proven:[53,68],constraint:[89,55,35,58,44,60,6,11,68,24,69,12,25,34,28],coexist:73,proce:[38,41,86,17,10,64,69,32,91,28],preclud:37,prove:[52,58,59,89,68,69,79,36],lieberman:[54,30],vmalloc:30,idl:[35,28,51],mean_siz:76,candi:50,alfr:30,slot_high:91,abstractarenaclass:6,"r\u00f6jemo":30,uncach:6,cutoff:46,frob:50,real:[41,29,30,61,82,15,67,24,70,12,64,73,33,71],colorado:30,primarili:[40,6,62,17,79],mps_ap_create_v:83,digraph:54,intl:30,within:[38,53,55,56,17,18,61,69,70,71,73,24,7,28,80,29,81,10,49,45,33,34,32,36,50,37],programat:34,toft:[30,15,71],myseg:40,rankweak:33,mps_message_clock:0,obj_:36,contributor:5,lesson:43,fopen:31,trampolin:93,occupi:[41,18,61,64,68,16,71,28],inclus:[76,36],span:[38,53],carnegi:30,mythic:58,fledg:7,megabyt:[52,61,69,36,57],"0xfdfdfdfd":45,"long":[0,38,17,18,47,66,52,70,71,73,83,41,58,87,76,22,24,25,28,29,9,30,31,32,82,12,33,86,35,16,49,36,50],custom:[81,49,30,15,25],adjac:[53,55,56,57,29,88,12,72,49],reserve_depth:76,arithmet:33,includ:[38,52,54,55,56,57,18,53,71,60,61,64,66,67,69,70,2,4,74,13,58,5,87,76,6,78,24,7,31,25,27,28,29,9,30,10,8,11,45,47,33,34,84,79,86,88,15,36,16,49,40,91,22,50,37],suit:[71,15],forward:[83,53,85,56,9,18,78,59,22,8,64,36,45,70,2,73,40,27,34,57],nepot:60,superpag:[70,65],busytrac:6,cbss:49,properli:[31,45,70,12,13,28],obj_unus:25,repeatedli:[53,76,62,45,70,28],subgraph:70,subsidiari:[45,49],mpscmf:84,teach:15,decomposit:18,navig:11,dgc:55,link:[53,55,56,66,69,70,71,73,19,4,83,20,21,25,29,30,8,11,13,15,77,3,49,37,50,51],translat:[17,30,44,6,69,64,67,45,58,73,61],atom:[41,29,58,30,42,6,62,40,93,83],cbsblock:49,line:[41,49,17,25,15,83,45,16,79,8,4,13,50],mitig:29,mminfo:[18,21,6,42,82,45,7,79,49,26,3,50],ismm:30,sdk:4,info:41,concaten:21,consist:[52,55,56,17,18,61,1,72,73,33,41,21,24,87,28,80,81,10,45,40,34,85,42,83,16,49,36,50],confusingli:[71,15],caller:[59,82,64,79,36,50],pkg_add:4,adequ:28,tightli:36,unlock:40,mps_roots_stepper_t:81,highlight:[83,30,25],mps_defin:[89,82,25],btsize:18,similar:[52,53,54,55,56,57,58,61,62,64,65,66,67,68,69,70,71,73,33,5,76,6,25,28,81,31,82,40,15,83,36],clear:[29,86,57,18,59,73,66,16,70,71,25,13,32,33],impl:[18,21,6,42,45,7,79,49,40,33,50],w3i3mv:[4,33,87],caught:93,event_label:13,obviat:45,mps_end:45,command:[0,10,15,16,4,13,50],doesn:[41,29,86,56,17,18,43,6,25,61,83,24,70,12,8,40,33,22,28,37],repres:[83,53,54,56,57,18,62,47,65,67,68,69,70,71,73,33,58,6,25,29,81,30,49,45,13,34,86,89,32,36],poolasm:79,proper:29,incomplet:[21,59,31,42,82,47,45,7,26,3,33],septemb:[45,30],dconfig_var_df:50,aggrav:29,flexowrit:13,getthreadcontext:38,singli:49,phantom:[66,70,71,15,73],oberon:15,pronounc:55,sequenti:[53,57,30,76,61,64,69,70],tag_data:45,sheetal:30,invalid:[0,41,81,80,57,10,6,73,64,66,49,39,71,25,70,33,83,28],setsparecommitlimit:6,appendic:20,"000ae03973361d5a":13,priori:[76,36,71],gonthier:[30,73],librari:[38,17,61,47,70,73,3,4,57,20,21,34,29,30,44,31,13,48,85,15,16,50],buckets_t:25,retract:6,mps_scan_end:[81,17,8,32,36,77,25,34],nice:45,btdestroi:18,draw:[54,70],llvm:[38,87],users:13,gigabyt:[52,69,57],event_al:50,benchmark:43,caml:15,mps_rm_prot:[81,73],w3i3m9:87,william:30,elsewher:[33,86,34,17,21],meaning:[6,7,13],wrongli:1,eval:[89,16,25],unwind:82,dram:[55,70],alloc_pattern:46,param:50,deserv:45,lang:[15,66,70,71,73,40],pmo:30,infrequ:[24,62,71],algorithm:[52,29,35,18,30,88,61,69,15,65,66,24,58,70,64,91,56,71],vice:[41,6,25,15,8],ams_is_invalid_colour:10,bibliographi:[20,11,30,29],bateman:92,discrimin:[33,69],depth:[76,62,36,30],appendix:[13,89],unconnect:65,dot:13,leak:[0,29,30,61,62,11,15,52,70,12],mps_arena_unsafe_expose_remember_protect:28,fresh:79,leah:92,oop:[16,30],unclamp:[68,56,28,73],io_o:31,code:[83,53,55,56,17,18,59,61,62,64,67,39,71,73,4,13,57,41,58,5,42,6,48,25,28,80,29,81,9,44,10,49,11,45,46,12,33,34,79,35,47,1,87,88,15,89,32,40,70,51,93,36,50,37],partial:[29,56,18,58,76,70,40,83],edg:[52,60,54,69,70],mps_arch_al:87,scratch:[24,83],cbsfinddeletenon:49,fclose:[31,25],recomput:28,pthread_mutex_lock:42,mps_prod_str:21,mps_fmt_fencepost_wrap:45,attrbuf_reserv:33,mps_arena_spare_commit_limit_set:[6,70,28],holdout:29,searchbas:18,mps_builder_:50,cbsinsertisolatedrang:49,compact:[41,55,56,57,30,61,62,15,65,68,70,71],root_scan:81,privat:[6,70,83,47,25],simon:30,pthread:42,secur:[61,15,73],quarterli:30,tracecondemn:79,migh:45,young:[52,22,56,54],send:[66,90,93],mps_arena_step:[35,28],granular:[6,28,65],carefulli:[29,60,82,69,73,50],tricolour:[66,69,70],mps_arena_park:[22,28,73],becam:[89,58],visitor:[67,70],aris:[53,55,34,5,32],fatal:13,sent:[10,13],isresetrang:18,pekka:[41,30,6,82,45,79,33,92],random:[53,16,70,71],mainstream:53,btreturn:18,peyton:30,amcss:[4,33],electron:[61,11,30],untouch:[10,33,18],implicitli:[40,62,61],popl:30,relev:[52,53,54,55,56,57,18,61,62,64,65,66,67,69,70,71,73,58,81,11,36,50],weak_array_scan:8,tri:[41,52,56,17,10,61,49,64,65,66,45,68,69,70,12,8,33,57],mps_ld_t:[86,25],mps_ld_isstal:[62,86,25],salad:70,question:[38,20,56,5,29,10,15,23,45,90,4,36,28,37],complic:[71,45,50,18,73],joel:30,scalabl:[41,40,70,30],michael:30,fewer:[29,11,18],mps_io_creat:31,"try":[38,29,81,17,42,41,45,24,70,50,8,13,36,28],poolclasslo:18,exit:[29,54,18,64,36,89,16,93,34],attrgc:33,freed:[29,55,56,57,58,53,76,6,62,11,24,70,12,73,83,36,61],rdoss:30,pleas:[38,5,10,11,47,90,16,4,93,83],app:4,impli:[29,5,53,59,6,15,70,13,50],smaller:[56,57,1,76,62,88,45,70,73,91,33,37],fortun:[41,67,24,30],readabl:[13,51],weslei:30,"0x3":81,natur:[41,55,57,58,87,76,10,84,15,45,12,72,8,60,91,33,74,37],inconsist:[93,64],memset:[31,33,16],elisp:15,mps_message_type_t:[0,61,35,89,25],crop:15,jump:79,fold:45,compareequ:33,s7ppac:87,"0x1003f9be8":16,download:[4,36],hyper:52,spaghetti:[70,56,50],rivera:30,append:16,mps_ss_:47,compat:[33,72,40,5],mps_tramp_t:93,mps_message_gc_start_whi:[0,35],compar:[29,56,18,30,31,6,15,65,24,71,49,33,57],"0x1003f9c08":16,resembl:[55,56,57,15,1],"1003fc000":13,han:[92,30],mpmst:79,experiment:[18,15,87],tom:92,mps_rank_weak:[81,8,66,77,71,25],mps_clock:[0,31,47],cele:15,journal:30,deduc:41,whatev:[56,17,31,45,28,50],penalti:71,ramsei:30,led:18,chose:69,boolcheck:33,inlinedescriptors:49,"__assert_rtn":16,mps_message_type_gc:[0,61,35],closur:[56,30,58,79,15,65,49,50],waldemar:15,let:[59,10,16,36,45],ubuntu:38,tenur:[29,69,30,73],"0x0000000100003ea6":16,becom:[0,53,55,56,17,61,64,52,68,70,71,73,24,25,28,80,29,81,11,12,83,15,89,49,92,36],sinc:[38,52,55,17,18,53,59,61,66,39,33,57,41,6,24,25,28,29,81,31,40,34,84,86,35,88,15,83,16,70,93,36],mps_arena_commit_limit:28,attralloc:[10,33],convert:[49,18,21,31,6,42,82,45,7,79,32,26,3,13,33,50],survei:[11,30],convers:[45,6,47,15],overcommit:[59,61],artifici:30,hilfing:30,conceiv:50,larger:[53,55,56,17,18,60,62,69,70,71,57,43,28,29,11,12,34,86,35,88,15,76,49,36],technolog:[29,56,30,67],oldsiz:49,later:[0,29,86,35,17,73,11,38,24,70,25,56,28],resurrect:[83,89,71],epdl:40,epdldbg:40,bufferdestroi:79,initialz:40,earli:[29,17,30,61,64,58,70,15,18],chang:[52,55,56,17,18,61,62,64,66,69,70,73,4,13,41,21,6,24,25,26,28,80,81,30,44,82,79,11,45,47,33,86,35,88,49,36,50,37],perform_client_act:28,chanc:[45,93],"0x00000001000014e3":16,marc:30,ansi:[38,29,57,42,31,47,4,13,50],calibr:31,mpsclo:9,kurtz:15,clark:[59,30],danger:[10,40,88],mps_lib_fputc:31,approxim:[41,29,81,55,35,58,53,6,62,52,71,33],aquir:92,foundat:41,sqlite:[4,13,51],apt:4,"0x1003f9bc8":16,"boolean":[40,6,33,47,49],immut:[67,61,64,15,25],validli:[83,77,89,34],greg:30,microcod:15,tailor:30,fee:5,metaphor:45,zip:4,commun:[0,55,56,30,61,15,66,45,24,64,49,26,34,71],doubl:[52,55,35,17,30,68,58,12,73,33,28,57],coordin:[45,61],next:[38,53,56,17,18,60,67,52,70,83,41,76,6,25,28,49,11,46,12,40,34,85,35,88,16,32,36],few:[38,29,56,17,18,59,88,62,11,15,47,69,52,16,12,25,28,57],dconfig_plinth_non:[31,4],busi:[6,82,15,5,8],usr:4,protic:30,lesli:30,jonathan:30,postpost:1,remaind:[53,88],sort:[0,29,54,86,57,33,61,41,70,71,3,13,34,50],clever:45,comparison:[33,49,86,25],fillmutators:6,mps_fmt_create_:34,pfm:50,mps_fix12:[47,32,34,36,8],classes_count:12,cbsfinddeletehigh:49,rare:[52,62,56,58,10,6,73,69,70,12,49,83,36],rusage_self:31,structu:1,goal:90,interven:[46,12],mps_pf_:[50,87],account:[41,6,56,24,25],hoard:30,retriev:[0,35,18,82,67,89,70,28],augment:59,cannarozzi:30,alia:[83,81,86,59,10,47,69,71,31,33,40],annot:[50,17,15],larch:30,plinth:[0,20,33,31,47,48,73,4,13],obvious:[45,40],meet:[6,50,34,18,49],tracescanseg:16,fetch:[29,56,17,73],aliv:[60,29,62,9,58,78,8,10,32,77,64,66,43,89,70,71,25,36],proof:10,control:[38,53,54,55,56,17,18,61,64,69,70,71,33,41,58,6,24,7,28,80,29,81,30,44,31,11,45,47,13,84,15,83,16,49,93,36,50,37],config_var_hot:[10,50,65],weaker:73,bitmap:[56,57,64,69,70,13],process:[52,55,56,17,58,61,64,65,66,67,69,70,71,73,4,75,57,41,21,43,24,25,28,29,30,10,8,13,88,15,89,32,36],lock:[38,20,62,42,10,6,44,34,83,89,86,40,33,93,36],loci:41,"0x00000001003f9ae0":16,divis:[56,57,30,15,66,70],high:[29,55,35,18,30,61,49,69,15,58,70,64,32,91,13,57],protix:16,lispwork:15,fprintf:[31,16,36,32],mps_arena_commit_limit_set:[10,56,28],"002d":13,mps_mv_free_siz:74,onlin:50,subsystem:30,giusepp:[92,30],everywher:[36,57],kib:17,"0x7fff5fbff0a0":16,minlength:18,link_:83,six:[91,4,71,30,87],smoothli:[35,36],"0x10012a5a0":16,georg:30,brian:30,sig:[40,7,30],memoiz:[61,56,50],fence_s:1,fencealloc:45,mps_pf_xci3gc:87,l979:30,circular:[60,69,30],prottramp:16,delai:[76,89,16,30],"_addr":[36,32],overridden:[6,40,50],"1078c85b8":13,interchang:[54,71],watch:61,bufferfinish:79,gcc:[38,18,87,16,4,36,50],inst:40,attent:29,attenu:49,redund:73,btfindlong:18,physic:[29,58,67,43,60,61,64,59,68,69,70,71,73],mps_arena_releas:[68,16,28],alloc:[38,52,54,55,56,17,18,53,59,60,61,62,64,65,66,69,39,2,73,74,33,57,41,20,58,42,43,6,77,23,78,24,49,8,27,28,80,29,81,9,30,10,25,11,85,45,46,12,91,13,34,84,79,35,47,71,93,88,15,36,83,76,89,16,82,32,40,70,51,1,22,37],drop:[66,24,75],essenti:[0,59,15,70,73,36],"0x1003f9948":16,bind:[16,56],init:[6,49,45,79,83,40],chapman:30,serrano:30,issu:[57,58,61,11,89,70,3,93,18,51],chief:[92,28],stavro:[92,57],unaccept:[29,70,64],freebsd:[38,4,93,50,87],oslo:[0,15],fallback:49,longest:33,mps_tag_a_:45,elif:50,neglect:[0,10,15],poor:[29,35,60,61,11,24,73,36],larson:30,ouput:28,berger:30,train:30,move:[38,53,54,55,56,17,18,60,61,62,64,65,69,70,71,73,74,83,57,41,76,6,78,24,8,26,27,28,9,44,25,12,22,33,34,84,79,86,15,89,32,91,36,37],microsystem:15,cbsblockbas:49,mps_root_creat:[81,56,36,73],notabl:[41,33,55,58],uniprocessor:30,jni:73,mps_message_gc_live_s:35,perfect:[35,57,73],pai:[29,17],famili:[87,50,15,57],movabl:[37,73],acycl:7,chosen:[41,17,60,88,68,24,70,36,28],concept:[17,30],mps_os_so:87,culprit:10,whether:[0,52,56,17,18,53,59,62,64,71,73,33,41,5,87,6,24,25,26,28,29,81,49,82,45,40,34,79,86,83,32,36,37],mps_addr_t:[17,58,47,69,71,13,22,77,25,28,80,81,8,82,45,12,83,34,86,33,89,16,32,36],mps_os_su:[50,87],mps_class_lo:9,therefor:[53,81,56,58,76,49,89,34,24,69,70,71,32,33,65,36,28],symbol_:[83,36,25],mps_thread_dereg:[81,93,36],uninitialis:73,cbsfinddelet:49,junction:60,fourth:36,python:[29,11,15,73],auto:[9,22,8,78,32,27,34,37],overal:[43,36,17,18,21],mps_build_gc:87,handi:[66,70,73],mention:15,mps_root_create_reg:[83,81,69,93,36],snake:73,arenafre:6,instead:[55,56,17,18,62,47,66,69,13,71,74,40,41,6,24,7,25,27,28,29,9,10,8,82,45,12,33,31,15,16,32,70],front:[53,62,35,28],arenadestroi:82,scatter:[24,54,30],mps_alloc_dbg:45,mps_arena_clamp:[56,28],type_pair:[13,16,36,32],mps_arena_formatted_objects_walk:[22,70,34,28],config_plinth_non:31,anyth:[38,29,81,17,53,41,45,24,32,4,36,50],edit:[6,21],iglio:30,tran:6,myunnoteseg:40,dominiqu:30,arenawrit:82,februari:41,mps_os_s7:87,truth:32,obtain:[0,56,5,10,61,88,15,67,70,33,28],stock:[30,15],walgenbach:30,cbsfinddeleteentir:49,whiten:79,subset:[41,81,18,76,79,70,71,49,36],societi:30,"__gc":15,accessnon:33,map:[29,62,56,57,18,53,59,31,6,73,67,45,68,58,70,50,25,61,28,71],arenaringinit:6,chunk:28,cbsblocklimit:49,mps_os_fr:87,remap:73,predic:[67,40,61],consum:[0,64,39,28,50,71],"static":[0,38,55,56,17,58,65,69,70,71,33,42,6,25,29,81,30,44,45,40,86,15,16,32,36],attrfre:33,fluctuat:[76,12],our:[6,11,47,25,33,13,37],mps_res_commit_limit:[10,12],mps_arena_collect:[22,16,28,73],mps_fmt_isfwd_t:[34,64,36],special:[38,53,54,56,57,58,59,62,47,39,71,73,13,5,6,78,8,29,44,10,49,11,40,33,88,15,89,82,32,70,36],obj_gen_param:36,variabl:[83,55,56,17,58,59,61,62,47,70,71,1,19,74,13,20,42,76,22,78,24,25,27,29,81,9,30,31,8,11,45,40,79,15,49,91,37,36,51],eqv:[0,89,16,25],nick:[92,50,30],"th\u00e9se":30,contigu:[53,17,18,59,6,62,64,45,70,49,61,57],bag:57,influenc:[56,15],req:[18,6,82,45,49,40,50],facto:78,bobrow:[55,30,15],categori:[71,13,33,51],pooldescrib:79,suitabl:[38,53,57,18,61,62,64,58,5,42,8,27,29,81,31,12,13,34,88,49,36,37],sever:[53,55,56,17,18,60,62,70,73,83,41,43,6,28,29,49,11,45,40,1,88,15,76,32,91,36,50],hardwar:[41,54,55,56,57,30,44,61,11,15,23,69,24,58,70,64,73,34,28],iam4cc:87,ref:[41,81,73,18,42,32,82,77,64,36,66,89,70,71,25,26,13,33],old_symtab:36,ree:[18,21,6,42,82,45,7,79,49,26,3,50],franc:30,insid:[80,35,17,30,22,64,16,32,93,34,18],parenthesi:47,fmt_a:34,frank:30,manipul:[29,18,6,62,15,66,7,70,49,93,34],powerpc:[4,64,87],arena_class:28,"0x1003f9bd8":16,york:30,usual:[0,52,54,55,56,17,18,53,60,61,62,64,65,66,67,69,70,71,73,83,57,41,58,24,25,28,29,10,79,11,12,40,34,38,86,88,15,89,32,91,36,50],releas:[29,81,35,21,10,6,42,89,47,53,1,79,25,4,93,28],mps_fmt_create_a:[36,34,25],mps_mortal:35,queri:[13,61],afterward:[81,32,28,25],refset:[41,6,33],reslimit:33,"000ae03973336e3c":13,walker:[45,79],intrus:30,tru64:[4,87],unwant:15,could:[54,18,59,61,82,65,69,13,71,4,40,41,24,27,28,81,10,49,11,45,33,86,15,32,36,50],lexer:36,put:[41,53,86,56,18,59,8,61,25,82,47,45,68,73,28],segreg:[53,54,57,62,70,2,74,20,76,22,78,25,27,80,9,8,12,84,85,32,91,37,36,51],timer:13,david:[18,30,42,21,82,79,3,92],counterpart:[83,1],length:[0,86,35,18,8,36,83,16,25,40,13,32,33],enforc:93,wrote:[10,31],outsid:[41,29,54,59,45,37],mortal:[52,35,30,43,22,15,64,27,36],retain:[29,55,56,5,76,11,64,70,49],"universit\u00e9":30,scarc:[53,89],austin:30,softwar:[41,20,55,56,30,5,21,29,44,15,3,28,57],isbn:30,suffix:50,christoph:30,mps_class_amcz:[2,25],qualiti:31,port_clos:25,echo:13,date:[41,24,44,36,21],haskel:[11,30],lib:[4,50],facil:[41,42,31,6,45,49,40],buckets_find:[86,25],suffic:25,ecoop:30,prioriti:49,avert:40,supposedli:58,dump:45,strict:[52,56,57,5,70,71,49,40],unknown:[0,10,66,76,38],licens:[38,20,4,5],perfectli:29,system:[38,52,55,56,17,58,53,59,61,62,63,64,65,66,67,69,70,71,73,3,4,40,57,41,20,5,42,43,6,23,24,49,90,8,28,80,29,81,9,30,44,10,25,11,12,13,34,85,47,31,87,88,15,83,89,16,32,93,36,50],messag:[0,20,35,58,29,31,61,82,89,15,53,66,90,25,13,40,51],size_io:45,attach:[0,57,6,45,69,12,83,36,61,71],attack:61,poolcheck:7,btcopyinvertrang:18,termin:[53,58,18,10,31,49,69,32,13,83],"final":[0,53,17,66,69,71,73,74,41,20,76,6,77,78,25,26,27,29,9,30,44,8,82,22,33,38,84,85,15,89,91,51,36,37],poolreclaim:79,prone:29,configura:82,shell:13,ferrit:56,deregist:[81,82,89,93,36,28,37],"__del__":15,obj_quot:36,juli:[45,30],shallow:7,accompani:[50,5],lockreleaseglob:42,enqueu:[66,70,71,73],diminish:43,exactli:[52,55,56,18,59,8,11,47,45,49,73,33,62,40,50,37],steel:[41,57,30],unmap:[53,61,67,68,70,71,28],holland:30,cpython:15,bloat:29,tr94:30,couldn:[81,35,34,45,25,36],mps_io_:31,roberto:15,emac:[0,10,52,15],structur:[38,52,55,56,17,18,53,59,61,1,64,65,69,70,71,73,40,57,41,20,58,21,6,24,7,8,28,80,29,30,44,10,25,11,45,46,12,49,33,34,84,79,86,35,47,31,42,15,83,16,32,93,36,50],charact:[29,17,87,31,36,70,2,25,4,13,50,57],claim:[42,10,6,69,40,93],mps_res_resourc:[10,12,28],sens:[53,56,57,62,67,70,25,36,37],mps_arena_commit:[61,28],seriou:[38,29,71],dubiou:[68,18],exp:16,spaceaccess:79,stdio:29,bet:45,busili:24,exhibit:[62,57],counter:13,"0x00007fff91aeed46":[13,16],freefre:1,mps_root_destroi:[81,36],linker:[70,50],deprec:[81,18,47,78,89,39,32,13,74,93,28],mps_pf_align:[84,87,76,60,6,8,74,50,37],correspond:[52,53,17,18,61,69,39,71,57,42,6,77,78,8,28,81,25,82,46,33,34,79,87,89,49,93,22,50],arenaaccess:6,corrupt:[29,55,58,10,45,16,1,13],scientif:15,usenix:30,have:[0,38,54,55,56,17,18,53,59,60,61,62,64,66,67,52,69,39,71,73,4,74,33,57,41,49,58,21,76,6,77,75,78,24,7,90,8,27,87,28,80,29,81,9,10,25,11,45,46,12,91,13,34,84,79,86,35,47,1,31,42,88,68,15,36,83,89,16,82,32,40,70,92,93,22,50,37],ari:30,need:[0,38,54,55,56,17,18,53,59,60,62,64,65,66,52,39,2,73,4,33,57,41,58,42,76,22,77,78,24,8,27,28,29,81,9,10,25,11,45,12,91,13,34,79,86,35,47,71,31,15,36,83,89,16,82,32,40,70,93,6,37],ben:30,finalpool:6,element:[56,6,62,69,16,70,12,49,36],tidi:[0,85,36,50],flip_mask:13,optimis:17,runciman:30,lazili:[82,56],sdram:[55,70],depict:54,mpscamc:[22,2,47,36],min:[6,50,49],findlongresrang:18,"0x1003cbe38":16,accuraci:[66,33],mix:40,unawar:73,discret:[34,79],"0x7fff5fbff7d0":16,which:[0,52,54,55,56,17,18,53,59,60,61,62,64,65,66,67,69,39,71,73,4,33,57,41,58,5,21,76,6,77,75,24,7,25,26,87,28,80,29,81,30,10,49,11,45,46,12,13,34,84,79,86,35,47,31,42,88,15,83,89,16,82,32,40,70,93,36,50,37],mps_message_type_fin:[0,53,61,89,25],mip:[4,87],addison:30,type_charact:25,singl:[38,52,55,56,17,18,53,59,61,62,70,71,41,58,42,43,6,24,8,27,44,45,40,88,15,16,49,93,36,50],uppercas:47,btisresrang:18,radioact:30,unless:[52,58,47,73,74,13,76,22,24,8,27,29,9,25,49,11,45,83,84,32,91,36],rove:[60,88],clash:[40,47],deploy:[38,10,13],transmit:31,jun:[13,16],lockfinish:42,who:[0,10,15,29],discov:[56,43,10,69,45,77,16,25,36,28],mpslib:[31,4],arenacr:6,rankambig:[26,33],awl:[20,55,18,8,66,77,25,19,37],eight:[66,50],intern_str:25,deploi:38,bjarn:[29,15],nostop:16,judici:29,"class":[38,52,55,56,17,18,53,71,1,64,66,67,39,2,73,19,4,74,13,57,20,58,76,22,77,48,78,8,27,28,80,29,81,9,44,10,25,82,85,45,12,91,33,34,84,79,47,15,36,83,89,32,40,70,51,93,6,37],morrisett:30,make_port:25,lee:30,placement:[6,58,30,18,73],weiser:[52,29,56,30,15],dens:18,instig:0,gather:[52,70,57],request:[38,53,56,57,18,61,64,65,66,52,70,73,74,83,41,58,21,6,90,25,28,80,10,79,11,45,12,33,84,88,15,16,49,91,36,37],face:[70,61,11,58],inde:[40,6,34,61,32],deni:79,snapshot:[66,70,64],determin:[0,52,55,56,17,58,53,62,64,65,66,67,68,69,70,71,73,3,83,41,21,6,77,24,8,26,28,80,29,81,25,49,45,33,34,79,86,15,89,32,36,37],xavier:30,constrain:[45,33,49],stichnoth:30,fact:[52,53,54,17,18,61,62,47,69,71,33,77,28,81,11,12,40,86,15,89,16,32,36],"000000010992f000":13,arenacheck:6,guei:30,gen_count:35,assert:[0,79,16,56,17,18,1,71,10,31,32,65,7,58,25,13,36,50,51],text:[57,58,44,15,70,79,13],verbos:13,"0x100002130":16,minski:[30,15],poolaccess:79,connect:[52,54,56,59,31,22,11,89,24,71],bring:[28,18],"0x000000010000447d":16,empir:30,totalreturn:16,parentclassnam:40,topmost:[70,35],trivial:[6,83,49],anywai:[40,42,86,25],duck:15,wors:[53,88],insertisolatedrang:49,textual:[79,49],locat:[0,53,54,56,57,18,59,61,62,64,66,39,71,73,33,20,58,42,76,6,24,49,8,28,80,81,44,10,25,11,45,12,40,34,85,86,35,47,31,88,83,89,82,32,70,51,93,36,37],materi:[29,5],"0x00000001003f9a80":16,print:[0,49,15,36,89,16,79,25,13,33,28],youngest:52,correl:76,rash:[56,58,10,65,67,71,50],should:[0,53,17,18,61,64,66,69,71,1,4,74,13,41,43,6,78,7,25,26,27,28,80,29,81,30,10,8,45,46,12,33,34,79,86,35,47,31,83,76,89,16,49,40,36,50,37],mps_ld_merg:86,held:[6,49,12,42],smallest:[52,56,57,88,70,12,49,33],suppos:[26,81,12,18],preturn:79,mps_capac:35,"0x00007fff90509df0":16,various:22,"0x1003fad48":16,local:[53,55,56,17,58,60,61,62,64,67,69,70,71,4,83,57,42,24,7,29,81,30,31,11,47,40,34,88,32,36,50],hope:[81,50],mps_ap_alloc_pattern_begin:[46,71],meant:[53,70],count:[52,53,55,18,59,60,61,62,66,70,71,75,58,42,23,24,25,28,29,81,30,45,33,15],protstruct:50,changeov:17,mps_fmt_pad_t:[36,34,73],contribut:[41,92],mps_block_siz:12,lii4gc:87,findfirstbefor:49,tract_of_addr:6,make_str:[16,25],simplest:[83,4,69,36],memcpi:[31,33,16,83],bear:43,neighbour:49,joint:30,theori:[61,58,57,5],lockinit:42,lockix:10,meter:50,cbsblockdescrib:49,increas:[52,29,56,53,59,10,50,82,66,46,12,13,88,28,71],debugpoolcheckmethod:40,cbsgl:49,thomson:92,obj_fmt:[36,34,25],amcz:[20,9,32,2,25,19,36,37],extract:21,enabl:[0,10,31,8,89,70,25,40,13,36],organ:29,whilst:79,underscan:[27,16,85],caudil:30,stanford:30,symtab:[81,36,25],mpscam:27,grai:[52,56,57,59,64,66,69,70],stuff:50,mps_sac_destroi:12,integr:[38,41,58,87,10,61,15,36,47,45,50,25,33,27,28],partit:[60,6,71,30,44],contain:[83,53,54,56,17,18,71,61,1,64,66,69,70,2,73,4,74,13,57,41,58,5,21,76,22,77,78,24,49,8,27,28,29,81,9,25,11,45,47,33,34,84,79,86,35,42,36,89,16,32,40,91,6,50,37],grab:91,btfindlonghigh:18,btfindlongresrangehigh:18,view:[38,41,57,58,42,6,64,53,45],mvff:[20,61,1,91,49,19,74,37],conform:[47,31,40,50,18],legaci:4,modulo:86,inexplic:58,bucket:[52,86,56,57,58,73,25,36],frame:[53,55,56,58,64,39,73,74,20,76,22,78,8,27,81,9,91,13,84,16,70,37,51],knowledg:[76,88,11,70,49,40,36],bty:18,btx:18,flip:[41,53,57,44,6,83,69,33,93,13,28],veljko:30,temporarili:46,now:[0,29,56,17,18,53,61,25,82,15,83,79,73,13,80,36],stack:[38,54,55,56,17,58,64,65,69,39,71,73,19,20,76,22,78,24,8,27,29,81,9,30,11,46,91,83,84,15,89,16,70,93,36],modulu:18,mps_add_fencepost:45,mps_pf_fri6gc:87,polymorph:[33,40],statu:[29,49,87,8],error:[83,53,55,17,58,59,61,1,64,68,70,71,73,13,57,20,22,8,27,28,80,29,81,25,10,32,82,46,12,33,34,79,86,35,47,31,16,49,36,50,51],correctli:[86,58,32,64,79,83,40],reform:50,mps_os_xc:87,boundari:[56,18,30,62,64,58,70,91],segment:[52,17,18,61,62,64,66,70,71,73,74,33,57,41,58,6,79,45,40,84,13,91],below:[38,56,18,32,79,4,13,42,43,6,24,25,28,29,81,10,8,11,45,40,35,87,88,83,89,16,49,36,50],mps_ap_:[83,47],tend:[57,18,11,66,32,17],favor:29,state:[0,55,56,17,58,61,64,68,70,71,73,33,41,42,6,79,28,80,81,31,49,45,47,22,40,34,15,32,93,36,51],sparecommitlimit:6,entrant:[71,10,34,49],mpseventsql:[85,4,13],mps_fmt_auto_header_:[34,32],crude:59,progress:[41,52,35,30,62,90,73,56,13,28],neither:[80,81,55,73,66,7,49],induc:15,tent:45,locksiz:42,javascript:[11,15],kei:[52,55,17,8,11,15,66,45,77,49,25,86],amen:33,lamport:30,appopri:12,supplant:15,mps_res_unimpl:10,job:[29,22,11],entir:[29,79,17,18,43,61,8,11,68,15,24,49,70,64,73,28],mps_fmt_a_:[36,34,25],fri3gc:[4,87],argument:[0,18,47,66,2,74,40,41,76,6,78,49,25,27,28,80,81,9,30,10,8,12,22,33,34,84,83,32,91,93,36],amer:30,swift:56,addit:[83,55,56,57,18,59,69,13,17,41,76,22,78,24,8,27,28,80,29,9,11,45,12,40,34,88,15,89,91,36],mps_fix_cal:[34,32],attrpm_no_writ:33,drum:[70,57],bucket_:[86,25],mps_class_mv:74,unformat:[76,45,91,37],obtrus:24,mps_arch_pp:87,ramp:[46,35,71,51],equal:[56,18,30,31,34,66,49,4,33,28,57],jersei:15,mps_pool_creat:[80,1,9,76,10,22,8,36,78,2,25,91,27,74,34,84],jin:30,detlef:30,instanc:[53,81,17,58,76,31,6,79,64,66,45,69,70,49,33,40,61,57],grain:[52,60,6,66,49],equat:57,committe:15,mps_class_mf:84,section:[41,49,86,18,42,10,8,11,69,44,32,25,4,36,50,37],freeli:[34,5],prot_foo:50,cactu:[70,56],suno:[4,87],boyer:[30,18],"0x00000001003f9b40":16,comment:[0,17,49,32,79,92],unimpl:33,unmark:[61,70],english:[56,35],steadili:76,guidelin:[40,44],rarer:55,arriv:66,arena_high:91,walk:[45,34,79],solv:[29,30,61,25,24,70,49,36],ucb:30,commenc:28,respect:[41,86,57,18,42,10,6,69,15,58,70,49,33,36],leftblock:49,traceset:[6,33],seligmann:30,mailto:5,quit:[29,81,56,58,53,60,15,66,45,24,69,13,36,37],slowli:13,pin:[60,22,32,73],mps_build_eg:87,platform:[38,52,18,60,62,47,66,71,73,4,74,13,20,21,76,44,31,33,48,84,85,87,15,49,91,93,36,50,37],addition:[29,18,61,47,46,40,28],decent:37,accumulatorreset:33,compos:[88,30],insuffici:[83,49,39,15,73],compon:[41,29,5,21,6,15,71,4],plezbert:30,treat:[54,55,8,25,89,86,79,73],tactic:36,immedi:[41,29,81,55,80,57,21,76,25,64,67,68,16,39,32,36,28,86],"0x000000010002d020":16,mps_pf_lii3gc:87,field:[83,53,54,56,57,18,59,62,64,69,70,71,73,33,41,6,7,8,26,25,11,45,40,34,79,15,36,50],set_mask:13,memcmp:[31,33],both:[83,55,56,17,18,64,13,71,1,40,42,6,24,25,28,8,32,11,45,91,47,22,33,15,89,49,70,36,37],presenc:[86,58,62,45,24,8],decai:[52,30],forestal:73,deliber:[61,36],zero:[0,55,1,17,58,71,60,62,66,2,73,19,13,20,75,24,49,31,29,81,9,25,10,8,12,33,79,15,32,36,37],togeth:[52,53,35,58,18,76,88,11,36,45,71,65,34],colnet:30,reinhold:30,plausibl:[29,18],present:[41,52,42,31,25,11,69,46,70,79,32,33,36,50,37],statist:[13,35,17,28],determinist:16,multi:[38,29,5,30,42,6,62,69,58,71,73,83,93,36,61],cbsinit:49,obj1:40,plain:18,align:[52,1,17,18,60,62,64,66,68,32,79,73,74,83,57,58,87,76,6,78,8,27,28,81,9,44,10,25,69,45,12,22,33,34,84,47,16,49,91,36,50,37],event_intern:13,corrigendum:30,fmt_b:34,unsuit:24,defin:[0,53,56,57,18,60,64,65,69,70,71,33,42,7,31,87,81,10,25,82,45,47,40,79,21,89,16,32,36,50],deem:28,talpin:[30,15,71],rightblock:49,glossari:[52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,75,20,29,11,14,92],s7ppmw:87,sep:50,observ:[52,29,57,58,62,89],april:30,mps_os_o1:87,layer:[70,11,88],fwd2_:36,conclus:29,incapacit:13,cell:[59,66,56],almost:[38,29,58,15,66,45,83,36],"5th":30,customis:[50,30],bodi:[52,40,62,90],mps_pool_class_t:80,archiv:[4,90],cbsinsert:49,attrfmt:[33,79],substanti:[24,55,71,15],buckets_fmt:25,r2000:87,protspong:50,revis:[49,30,25],foreign:[53,37,9,73],greater:[18,31,67,70,49,33,28],trap:[73,30,61,79,49,83],mutat:[41,52,55,56,58,44,6,62,68,15,66,53,24,69,70,64,73,33,61,28,71],mps_arch_:50,mps_mvff_size:91,"0x00000001003f9b80":16,referenti:53,satisfi:[80,53,55,58,18,76,88,34,70,73,83,65,36,37],cross:56,access:[0,52,55,56,57,18,59,61,62,64,65,66,67,68,69,13,71,73,3,4,40,58,42,22,24,8,29,81,9,31,25,11,45,12,33,34,79,86,35,47,15,83,89,16,82,49,70,93,50,37],member:[55,56,87,6,15,69,47,32,33,92],matthew:[92,7,30,49],anachronist:64,mps_reserve_block:[83,47],largest:[66,87,12,58,49],failur:[49,55,10,61,25,69,16,79,31,40,33,86],inc:30,infer:[70,58,15,71],optarg:45,leaf_pool:25,competit:76,undesign:41,http:[4,42],denot:[4,57,18],expans:[10,33,47,18,21],heapsort:65,maxlength:18,upon:[66,67,40,47,25],effect:[0,53,56,57,18,61,64,13,41,58,43,78,24,28,29,81,30,45,46,12,40,86,47,88,83,16,49,36,50],coffe:28,dai:[41,29,18,8],mps_pf_lii6gc:87,lii3eg:87,sooner:[29,16,17,28],student:15,dealloc:[52,53,55,58,59,61,73,64,65,70,1,74,76,22,78,8,27,29,9,10,79,12,83,84,15,49,91],customalloc:30,logarithm:[50,87],decoupl:50,blocklimit:49,expand:[87,10,47,15,33,40],mordechai:30,off:[54,56,42,59,88,69,45,16,70,79],cbsmayuseinlin:49,firstli:[6,61,17,15],mps_telemetry_databas:13,builder:50,obj_ap:[16,36,25],well:[0,53,57,18,61,62,47,67,76,39,4,40,41,43,24,49,25,27,29,8,11,45,12,33,34,86,88,15,83,13,32,70,37],morri:30,thought:[13,33],action_find_set_bit:18,exampl:[0,38,55,56,17,18,53,59,61,62,64,65,66,67,52,69,70,2,73,4,33,57,41,58,5,21,76,6,77,24,7,8,28,29,81,9,44,31,25,11,85,45,12,13,34,79,86,35,47,71,93,87,88,68,36,83,89,16,32,40,51,1,22,50,37],frombt:18,pda:70,mpseventcnv:[4,13],choos:[41,20,76,56,17,58,71,43,77,89,83,45,52,69,50,85,19,40,36,28,37],undefin:[29,18,31,6,47,89,69],colour:[41,56,18,44,10,66,69,70,33,28],btfindshorthigh:18,mckinlei:30,latest:[0,31,15,70,4,13],test1:18,test2:18,bye:0,paus:[29,35,43,6,11,64,24,71,56,61,28],less:[52,55,56,17,18,70,71,73,74,83,57,6,25,28,29,31,11,12,33,35,88,89,49,36],conv:[33,18],compel:29,pitfal:24,myseginit:40,mistaken:[83,25,8],metrowerk:[4,50,87],topic:[20,85,8,11,47,25,36],"0x1003fa7d0":[13,16],virtual:[17,58,59,61,62,47,65,66,67,68,69,70,71,73,87,6,24,64,28,29,30,10,11,12,83,15,36,51],heavili:[29,49],type_pad1:[16,36],paul:[92,30],zoneshift:6,systemat:55,brainpow:17,"00000001003fe000":13,gmk:4,web:[90,15],adt:[33,18,42],rapid:[30,15,49],tight:[13,88,17,15,24],dylan_scan_contig:17,close:[38,29,56,58,5,53,76,73,89,52,25,50],alloct:45,makefil:[4,50],hall:30,bits_act:18,add:[41,29,81,86,88,10,49,69,15,36,83,45,24,16,12,25,40,4,13],lower:[47,6,69,61,28],epdldebugcheck:40,mps_telemetry_control:[31,13,69,28],exempt:5,mps_pool_destroi:[80,89,36],ado:17,ought:6,match:[29,65,45,46,12,25,33,37],"0x00000001003fb0a0":16,jython:15,branch:[70,83,56,17,50],poolclassstruct:[33,79],dest:31,"002b":13,hpl:30,multiprocess:30,arguabl:40,sigsoft:30,built:[29,81,55,56,17,87,15,47,4,36],realiz:36,five:[41,81,57,76,61,24,34,17],know:[38,52,54,56,17,18,59,47,65,67,73,33,41,24,28,29,81,10,11,45,12,40,34,16,32,36,37],burden:52,nointersect:49,press:30,somewher:[29,81],lockclaim:42,recurs:[29,56,58,30,42,6,15,65,7,70,40],mps_arena_destroi:[89,13,36,28],motorola:87,resid:[41,55,56,57,66,67,70,71,40],like:[52,53,55,56,17,18,61,64,39,2,4,13,41,58,5,76,6,78,24,49,8,27,28,29,9,10,25,11,45,46,47,33,79,35,88,15,36,83,77,16,32,40,91,22,71],success:[38,52,62,47,65,39,71,40,42,31,28,10,49,11,12,83,34,86,33,15,13,89,32,93],safest:32,corpor:30,resio:33,lose:[59,53,55,70,49],roth:30,stagger:55,ref_p:89,necessari:[83,53,56,47,65,69,13,79,33,42,6,24,25,26,28,29,8,45,64,22,40,86,21,89,32,93,36,50],martin:[92,30],mps_pf_w3i3mv:[50,87],async:41,architectur:[56,57,58,62,64,65,66,68,69,70,71,72,73,4,83,41,20,21,6,8,26,81,30,44,79,82,45,13,87,36,50],soft:[66,70,71,15],page:[55,56,17,18,61,62,64,65,66,67,68,69,70,71,73,4,57,58,6,28,29,81,30,13,34,15,36],philosophi:15,provok:[10,16,29],unreach:[38,52,81,55,56,53,61,79,11,89,15,68,16,71,73,80,36,28,37],exceed:[33,10,6,12],revers:[0,29,18,53,69,70,40,36],unit_s:84,captur:56,"0x7fff5fbff3e0":16,mps_os_:50,yarsun:30,interact:[0,29,30,18,31,61,62,11,64,24,70,25,13,88,28,51],hain:30,self:[53,69,30],certain:[29,79,55,57,53,88,32,11,15,66,67,24,46,69,50,73,70,62,49,28,71],"__kill":[13,16],"_msc_ver":50,superclass:[45,40],flush:[0,31,70,12,13,36,28],piec:[29,56,44,42,88,24,69,1,28],guarante:[53,17,59,64,66,71,57,42,76,6,24,28,29,81,31,45,12,34,86,89,49,36,37],contig:6,peter:30,type_weak_t:8,mainli:[70,11,15,44],win32:42,subramanian:30,trust:71,leaf:[20,62,17,58,53,43,32,67,70,2,25,19,37,34,9],borland:15,lead:[55,35,57,58,59,88,61,62,69,16,70,91,50],broad:33,avoid:[0,52,55,56,17,60,62,64,65,70,2,73,13,57,5,42,43,6,25,28,29,49,82,45,47,40,48,33,88,89,32,36,50,71],mps_res_memori:[10,81,12,28],mps_rm_t:[81,71],overlap:[41,81,31,46,79,28],debug_opt:[91,27,74,1],estim:[53,35,17,15,28],leav:[29,55,17,18,53,31,45,24,70,28,57],disciplin:[71,15],overlai:71,launch:9,speak:[34,57],pollthreshold:6,mode:[0,52,81,56,76,49,15,45,16,71,73,33,36,51],mynoteseg:40,"0x1003fe928":16,encourag:[61,88,17],investig:[52,29,27],fromspac:[59,53,69,70],slight:[76,15],aitr:30,mps_build_cx:87,"enum":49,usag:[35,17,21,61,65,13,36,28,57],hosk:[92,56,30,73],facilit:[70,15],paper:[29,13,69,11],host:31,obei:[36,71],although:[53,56,58,59,61,64,69,70,40,18,42,76,6,24,7,25,29,11,45,47,33,15,49,37],offset:[79,70,34,18,73],java:[52,29,30,53,11,15,65,66,89,70,71,73],sigabrt:[13,16],stage:[41,17,70,32,13,48,50],about:[0,55,56,17,18,61,62,64,66,68,69,39,71,73,13,57,41,58,76,22,77,24,25,28,80,29,81,79,11,45,40,34,35,33,15,83,89,90,49,93,36,50,37],actual:[0,53,54,55,56,57,61,64,65,39,72,73,41,42,6,24,25,28,29,81,79,11,45,40,91],fri6gc:[4,87],world:[61,11,30,28],string_:[16,36],column:[13,87],freedom:[67,29,15,45],irix:[59,4,87],justif:[40,18],tracer:[41,6,33,44],jouannaud:30,constructor:[29,55,56,58,15,36],fals:[0,80,86,40,18,6,49,47,36,83,12,32,26,91,33,34,28],discard:[0,53,35,49,89,46,12,25,56,83,34,28,37],hypothet:40,disabl:[0,6,17],conflat:49,sleepycat:5,harder:[88,64,15,73],own:[38,56,67,69,70,71,4,33,41,42,6,31,28,29,81,10,25,11,45,40,88,15,83,36],absolut:[12,58,73],roughli:17,kathryn:30,unbox:[57,64,68,70,32,36],around:[60,29,35,17,42,57,31,61,8,68,15,83,45,24,25,33,36,37],tag:[56,17,58,59,47,66,68,69,70,71,73,57,7,8,29,81,25,45,64,83,34,15,16,32,36,50,51],eventdef:13,automat:[38,52,55,56,17,58,71,61,1,64,65,66,39,2,73,19,4,74,20,76,22,23,78,24,49,8,27,28,80,29,81,9,30,10,25,11,45,46,12,91,83,34,84,79,35,47,15,77,32,70,93,36,50,37],make_symbol:[83,25],guard:[89,6,40,25],refer:[0,38,54,55,56,17,18,53,59,60,61,62,75,64,66,52,69,70,2,73,19,74,33,57,41,20,58,76,22,77,23,78,24,8,26,27,28,80,29,81,9,30,44,10,25,11,92,45,47,13,34,84,79,86,71,88,68,15,83,89,16,82,32,40,91,51,93,36,50,37],awhil:12,lund:30,scanner:[81,62,17,48,32],tito:30,lockreleasempm:42,hysteresi:[76,6,44],pointless:84,mere:[41,45,62,56,86],merg:[86,56,18,49,88,79],mps_fmt_b_:34,edeadlk:42,van:15,obj1struct:40,val:7,pictur:[38,41],assumpt:[22,11,45,89,8,40,33],transfer:[61,62,70,73],findlongresetrang:18,intellig:[62,17,30],trigger:[67,73],lockreleaseglobalrecurs:42,inner:[56,18],define_alias_class:40,"var":[40,50,37],protocolclasssuperclasspoli:40,contamin:30,"function":[0,38,55,56,17,18,53,59,61,62,64,65,66,67,52,39,71,73,33,41,20,58,42,6,7,8,26,28,80,29,81,9,30,44,10,25,11,45,46,12,49,13,34,79,86,47,31,15,36,83,89,16,82,32,40,70,93,22,50,51],btissetrang:18,north:30,unexpect:[16,36,15,32],unwrap:[66,68,71],subsum:41,findlastaft:49,message_typ:0,middleblock:49,mps_debug_class:45,tv_usec:31,type_symbol:[83,16,36,25],gain:[43,15,45,32,93,28],spuriou:41,grate:92,munro:30,eas:[29,15],inlin:[38,29,81,86,83,17,58,32,64,47,49,12,25,4,33],buf:[10,31],poolmark:79,"0x1003f9bf8":16,exit_failur:29,suppli:[88,86,58,42,31,49,11,15,45,64,25,40,34,37],also:[0,38,54,55,56,17,18,53,59,60,61,62,63,64,65,66,67,52,69,39,2,72,73,4,13,57,41,58,5,42,6,75,24,7,25,26,28,29,81,9,30,79,11,45,12,91,33,34,86,35,47,1,88,68,15,36,83,89,90,49,40,70,22,50,71],dmb:57,made:[83,55,17,58,64,65,70,40,57,18,21,6,79,28,29,10,25,45,13,86,42,15,49,92,50],wise:[59,29,55,30,92],clearli:[6,16],wish:42,o1alcc:87,displai:[0,11,21],troubl:[29,55],asynchron:[0,58,11,36,69,16,70,34,28],record:[0,41,55,56,17,18,53,31,6,62,15,66,45,58,70,13,93,75,28,86],btfindlongresrang:18,blockbas:49,ensur:[83,55,17,58,64,66,69,70,13,57,6,24,25,28,29,81,9,31,8,40,34,88,15,89,32,36,50],indefinit:[55,56,58,62,64,65],mps_headers:34,tracepol:[6,16],otherwis:[0,38,54,17,18,53,66,70,2,33,57,41,5,42,6,25,28,80,81,49,11,46,12,13,34,86,35,83,89,32],problem:[52,53,55,58,61,65,69,70,71,73,13,41,6,23,24,8,29,30,25,11,45,33,88,15,89,49,36],walter:92,tracesetismemb:6,succe:[0,29,6,45,83,28],lfp:30,foster:15,multipli:28,immobil:73,evalu:[30,25,64,47,16,12,32,33,83],pascal:[11,15],"int":[53,81,18,10,6,82,47,70,31,40,33,36,50],mask:[81,18],dure:[0,53,55,56,18,59,60,61,1,64,66,70,71,73,83,41,42,6,24,79,28,29,49,45,40,34,86,32,36,37],dish:70,xerox:30,pig:73,multic:61,sptab:36,implement:[0,38,54,55,56,17,18,53,59,62,64,65,66,52,69,39,71,73,4,40,57,41,20,58,5,21,76,6,90,24,7,31,26,29,30,44,10,8,11,45,91,12,49,33,84,79,86,47,42,15,36,83,89,16,82,32,70,51,25,50,37],erik:[0,15],protocolsomeclassstruct:40,ing:15,resunimpl:33,eric:30,probabl:[41,29,81,18,53,10,66,52,69,70,71,33,36,28],misleadingli:25,mutual:[42,30,37],sizenews:49,nonetheless:83,allow:[0,52,55,56,17,18,53,61,65,68,69,13,71,1,4,33,57,41,58,21,6,24,49,25,26,27,28,29,81,10,8,45,12,40,34,79,15,83,77,90,32,70,36,50],detail:[38,52,56,17,18,59,61,64,67,70,40,41,42,49,8,29,44,25,11,45,47,13,86,83,89,32],innermost:46,mps_fmt_check_fenceposts_t:45,ultrasparc:64,other:[0,38,54,55,56,17,18,53,59,60,61,62,64,67,52,69,39,71,73,3,4,33,57,41,49,58,5,21,43,6,77,48,78,24,7,8,27,28,80,29,81,10,25,11,45,12,91,13,34,84,79,86,35,47,42,88,68,15,36,83,76,89,16,32,40,70,93,22,50,37],lookup:[86,57,18,61,64,65,16,25,17],futur:[52,29,81,62,35,17,58,44,10,49,47,66,89,46,79,31,40,56,33,13,57],rememb:[30,29,52,56,17,18,42,71,54,15,41,53,24,66,70,64,33,81,28,37],varieti:[29,62,56,58,18,21,10,44,15,65,67,45,16,71,4,51,13,50,37],milutinov:30,siginvalid:6,"0x000000010000341f":16,mps_rank_exact:[54,8,81,78,70,71,25,36],kent:[92,30],naggum:[0,15],repeat:[86,61,25,45,89,69,1,83,36],attardi:[92,30,15],foostruct:79,pooldestroi:79,june:[45,30],neeli:30,throughout:[18,88,47,66,69,70,36],mps_objects_step_t:45,mps_collect:28,vein:58,stai:[58,8],multithread:30,experienc:29,philipp:30,eof:31,eqv_hash:25,refsig:79,pdp:[72,57,30],reliabl:[38,29,81,86,80,15,41,24,16,50,25,83,36,28],indirectli:[66,29,24,40],rule:[89,33,36,25],pool_class:34,gdbinit:[13,16],portion:[71,56,28,18,73],emerg:[89,6,49,17,25],tightest:88,auxiliari:[71,64,37],suballoc:[29,59,88,11,64,23,70],decemb:30,invari:[10,82,64,66,69,70,15,79],emeri:30,mps_io_flush:[31,13]},objtypes:{"0":"std:option","1":"std:envvar","2":"c:type","3":"c:function","4":"c:macro"},titles:["11. Messages","17. Debugging pools","5. AMCZ (Automatic Mostly-Copying Zero-rank)","18. Software versions","2. Building the Memory Pool System","Memory Pool System Kit Open Source License","1. Arena","4. Checking","7. AWL (Automatic Weak Linked)","8. LO (Leaf Object)","2. Error handing","1. Overview","14. Segregated allocation caches","18. Telemetry","Memory Management Glossary","4. Memory management in various languages","4. Debugging with the Memory Pool System","3. The critical path","2. Bit tables","Pool reference","Memory Pool System","19. Library version mechanism","4. AMC (Automatic Mostly-Copying)","Introduction to memory management","3. Recycling techniques","6. Advanced topics","9. The generic fix function","6. AMS (Automatic Mark and Sweep)","3. Arenas","5. Frequently Asked Questions","Bibliography","1. Plinth","7. Scanning","17. General MPS types","6. Object formats","10. Garbage collection","3. Garbage collecting a language with the Memory Pool System","1. Choosing a pool class","1. Overview of the Memory Pool System","16. Allocation frames","16. Protocol inheritance","6. Collection framework","14. The lock module","5. Tuning the Memory Pool System for performance","Design","15. Debugging features for client objects","15. Allocation patterns","1. Interface conventions","Internals","3. Coalescing block structure","7. Configuration","Reference","Memory Management Glossary: G","Memory Management Glossary: F","Memory Management Glossary: E","Memory Management Glossary: D","Memory Management Glossary: C","Memory Management Glossary: B","Memory Management Glossary: A","Memory Management Glossary: O","Memory Management Glossary: N","Memory Management Glossary: M","Memory Management Glossary: L","Memory Management Glossary: K","Memory Management Glossary: I","Memory Management Glossary: H","Memory Management Glossary: W","Memory Management Glossary: V","Memory Management Glossary: U","Memory Management Glossary: T","Memory Management Glossary: S","Memory Management Glossary: R","Memory Management Glossary: Q","Memory Management Glossary: P","10. MV (Manual Variable)","Memory Management Glossary: Z","12. MVT (Manual Variable Temporal)","19. Weak references","13. SNC (Stack No Checking)","5. Pool class interface","4. Pools","9. Roots","8. Finalization","5. Allocation","9. MFS (Manual Fixed Small)","Guide","13. Location dependency","2. Platforms","2. Allocation techniques","12. Finalization","Contact us","11. MVFF (Manual Variable First Fit)","Acknowledgements","8. Threads"],objnames:{"0":["std","option","option"],"1":["std","envvar","environment variable"],"2":["c","type","C type"],"3":["c","function","C function"],"4":["c","macro","C macro"]},filenames:["topic/message","topic/debugging","pool/amcz","design/version","guide/build","copyright","design/arena","design/check","pool/awl","pool/lo","topic/error","mmref/begin","topic/cache","topic/telemetry","glossary/index","mmref/lang","guide/debug","topic/critical","design/bt","pool/index","index","design/version-library","pool/amc","mmref/index","mmref/recycle","guide/advanced","design/fix","pool/ams","topic/arena","mmref/faq","mmref/bib","topic/plinth","topic/scanning","design/type","topic/format","topic/collection","guide/lang","pool/intro","guide/overview","topic/frame","design/protocol","design/collection","design/lock","guide/perf","design/index","design/object-debug","topic/pattern","topic/interface","topic/internals","design/cbs","design/config","topic/index","glossary/g","glossary/f","glossary/e","glossary/d","glossary/c","glossary/b","glossary/a","glossary/o","glossary/n","glossary/m","glossary/l","glossary/k","glossary/i","glossary/h","glossary/w","glossary/v","glossary/u","glossary/t","glossary/s","glossary/r","glossary/q","glossary/p","pool/mv","glossary/z","pool/mvt","topic/weak","pool/snc","design/class-interface","topic/pool","topic/root","design/finalize","topic/allocation","pool/mfs","guide/index","topic/location","topic/platform","mmref/alloc","topic/finalization","contact","pool/mvff","mmref/credit","topic/thread"]}) \ No newline at end of file | Search.setIndex({objects:{"":{mps_rank_t:[82,2,1,""],CBSDelete:[50,3,1,""],mps_fmt_fencepost_wrap:[46,3,1,""],mps_ap_alloc_pattern_reset:[47,3,1,""],mps_arena_roots_walk:[82,3,1,""],mps_arena_collect:[29,3,1,""],CBSBlockDescribe:[50,3,1,""],MPS_SAC_CLASS_LIMIT:[12,4,1,""],mps_io_destroy:[32,3,1,""],MPS_RES_FAIL:[10,4,1,""],LockInit:[43,3,1,""],mps_definalize:[90,3,1,""],ACT_ON_RANGE:[18,3,1,""],LockClaim:[43,3,1,""],mps_thread_dereg:[94,3,1,""],"-d":[13,0,1,"cmdoption-mpseventsql-d"],MPS_FIX12:[33,3,1,""],"-f":[13,0,1,"cmdoption-mpseventsql-f"],mps_fmt_check_fenceposts_t:[46,3,1,""],mps_pool_destroy:[81,3,1,""],"-l":[13,0,1,"cmdoption-mpseventtxt-l"],"-o":[13,0,1,"cmdoption-mpseventsql-o"],"-i":[13,0,1,"cmdoption-mpseventsql-i"],MPS_RM_PROT:[82,4,1,""],mps_reserve:[84,3,1,""],"-t":[13,0,1,"cmdoption-mpseventsql-t"],mps_message_type_gc_start:[36,3,1,""],"-v":[13,0,1,"cmdoption-mpseventsql-v"],mps_ap_create:[84,3,1,""],"-p":[13,0,1,"cmdoption-mpseventsql-p"],"-r":[13,0,1,"cmdoption-mpseventsql-r"],mps_class_lo:[9,3,1,""],Byte:[34,2,1,""],MPS_OS_W3:[88,4,1,""],BTFindResRangeHigh:[18,3,1,""],mps_rank_exact:[82,3,1,""],mps_key_t:[28,2,1,""],mps_ap_alloc_pattern_begin:[47,3,1,""],mps_ap_s:[84,2,1,""],CBSFinish:[50,3,1,""],mps_chain_create:[36,3,1,""],mps_sac_t:[12,2,1,""],MPS_WORD_WIDTH:[88,4,1,""],mps_ap_t:[84,2,1,""],MPS_BUILD_GC:[88,4,1,""],mps_label_t:[48,2,1,""],MPS_RES_COMMIT_LIMIT:[10,4,1,""],mps_reg_scan_t:[82,2,1,""],mps_tramp:[94,3,1,""],mps_clock:[32,3,1,""],mps_class_amc:[22,3,1,""],ACT_ON_RANGE_HIGH:[18,3,1,""],mps_lib_memset:[32,3,1,""],mps_alloc_pattern_t:[47,2,1,""],mps_arena_start_collect:[29,3,1,""],LockReleaseGlobalRecursive:[43,3,1,""],mps_fix:[33,3,1,""],mps_arena_clamp:[29,3,1,""],mps_gen_param_s:[36,2,1,""],CBSDescribe:[50,3,1,""],mps_sac_destroy:[12,3,1,""],MPS_PF_LII6GC:[88,4,1,""],MPS_T_WORD:[88,4,1,""],mps_arena_create:[29,3,1,""],LockClaimGlobalRecursive:[43,3,1,""],mps_lib_get_EOF:[32,3,1,""],mps_fmt_create_auto_header:[35,3,1,""],Rank:[34,2,1,""],mps_message_type:[0,3,1,""],BTFindLongResRange:[18,3,1,""],mps_awl_find_dependent_t:[8,2,1,""],mps_lib_FILE:[32,2,1,""],mps_lib_get_stderr:[32,3,1,""],mps_chain_t:[36,2,1,""],MPS_T_ULONGEST:[88,4,1,""],MPS_FIX2:[33,3,1,""],MPS_RESERVE_BLOCK:[84,3,1,""],mps_fmt_put_fencepost_t:[46,3,1,""],MPS_FIX1:[33,3,1,""],mps_mvt_size:[77,3,1,""],mps_telemetry_label:[13,3,1,""],MPS_RES_RESOURCE:[10,4,1,""],BTFindShortResRangeHigh:[18,3,1,""],mps_alloc:[84,3,1,""],MPS_SAC_FREE_FAST:[12,3,1,""],MPS_PF_LII3GC:[88,4,1,""],CBSBlockBase:[50,3,1,""],MPS_RES_MEMORY:[10,4,1,""],mps_lib_get_stdout:[32,3,1,""],mps_formatted_objects_stepper_t:[35,2,1,""],MPS_PF_W3I6MV:[88,4,1,""],mps_mvff_size:[92,3,1,""],mps_sac_free:[12,3,1,""],Epoch:[34,2,1,""],mps_fmt_adjust_fencepost_t:[46,3,1,""],mps_message_type_disable:[0,3,1,""],mps_io_write:[32,3,1,""],mps_ld_s:[87,2,1,""],Ref:[34,2,1,""],TraceSet:[34,2,1,""],mps_arena_class_vm:[29,3,1,""],BTCopyInvertRange:[18,3,1,""],mps_fmt_t:[35,2,1,""],mps_sac_alloc:[12,3,1,""],MPS_PF_XCI3LL:[88,4,1,""],mps_arena_create_k:[29,3,1,""],mps_sac_flush:[12,3,1,""],LockClaimRecursive:[43,3,1,""],mps_class_amcz:[2,3,1,""],mps_message_finalization_ref:[90,3,1,""],CBSSetMinSize:[50,3,1,""],mps_args_none:[28,4,1,""],mps_telemetry_flush:[13,3,1,""],MPS_OS_XC:[88,4,1,""],ArenaFinalize:[83,3,1,""],mps_arena_spare_commit_limit_set:[29,3,1,""],MPS_PF_XCI3GC:[88,4,1,""],mps_rank_weak:[82,3,1,""],mps_arena_create_v:[29,3,1,""],mps_mvff_free_size:[92,3,1,""],mps_ss_t:[33,2,1,""],mps_arena_reserved:[29,3,1,""],mps_arena_unsafe_restore_protection:[29,3,1,""],mps_message_discard:[0,3,1,""],mps_free:[84,3,1,""],mps_message_type_t:[0,2,1,""],Word:[34,2,1,""],BTGet:[18,3,1,""],mps_arena_class_cl:[29,3,1,""],mps_io_flush:[32,3,1,""],mps_clock_t:[48,2,1,""],mps_class_awl:[8,3,1,""],LockReleaseRecursive:[43,3,1,""],MPS_RES_PARAM:[10,4,1,""],mps_fmt_auto_header_s:[35,2,1,""],mps_commit:[84,3,1,""],mps_message_t:[0,2,1,""],CBSInit:[50,3,1,""],MPS_RES_OK:[10,4,1,""],mps_pool_walk:[46,3,1,""],MPS_PF_W3I3MV:[88,4,1,""],mps_ld_add:[87,3,1,""],mps_class_mv_debug:[75,3,1,""],mps_ap_destroy:[84,3,1,""],mps_arena_commit_limit:[29,3,1,""],mps_clocks_per_sec:[32,3,1,""],mps_root_t:[82,2,1,""],mps_class_mvff_debug:[92,3,1,""],mps_ap_fill:[84,3,1,""],MPS_WORD_SHIFT:[88,4,1,""],mps_class_mv:[75,3,1,""],MPS_SCAN_END:[33,3,1,""],mps_lib_fputc:[32,3,1,""],CONFIG_PLINTH_NONE:[32,4,1,""],BTCopyOffsetRange:[18,3,1,""],MPS_PF_STRING:[88,4,1,""],mps_pool_check_free_space:[1,3,1,""],CBSBlockLimit:[50,3,1,""],mps_fmt_create_A:[35,3,1,""],mps_lib_fputs:[32,3,1,""],mps_addr_fmt:[35,3,1,""],mps_lib_telemetry_control:[32,3,1,""],mps_arena_expose:[29,3,1,""],mps_arena_destroy:[29,3,1,""],mps_fmt_B_s:[35,2,1,""],Addr:[34,2,1,""],Index:[34,2,1,""],MPS_TELEMETRY_DATABASE:[13,1,1,"-"],mps_mvt_free_size:[77,3,1,""],mps_arena_walk:[46,3,1,""],MPS_PF_ALIGN:[88,4,1,""],Serial:[34,2,1,""],"-h":[13,0,1,"cmdoption-mpseventcnv-h"],LockReleaseGlobal:[43,3,1,""],BTIsSetRange:[18,3,1,""],mps_telemetry_get:[13,3,1,""],CONFIG_VAR_RASH:[10,4,1,""],Bool:[34,2,1,""],MPS_TELEMETRY_CONTROL:[13,1,1,"-"],BTFindResRange:[18,3,1,""],mps_thr_t:[94,2,1,""],mps_class_mvff:[92,3,1,""],RefSet:[34,2,1,""],MPS_PF_FRI6GC:[88,4,1,""],MPS_OS_LI:[88,4,1,""],mps_message_type_enable:[0,3,1,""],mps_arena_extend:[29,3,1,""],MPS_TELEMETRY_FILENAME:[13,1,1,"-"],mps_class_snc:[79,3,1,""],mps_root_scan_t:[82,2,1,""],mps_message_queue_type:[0,3,1,""],mps_pool_check_fenceposts:[1,3,1,""],mps_message_gc_start_why:[36,3,1,""],MPS_RM_CONST:[82,4,1,""],Accumulation:[34,2,1,""],BTDestroy:[18,3,1,""],CBSInsert:[50,3,1,""],mps_addr_t:[48,2,1,""],mps_roots_stepper_t:[82,2,1,""],MPS_BUILD_LL:[88,4,1,""],mps_pool_create:[81,3,1,""],mps_message_get:[0,3,1,""],LockReleaseMPM:[43,3,1,""],CBSFindFirst:[50,3,1,""],mps_message_clock:[0,3,1,""],BTFindShortResRange:[18,3,1,""],mps_telemetry_control:[13,3,1,""],mps_pool_create_v:[81,3,1,""],mps_message_gc_live_size:[36,3,1,""],CBSIterateLarge:[50,3,1,""],BTSetRange:[18,3,1,""],RootVar:[34,2,1,""],mps_amc_apply:[22,3,1,""],mps_thread_reg:[94,3,1,""],LockClaimGlobal:[43,3,1,""],Align:[34,2,1,""],mps_fmt_A_s:[35,2,1,""],mps_objects_step_t:[46,3,1,""],mps_debug_class:[46,3,1,""],CBSIterate:[50,3,1,""],mps_fmt_fwd_t:[35,2,1,""],MPS_ARGS_BEGIN:[28,3,1,""],BTIsResRange:[18,3,1,""],Fun:[34,2,1,""],mps_arena_release:[29,3,1,""],MPS_ARGS_ADD:[28,3,1,""],mps_root_create_table_masked:[82,3,1,""],mps_arena_step:[29,3,1,""],mps_arena_spare_commit_limit:[29,3,1,""],MPS_SAC_ALLOC_FAST:[12,3,1,""],Compare:[34,2,1,""],mps_collections:[29,3,1,""],mps_ap_create_v:[84,3,1,""],mps_align_t:[48,2,1,""],MPS_RES_UNIMPL:[10,4,1,""],mps_sac_class_s:[12,2,1,""],mps_mv_free_size:[75,3,1,""],BTSet:[18,3,1,""],Res:[34,2,1,""],mps_ap_alloc_pattern_end:[47,3,1,""],mps_arena_unsafe_expose_remember_protection:[29,3,1,""],mps_ap_create_k:[84,3,1,""],mps_message_type_gc:[36,3,1,""],mps_arena_has_addr:[29,3,1,""],MPS_ARCH_I3:[88,4,1,""],CBSFindLast:[50,3,1,""],Size:[34,2,1,""],mps_io_create:[32,3,1,""],mps_lib_assert_fail:[32,3,1,""],mps_arena_t:[29,2,1,""],mps_amc_apply_stepper_t:[22,2,1,""],mps_ap_frame_push:[40,3,1,""],mps_fmt_scan_t:[35,2,1,""],mps_ld_reset:[87,3,1,""],LockFinish:[43,3,1,""],mps_root_create_fmt:[82,3,1,""],MPS_ARGS_DONE:[28,3,1,""],MPS_SCAN_BEGIN:[33,3,1,""],BTCreate:[18,3,1,""],mps_stack_scan_ambig:[82,3,1,""],mps_arena_committed:[29,3,1,""],MPS_ARCH_I6:[88,4,1,""],mps_sac_create:[12,3,1,""],mps_arena_commit_limit_set:[29,3,1,""],ULongest:[34,2,1,""],mps_fmt_pad_t:[35,2,1,""],mps_pool_debug_option_s:[1,2,1,""],mps_root_destroy:[82,3,1,""],mps_root_create:[82,3,1,""],mps_arena_class_t:[29,2,1,""],mps_ld_merge:[87,3,1,""],MPS_ARGS_END:[28,3,1,""],mps_word_t:[48,2,1,""],MPS_RES_IO:[10,4,1,""],mps_finalize:[90,3,1,""],mps_ld_t:[87,2,1,""],BTCopyRange:[18,3,1,""],mps_telemetry_intern:[13,3,1,""],MPS_FIX_CALL:[33,3,1,""],Pointer:[34,2,1,""],CBSFindLargest:[50,3,1,""],mps_res_t:[10,2,1,""],mps_class_ams_debug:[27,3,1,""],mps_lib_memcpy:[32,3,1,""],mps_bool_t:[48,2,1,""],MPS_BUILD_MV:[88,4,1,""],MPS_PF_FRI3GC:[88,4,1,""],BTSize:[18,3,1,""],mps_mv_size:[75,3,1,""],CONFIG_VAR_HOT:[10,4,1,""],TraceId:[34,2,1,""],Attr:[34,2,1,""],mps_root_create_table:[82,3,1,""],mps_tramp_t:[94,2,1,""],mps_ap_frame_pop:[40,3,1,""],mps_ld_isstale:[87,3,1,""],CBSBlockSize:[50,3,1,""],mps_rank_ambig:[82,3,1,""],LockSize:[43,3,1,""],mps_class_ams:[27,3,1,""],mps_class_mfs:[85,3,1,""],Shift:[34,2,1,""],mps_addr_pool:[81,3,1,""],BTResRange:[18,3,1,""],MPS_RES_LIMIT:[10,4,1,""],mps_telemetry_reset:[13,3,1,""],mps_alloc_pattern_ramp_collect_all:[47,3,1,""],MPS_PF_XCI6LL:[88,4,1,""],mps_arena_spare_committed:[29,3,1,""],mps_fmt_skip_t:[35,2,1,""],mps_io_t:[32,2,1,""],mps_fmt_isfwd_t:[35,2,1,""],BTFindLongResRangeHigh:[18,3,1,""],mps_alloc_pattern_ramp:[47,3,1,""],mps_fmt_class_t:[35,2,1,""],mps_class_t:[81,2,1,""],AccessSet:[34,2,1,""],mps_frame_t:[40,2,1,""],mps_ap_trip:[84,3,1,""],mps_pool_t:[81,2,1,""],mps_message_gc_not_condemned_size:[36,3,1,""],mps_chain_destroy:[36,3,1,""],CONFIG_VAR_COOL:[10,4,1,""],mps_fmt_create_B:[35,3,1,""],BTRes:[18,3,1,""],mps_message_type_finalization:[90,3,1,""],mps_lib_memcmp:[32,3,1,""],mps_arg_s:[28,2,1,""],mps_arena_park:[29,3,1,""],mps_telemetry_set:[13,3,1,""],mps_rm_t:[82,2,1,""],mps_class_mvt:[77,3,1,""],mps_root_create_reg:[82,3,1,""],mps_fmt_destroy:[35,3,1,""],mps_arena_formatted_objects_walk:[35,3,1,""],mps_message_gc_condemned_size:[36,3,1,""],mps_message_poll:[0,3,1,""],MPS_OS_FR:[88,4,1,""]}},terms:{scriptwork:51,nurseri:[53,57,61,63,47,74,36],ru_utim:32,orthogon:[31,38],mps_arena_roots_walk:[82,29],demand:[21,72,74],btset:18,four:[30,82,58,18,70,67,69,7,72,73,50,75],secondli:[6,62,17,15],prefix:[48,4,6,51,58],circuitri:62,stronger:58,oldest:74,effienc:46,forget:[29,25],whose:[0,54,48,66,68,69,40,1,13,42,77,22,76,65,25,28,81,82,8,12,41,35,87,36,15,90,33,71,93,94,37,38],accur:[30,55,74,63,70,80,50],"const":[32,13,28,36],find_depend:8,mpsioan:32,albuquerqu:31,mps_telemetry_flush:[32,13,29],concret:[59,45,6,46,34,51],swap:[58,60,62,66,68,71,72,74,29],under:[39,56,57,5,18,68,44,10,50,48,46,90,74,3,41,84,29,38],sped:[0,15],spec:34,merchant:5,digit:[4,73,62,31,88],everi:[0,54,17,60,61,62,65,70,40,72,13,42,7,25,29,30,82,31,10,46,41,35,34,16,50,37],risk:[50,45],mps_final:[54,90,83,25],macraki:[93,58],"void":[0,54,18,60,48,70,13,2,1,75,41,43,77,6,79,25,27,28,29,81,30,82,9,31,32,8,83,46,47,12,22,34,35,85,87,36,88,84,90,50,92,94,37,51,72],rise:71,risc:63,lofix:17,implicit:[57,41,70,40,71],quantiz:74,addrstruct:34,jacob:31,affect:[36,18,79,44,70,11,90,67,46,69,16,71,51,57,29],mps_pool_check_fencepost:[46,1],poorli:[30,24,12,65],deleterang:50,vast:89,agesen:31,extend_s:[92,75,85],kilobyt:[64,62,36,37,58],ferreira:31,factori:72,mps_arena_formatted_objects_walk:[22,71,35,29],vector:[82,63,58,18,68,25,46,59,71,33,37],terabyt:[70,58],cmu:31,parenthes:48,initialis:[50,43],bevan:93,x86_64:4,unmap:[54,62,68,69,71,72,29],lockw3:10,deutsch:[56,31,15],mps_lib_get_stdout:32,naiv:41,direct:[53,55,56,57,5,18,32,11,65,69,41,84,51],batch:15,nail:[26,61,74],consequ:[9,10,51,8,79,2,25,27,94,29],second:[84,17,88,44,32,62,65,49,24,71,25,41,13,37,29,38],doubt:5,aggreg:[68,59],type_fwd:37,p_v:[84,12],ap_o:[79,84,8],thisclass:41,mps_key_vmw3_top_down:[28,29],even:[0,53,56,57,17,18,65,66,67,69,70,71,72,74,84,42,59,5,77,24,25,26,29,30,33,46,47,12,13,35,15,90,16,50,94,37,51],hide:[46,68],make_symbol:[84,25],arena_poll_max:6,neg:[81,87,18,32,35,29],asid:12,weren:57,btcopyoffsetrang:18,children:[53,61,70],cheng:31,supplier:30,"new":[0,39,57,58,18,54,61,62,63,65,67,53,70,40,72,74,19,4,41,42,20,43,6,24,50,8,29,81,30,82,31,10,25,46,48,92,13,35,80,87,36,88,89,15,84,90,33,71,37,38],mps_ss_t:[82,17,8,33,37,78,71,25,35],upward:[92,18],ever:[30,82,88,6,11,70,13,94],singhal:[31,74],protocolensuresomeclass:41,elimin:[30,57,17,62,89,15,67,71,72,84],port_ref:25,dahl:[31,15],mps_arena_class_cl:[28,37,29],mem:[34,50],splinter:[46,6],here:[0,17,18,63,4,13,42,21,44,6,25,29,82,10,46,84,87,36,90,16,33,37,38],block_requiring_fin:90,met:[67,5],undef:[48,15],studio:[4,88],subword:18,debugg:[13,16,82,29],path:[84,20,57,17,49,10,33,65,37,67,46,16,71,72,74,41,13,66,34,52],mps_message_type_dis:0,interpret:[0,81,82,87,57,1,44,33,70,86,15,90,16,40,80,25,13,37,29],michal:31,precis:[53,30,55,58,31,62,74,69,7,71,50,35],findshortresrangehigh:18,bitmask:[82,13,58],drj:[6,34,18,80],scaveng:[53,71,70,57,31],permit:[0,30,57,59,5,46,77,6,50,89,68,39,70,51,74,41,84,62,29],krishnan:31,aka:[6,88,18,45],prolog:[53,57,11,15],mps_lib_telemetry_control:32,basereturn:[18,50],joshua:31,frombas:18,norsk:31,"000ae0397335c8b5":13,mps_key_chain:[22,1,2,25,27,28,37],skippabl:37,"_mps_fix":17,brought:45,mps_releas:21,unix:[53,58,60,10,62,71,72,32,4,94,34,51],mps_sac_free_fast:12,brk:[71,58,59],amherst:31,strai:46,printf:[0,25],newspac:[61,70],mps_args_don:28,total:[30,36,44,6,62,77,24,16,71,80,25,57,34,75,92,37,29],cbsfindlast:50,mps_fmt_create_b:35,unit:[42,56,57,17,60,32,6,37,72,73,74,34,85,35,62,58],highli:[39,30,17,15,37],bookkeep:[30,24,11,62,15],describ:[53,54,57,17,59,60,62,65,70,40,72,74,3,4,75,13,58,42,21,6,24,50,25,27,30,82,32,8,11,86,12,92,34,35,80,36,48,89,15,84,33,41,71,37,51,38],would:[84,54,55,57,17,18,61,63,67,2,13,58,42,5,77,6,24,25,29,30,82,10,8,11,46,12,41,35,85,87,34,32,89,15,90,83,50,37,72],tail:[46,31,15],unpredict:30,vol:31,edward:[62,31,15],call:[0,39,56,57,17,18,54,60,62,1,64,65,67,53,70,40,72,74,4,34,58,42,50,59,43,77,6,78,79,24,7,8,27,28,29,81,30,82,9,10,25,11,46,47,12,92,13,35,80,87,36,48,32,89,69,15,37,84,90,16,83,33,41,71,94,22,51],card:[57,31,74],"0x1003fb148":16,recommend:[17,32,11,48,37,12,33,94,35,38],indiana:31,promptli:[0,54,11,24,72,84],type:[0,54,55,56,57,17,18,60,62,63,64,65,67,68,69,70,40,2,74,75,34,58,42,20,59,88,77,6,79,24,7,8,27,28,29,81,30,82,9,31,45,10,25,11,92,46,47,12,50,13,35,85,80,87,36,48,72,94,32,15,37,84,90,16,33,41,71,1,22,51,52],until:[0,54,57,59,60,61,65,70,71,74,43,6,24,25,29,81,30,82,9,80,83,47,12,84,35,87,36,90,33,37],buddi:[54,56,58,31,30,89,65,23,67,71],mps_arch_m2:88,mps_arch_m4:88,buckets_find_depend:25,mps_arch_m6:88,relax:25,relat:[53,54,55,56,57,58,59,60,61,62,63,64,65,67,68,69,70,71,72,74,13,7,30,11,41,35,87,34,15,50],notic:[31,48,18,5,74],warn:[39,45,12,33,34,94,84],exce:[30,36,18,77,6,13],mps_pf_string:[88,21],phd:31,wari:6,excl:84,hold:[0,54,55,58,18,62,65,40,72,4,84,43,6,25,29,81,82,12,34,35,86,36,90,71,94,38],overrun:46,must:[0,39,56,57,17,18,54,60,61,62,1,65,68,53,70,40,2,74,4,75,34,42,50,59,5,43,77,6,78,79,24,7,8,26,27,28,29,81,30,82,9,32,25,11,46,12,92,13,35,85,80,87,36,48,72,89,69,37,84,90,16,83,33,41,71,94,22,51,38],shoot:30,btfindshortresrangehigh:18,springer:31,join:[91,48],room:[46,36,68],err:6,restor:[0,57,31,43,15,71,33,37,29],chenei:[53,70,57,31],work:[39,53,57,17,18,62,63,65,67,70,71,72,4,13,42,44,6,24,8,27,29,30,82,31,83,80,11,12,34,36,89,15,84,90,50,93,37,38],btsetrang:18,pierc:31,doubleword:[56,63,73],mccaughan:93,coalesc:[54,55,56,57,58,59,20,77,30,45,89,67,71,50,63],sharp:47,poolfinish:80,hansen:[93,31],root:[39,53,55,57,17,59,62,67,69,70,71,72,74,4,75,41,58,42,20,77,6,78,24,50,25,27,29,82,9,31,45,8,83,22,34,85,86,15,84,90,33,92,52,94,37,38],cbsst:50,pierr:31,overrid:[41,17],defer:[56,57,59,31,24,47,72,50,84,76],obj_fmt_:[35,37],give:[0,30,77,87,36,46,44,32,88,11,48,67,39,7,71,61,57,13,29,38],mps_ld_reset:[87,25],jelica:31,indic:[0,54,56,59,60,48,70,40,72,13,42,43,6,24,50,32,26,29,82,10,25,83,47,92,41,35,80,87,34,88,33,71,37,51,38],sick:31,attrbuf:34,caution:[82,8,90,25,19,84,35,52],fibonacci:[54,89,58],want:[39,53,18,72,74,4,13,42,6,32,28,29,30,82,10,25,46,12,22,34,35,16,37],noprint:16,mysegclass:41,mps_key_mvt_reserve_depth:[77,28],keep:[58,65,67,70,71,72,74,17,42,43,6,78,24,8,29,30,9,25,50,11,46,36,89,15,90,91,33,37,51],unsign:[0,50,82,87,59,18,88,32,6,25,48,37,7,12,8,13,28,34,51],tediou:30,motion:[69,57,31,29,74],vanish:16,end:[54,55,17,18,60,65,71,72,84,6,25,28,29,82,10,47,48,41,35,90,16,50,37,38],"0x000000010000206b":16,quot:[54,62,48,67,71,37],mps_tramp_t:94,ordinari:[72,62,57,35,8],findfirst:50,classifi:[54,74],revisit:31,how:[0,39,56,57,17,18,54,62,70,72,58,42,5,6,49,24,25,29,81,30,82,31,8,11,46,12,13,35,80,36,89,16,33,37,51,38],hot:[57,17,10,66,68,72,4,13,51],recoveri:31,env:16,"000ae0397333bc6d":13,answer:[30,57,37,18,38],symposium:31,ancestor:15,config:[34,51,21],updat:[53,54,56,57,17,62,65,69,71,72,34,58,42,6,24,32,25,29,81,30,31,10,50,48,13,35,80,33,37,51],lam:31,simmon:93,recogn:[10,84,87,8],lai:37,after:[0,54,56,57,17,62,1,69,72,74,4,13,58,42,21,44,6,78,79,24,25,28,29,30,82,10,50,46,47,12,41,35,87,32,43,89,15,84,90,16,33,94,37,51,38],lovemor:93,"0x0000000100011ded":16,diagram:[24,57,84],befor:[84,54,17,18,62,48,71,1,13,58,43,6,24,25,28,29,30,82,10,8,46,22,41,87,89,15,90,33,92,37,38],wrong:[30,86,36,17,77,10,11,16,92,34,75,37],mps_tramp:94,arch:[42,51,21],parallel:[53,30,57,31,65,70,71,74,35],averag:[34,63],poolmvff:50,errror:82,type_port:25,attempt:[56,57,17,18,62,71,72,74,59,77,80,29,30,11,83,46,84,35,89,15,50,37],third:[17,31,88,44,49,24,25,34,37],opaqu:[56,43,60,48,70,87],grant:71,baker:[57,58,31,60,63,15,68,70],cbsiter:50,perform:[0,53,56,57,17,18,54,62,65,70,71,72,74,4,84,42,20,43,44,24,7,8,29,30,82,9,31,50,11,86,46,41,35,80,87,36,89,15,77,90,16,33,37,38],type_:[37,8],maintain:[56,57,17,59,62,63,67,70,71,72,42,43,6,29,82,12,41,85,86,50,93,37,51],environ:[72,30,58,31,43,60,32,74,15,37,84,16,59,25,4,94,13,51,52],reloc:[42,57,58,71,72,35],finalis:[80,43],exclus:[43,37,70,94,35,38],mps_telemetry_reset:13,lambda:[90,16,25],order:[53,54,56,57,17,59,61,62,63,65,66,67,70,40,72,4,13,58,43,6,24,7,25,26,28,30,31,8,33,83,12,92,34,89,15,84,90,16,50,71,94,37,51],finaliz:[26,67,90,72,25],decl:51,origin:[54,17,18,45,6,15,67,90,71,72,25,93,35],mpstd:[34,88,51,21],composit:[68,71,57,15],feedback:91,afip:31,diagnos:13,arena_class:29,over:[56,57,17,18,62,1,71,74,42,59,77,6,7,25,29,82,32,11,46,47,34,35,87,36,83,50,37],config_var_cool:[10,16,51],message_type_o:0,becaus:[39,53,55,56,57,17,18,54,60,61,62,63,65,66,67,68,70,40,72,74,13,58,42,50,59,43,6,78,24,7,8,29,30,82,10,25,11,46,12,92,34,80,87,48,1,32,89,15,84,90,16,83,33,41,71,37,51],fifo:[54,63,59,92],poolcreat:80,dijkstra:[62,70,57,31],ulongest:34,flexibl:[39,42,82,56,60,89,67,12,29],vari:[30,57,17,54,44,77,71,51],btcopyrang:18,digest:74,sigplan:31,hashf:25,fit:[53,54,55,56,1,58,18,61,62,63,65,67,71,72,74,19,75,84,42,20,59,5,44,23,30,31,47,34,89,77,50,92,51,38],obj_pool:[35,37],fwrite:32,fix:[0,39,56,57,17,59,54,63,65,71,72,74,19,84,42,20,6,49,50,8,26,30,82,45,10,25,11,46,13,35,85,80,78,16,33,52,37,51,38],arenaent:6,better:[81,54,82,37,17,18,89,33,11,35,84,87,66,72,8,4,38,34,29,9],drawback:24,fig:51,persist:[81,82,36,31,47,12,33,35,29],comprehens:57,shire:93,hidden:[82,83,15],erlang:11,taiichi:31,easier:[42,30,11,89],define_pool_class:41,descend:15,them:[0,39,56,57,17,18,72,61,62,63,65,67,53,71,2,41,58,42,59,44,6,78,24,50,25,27,29,30,82,9,8,11,46,12,22,13,35,80,36,48,89,15,77,90,16,33,92,94,37,51,38],poolclass:[41,13,34,80],nygaard:15,thei:[0,39,56,57,17,18,54,72,62,63,65,67,68,53,70,71,2,74,41,58,42,50,59,43,77,6,76,24,7,8,26,27,29,30,82,9,31,45,32,25,11,46,12,34,35,80,87,36,48,1,89,69,15,37,84,78,83,33,94,22,38],fragment:[54,55,57,58,59,61,62,63,65,66,71,72,74,77,24,29,31,11,46,12,85,89,50,92,38],dirk:31,thee:13,safe:[0,30,82,87,84,59,31,43,77,94,15,54,39,70,71,48,34,28,37,29,79],mps_reg_scan_t:[82,37],debugmixin:46,"break":[84,58,18,88,77,83,15,46,16,71,72,33,41,92,4,75,37,29],band:[54,58,60,65,66,70],inescap:46,promis:[57,37],closer:89,interrupt:[30,24,5],itanium:88,yourself:[37,29,38],epdr:41,choic:[56,36,59,18,68,62,89,15,46,71,37],tendenc:[61,22],"0x000000010001f2d2":16,mps_messag:83,codewarrior:[4,51,88],string_hash:25,"0x7fff5fbff7a0":16,harri:31,xcppgc:88,accommod:[53,12,35],loss:[18,5,33],dest_ld:87,"000ae039733592f9":13,arrow:53,each:[0,53,55,56,57,17,18,54,60,61,62,63,65,67,68,70,71,72,74,4,13,58,42,50,59,88,44,6,24,7,8,28,29,30,82,10,25,11,46,12,34,35,85,80,87,36,48,1,89,37,84,77,78,16,33,41,94,22,51,38],debug:[0,56,59,70,13,1,4,75,41,20,43,22,32,27,29,45,10,25,11,46,12,34,35,86,84,16,50,92,37,52],went:[10,34],european:31,oblig:37,side:[46,84,48],mean:[53,54,17,18,60,62,63,65,66,67,68,70,40,72,74,75,13,58,42,59,5,77,22,7,8,26,29,30,82,9,10,25,46,48,92,34,35,80,87,15,84,90,16,33,41,71,94,37,51,38],data_scan:33,laboratori:31,poolepvm:18,btfindshortresrang:18,overflow:30,bufferfil:46,oppos:[30,34,56,57,65],popul:[77,12,15,18],mps_res_limit:[10,12],cbsbl:50,forgot:16,collector:[39,53,55,56,57,17,59,54,60,61,62,63,65,67,69,70,71,72,74,4,84,58,42,44,22,23,79,24,25,29,81,30,82,31,10,11,13,35,36,15,90,16,37],x86:[39,4,88,13,58],unbound:[0,72],network:[30,56,32,11,15,90,29],goe:[30,82,31,46,71,4,29],newli:[57,84,36],crucial:[24,25],truth:33,buckets_find:[87,25],content:[0,39,56,36,58,68,22,15,37,46,16,72,80,84,35,29],rewrit:[84,51],laid:[54,16],daniel:[93,31],adapt:[39,91,31,93],reader:33,mps_arena_create_v:29,protocolclass:41,forth:71,kiem:31,mccarthi:[53,13,62,31,15],cbsblockstruct:50,arizona:31,linear:[31,63,71,17,18],barrier:[56,58,72,63,65,67,68,70,71,2,74,75,84,42,77,6,79,8,27,29,82,9,31,45,83,22,34,35,85,15,16,92,94,37,38],worthwhil:30,mps_class_awl:[25,28,8],situat:[87,60,6,50,65,24,16,8,35,29],free:[39,53,55,56,57,58,18,54,60,61,62,63,65,66,67,69,70,71,72,74,4,75,42,59,77,6,24,8,29,30,82,10,80,11,46,12,84,85,1,89,15,90,50,92,37,38],ineffici:[77,89,63,11,24,71,72,74],mps_commit:[84,16,37,25],ian:31,cytron:31,hand:[30,17,18,20,10,48,37,59,72,8,34,35,52],mvt:[20,77,50,19,84,75,38],atc:[70,59],puzzl:25,epvm:18,assert_mpm:51,filter:[32,13,70,17],ish:46,iso:[57,58,31,21,32,15,48],isn:[30,57,17,47,80,46,24,16,25,34,51],"__int_64":[48,88],bufferstruct:80,"0x0000000000000000":16,subtl:[54,17,72],onto:[30,59,80,46,71,1,40],cbstest:[18,50],"0x0000000000000004":16,"0x0000000000000005":16,dimens:[68,71,31],rang:[58,18,60,62,74,67,46,69,77,71,72,50,34,37],kim:31,nhc:31,p_o:[84,16,12],hoop:80,independ:[42,56,9,31,65,29,51],wast:[18,44,89,11,65,12,74,85],rank:[55,17,59,2,67,71,72,19,20,79,25,28,82,9,8,83,34,78,16,33,38,37,52],necess:29,restrict:[84,58,32,8,65,46,90,50,40,51,74,71,4,35,29],hook:[6,82],instruct:[84,1,17,31,62,63,11,15,91,69,70,71,65,8,34,37,58],alreadi:[0,54,56,57,17,43,6,50,24,25,41,13,94,37],wrapper:[67,32,50,46,25],wasn:[10,12,17],tag_siz:25,agre:[0,15],flagella:[31,15],primari:[62,51,74],brock:31,"00000001003fc000":13,yuan:31,nomin:5,top:[39,30,36,18,6,50,67,16,71,25,22],epdrpoolclass:41,sometim:[0,54,56,57,58,18,60,65,53,69,70,71,72,74,4,59,24,8,30,46,15,90],amcscannail:16,timothi:31,toi:[0,82,87,44,25,90,16,33,13,37],too:[39,30,36,44,51,8,70,62,15,42,67,46,24,16,12,25,34,81,50,37,29],kanefski:31,epdralloc:41,mps_message_get:[0,62,36,90,25],upshot:87,john:[53,31,62,15,13,93],bttest:18,hewitt:[55,31],mps_build_cc:88,mps_fill_fencepost:46,tricolor:[67,70,71],tool:[30,31,21,32,62,88,11,15,72,4,13,51],tractofaddr:6,took:[84,87],"10g":16,mps_sac_class_:[71,12],incur:[55,2],serial:[32,6,34,31],somewhat:[25,71,17,74],conserv:[53,30,55,57,58,31,54,62,8,11,15,24,59,71,65,74,26,34],happili:83,simula:[31,15],config_var_rash:[10,72],mps_clock_t:[0,32,48],technic:[39,42,86,31,92,35,38],symptom:12,modula3:15,nmk:4,r4000:88,silli:18,target:[39,30,86,17,18,45,32,33,37,7,74,4,88,34,51],keyword:[57,64,48,71,2,1,75,20,77,22,79,8,27,28,29,81,9,84,85,92,37,52],cxref:88,provid:[39,54,57,17,18,60,62,63,70,71,2,74,4,41,42,50,59,5,43,22,79,24,7,32,27,29,30,82,9,25,10,8,11,46,12,13,35,80,87,72,89,15,37,84,90,91,33,1,6,38],lvalu:[84,12],tree:[54,59,45,6,65,66,46,71,50,4],mps_os_w3:[51,88],withington:[63,31,93],project:[39,86,31,15,91,4,37,51],matter:[24,87,58,31],mpmtype:[34,18],poolinit:[6,13,80],searchlimit:18,provis:[80,50],fashion:[62,90,15],entail:[24,57,17,35],mps_ap_frame_push:[79,40,59],ran:[34,12],mps_count_t:77,ram:[56,59,62,11,71,72,74,37,29],mind:[44,71,24,11],mine:31,bitfield:34,raw:[6,69,72],rat:51,lookup_in_fram:[13,16],manner:[46,5,80],increment:[39,53,57,58,54,62,63,65,67,70,71,72,74,84,42,6,24,8,29,30,31,10,80,34,15,94,37,38],infring:5,seen:[30,43,74,46,71,50,51],seem:[30,24,34,46,37],strength:[89,72],recreat:80,harper:31,latter:[67,72,18],cope:[30,82,62,8,90,74],client:[0,53,56,57,17,18,54,60,62,63,48,70,40,72,74,3,13,42,20,59,43,77,6,50,8,26,28,29,81,30,82,45,10,25,83,46,47,12,34,35,80,87,36,1,32,37,84,90,16,33,41,71,52,94,22,51,38],fwd2:37,thoma:31,thoroughli:34,memo:31,eagerli:50,wherebi:[0,63,47,57],simplifi:[39,53,58,18,54,25,70,46,59,2,33],transistor:71,table_set:25,shall:[48,6,18,5],mps_ap_frame_pop:[79,40,59],object:[0,53,55,56,57,17,18,54,60,61,62,63,76,65,66,67,68,69,70,71,2,74,19,4,75,34,58,42,20,59,21,44,6,78,23,79,24,7,8,26,27,88,29,30,82,9,31,45,10,25,11,86,46,12,13,35,85,80,36,48,72,43,89,15,37,84,77,90,16,83,33,41,92,52,1,22,38],mps_root_scan_t:82,lexic:15,regular:[0,67,4,90,25],alan:31,letter:[48,31],phase:[42,45,62,24,71,74],fwd_:37,coin:31,character_:37,prematur:[53,30,56,62,11,69,74],tradit:43,event_poolinit:13,simplic:[94,51,18,33],don:[39,17,18,48,67,72,84,58,42,6,80,28,29,30,25,46,22,41,90,50,37,51,38],simplif:30,doc:[42,18],"0x1003f9878":16,flow:15,doe:[0,53,57,17,18,54,60,61,62,63,65,67,69,71,72,74,75,58,42,50,5,43,44,6,78,79,24,7,8,27,28,29,30,82,9,10,25,11,12,13,35,85,80,87,48,1,32,89,15,37,77,90,16,83,33,92,94,22,51,38],buckets_:[37,25],dummi:[6,84],declar:[84,30,82,18,31,21,48,54,79,67,59,40,51,80,71,34,41,29,72],metat:15,sun:[31,15],unchang:[1,50],notion:[30,6],came:[60,46,51],kristen:15,ungar:[63,31,15,72],introspect:[81,82,45,77,22,79,92,19,41,75,35,29,52],wow64:39,sigsegv:94,opposit:[53,54,55,56,57,58,18,60,61,62,63,70,65,66,67,68,69,59,71,72,74],cheapli:56,syntax:[41,57,15],minimum_s:77,modula:[53,11,15],identifi:[18,21,6,63,64,65,37,68,71,48,33,41,13,28,35,51,52],figueiredo:15,involv:[30,17,18,60,89,62,8,11,67,46,47,70,72,74,71,41,50,35,58],despit:[87,57,58,11,15,71,72,25,41],bind:[16,57],layout:[57,17,25,11,16,71,33,35],acquir:[77,10,29,92],mpsliban:[32,4],i5m2cc:88,mps_key_mvff_slot_high:[92,28],menu:4,explain:[10,11,8,41,28,37,51],configur:[20,27,9,18,43,77,6,22,15,79,45,70,51,8,85,92,4,75,13,29,38],mps_key_ams_support_ambigu:28,than:[0,53,56,57,17,18,54,60,61,62,63,65,67,68,70,40,72,74,41,58,42,5,44,6,50,8,29,30,82,10,25,11,46,47,12,92,34,35,80,87,36,48,1,32,89,15,84,77,16,33,71,94,37,51,38],philosophi:15,btget:18,rich:[30,15],weakrefer:[67,72,15],mps_chat:0,predecessor:15,plate:71,stoy:[60,31],likewis:[6,62],stop:[30,31,1,65,24,71,25,29],compli:69,ceil:18,mpscmvff:92,watson:31,mps_variety_str:21,report:[84,30,87,31,32,83,15,70,65,50,13,37],reconstruct:[16,18],mps_ap_fil:[84,16],mustn:82,first_fit:92,softli:[15,67,46,71,72,74],bar:[71,51],gareth:[18,21,6,43,83,46,7,80,50,26,3,93,51],emb:41,"\u00e5ke":31,op_env:16,baz:51,patch:48,"__date__":21,twice:[30,82,50,40,46],bad:[30,58,89,70,65,46,16,15,25,84],fourteenth:31,told:[42,65],steal:29,respond:[89,11,12],mps_arena_has_addr:29,cbssetmins:50,fragmentation_limit:77,victim:13,fair:18,fp_size:46,btcv:18,datatyp:43,loreclaim:17,nul:[32,13,84],accumulatorscal:34,result:[0,54,57,17,18,62,65,69,40,72,74,41,77,6,50,8,27,29,81,30,82,10,25,46,47,12,34,35,80,87,36,48,32,84,13,90,16,33,71,94,37,51,52],"0x1003faf20":[13,16],respons:[39,30,80,56,57,59,43,6,50,65,42,24,12,74,41,81,62,29],fail:[84,56,17,18,48,40,13,59,44,6,24,25,29,30,10,83,46,47,12,41,35,36,34,15,16,50,71,37,51],hash:[86,56,87,8,15,67,46,78,16,65,25,37,38],charact:[30,17,88,32,37,71,2,25,4,13,51,58],tractofbaseaddr:6,best:[39,54,58,59,65,67,53,71,74,77,25,29,30,31,50,34,89,15,33,92,37,51],subject:[0,82,32,50,67,46,90,71,25,4,35,29,85],awar:[54,41,8],said:[42,53,61,62,46,69,70,72,74,13],hopefulli:17,erez:31,databas:[31,80,18,5,21,6,43,83,46,24,7,72,50,26,3,4,13,51],delphi:15,phantomli:74,shenker:31,yet:[0,42,36,17,10,50,83,90,15,53,84,46,24,16,8,41,34,37],figur:[39,42,84,46],mps_pf_w3i3mv:[51,88],languag:[53,54,56,57,17,59,60,62,63,65,68,69,70,71,72,74,84,58,20,5,78,23,24,30,31,32,11,48,41,39,86,15,90,37,51,52],res_io:46,sos8cx:88,awai:[11,17],approach:[48,89,11,51,31],glasgow:31,pad_:37,attribut:[34,87,80],inabl:[54,55],accord:[42,30,17,18,54,61,89,65,84,47,71,48,74,92,41,34],never:[53,54,58,18,62,63,48,68,72,34,44,6,79,24,25,81,30,32,80,13,35,87,15,84,77,90,50,37],extend:[42,17,18,6,50,15,91,59,80,8,41,37,29,58],sram:71,weak:[39,56,17,18,67,70,71,72,74,19,42,20,22,78,79,8,27,82,25,34,86,89,15,90,38,37,52],obj_chain:[37,25],extens:[53,82,57,18,45,44,10,62,11,15,66,51,41,37,29,38],lazi:[65,83,31,18],unabl:[22,29],preprocessor:[88,61,32,15,16,48,10,51],extent:[55,56,57,59,63,11,65,66,90,71,15],dbgpool:[10,46],toler:[67,70,8],mps_build_gc:88,xci6ll:[4,88],mps_clocks_per_sec:32,protect:[53,54,58,72,62,48,67,68,71,2,74,19,75,41,42,43,77,6,79,25,27,29,82,9,31,8,83,22,34,35,85,80,84,16,92,38,94,37,51,52],accident:[34,62],expos:[53,68,71,29],fault:[39,53,58,31,6,8,65,67,68,71,72,74,19,35,62],howev:[0,54,56,57,58,18,60,62,65,71,72,4,84,42,59,5,44,6,24,25,27,29,30,32,12,41,15,33,93,94,37,51],against:[30,87,44,6,74,33,62],logic:[17,18,60,63,15,68,72,51,38],browser:15,com:[39,4,91,5],mps_rm_t:[82,72],con:[0,57,31,59,15,67],rehash:[87,37,25],epdldebugsig:41,mps_telemetry_set:13,bool:[18,6,7,50,26,41,34],toni:[41,6,93,31,18],character:[67,30,31,15],ref_o:90,delic:8,loader:29,dconfig_var_cool:[4,16],enorm:[46,93],guil:15,exemplari:5,sml:[31,15],vmmap:13,wider:4,guid:[20,86,87,18,11,48,72,8,41,37],assum:[42,53,82,57,10,90,67,46,24,12,8,41,34,84,37,51,61],summar:[6,38],duplic:[42,57,58,6,11,69,51],mps_lib_fput:32,liabil:5,degener:63,fre:15,union:[42,87,59,6,48,70,25,34,28,37],three:[0,54,57,62,65,67,68,69,71,72,74,3,4,75,84,42,21,44,6,24,7,25,27,29,30,10,50,11,46,48,13,35,87,88,89,15,77,16,33,37,51],been:[0,39,56,57,17,18,54,60,62,63,67,53,70,71,72,74,13,58,42,88,6,78,76,24,25,26,28,29,81,30,45,10,50,11,46,12,34,35,80,87,36,69,15,37,84,90,16,83,33,41,93,94,22,38],specul:[18,15],accumul:[61,34,11,80],much:[0,53,56,17,18,62,70,4,58,42,44,24,29,30,45,33,11,47,12,39,36,89,90,50,37,51],mps_arena_unsafe_restore_protect:29,mult:41,interest:[0,30,37,17,45,10,50,15,35,78,91,72,33,42,4,13,29,38],subscrib:91,insert_link:84,cohen:31,quickli:[57,58,6,62,70,72,37,29,17],life:[77,63,31,25],retrospect:31,lifo:[54,63,71,59],suppress:48,tractreturn:6,ani:[0,54,56,57,17,18,60,62,63,65,66,67,69,70,71,72,74,4,34,58,42,50,59,5,21,77,6,24,7,8,28,29,30,82,10,25,11,46,12,13,35,80,87,48,1,32,43,89,15,37,84,90,16,83,33,41,92,94,22,51,38],"0x0000000100001ef7":16,unzip:4,dave:31,lift:18,child:[7,65],"catch":[56,36,51,15],pool_o:[81,9,77,22,79,2,8,92,27,75,85],"_m_ix86":51,emploi:63,type_fwd2:37,mps_alloc_pattern_ramp_collect_al:47,ident:[87,18,88,44,63,83,48,68,2,50,41,12],aix:60,gnu:[0,88,15,16,4,13],servic:[42,30,5,89,62,11,70,71,12,50],properti:[18,63,65,67,70,71,2,19,75,34,20,77,22,79,25,27,29,9,31,8,41,85,87,36,50,92,38,37,52],mps_lib_memcpi:[32,34],commerci:[39,30,5],mps_rm_const:[82,57],aim:[31,15],calcul:[67,34,89,35],publicli:[30,15],thrash:[30,31,62,67,70,72,74],aid:[82,50],vagu:58,anchor:31,spawn:15,seven:92,cons:59,mps_amc_apply_stepper_t:22,arenasetcommitlimit:6,mexico:31,c1999:[],tabl:[55,56,57,17,18,65,66,67,68,70,72,74,13,58,20,88,44,76,8,29,82,31,45,25,34,86,87,15,78,16,37,38],toolkit:31,trishul:31,cond:7,conf:[51,31,38],mps_thr_t:[82,70,94,37],symtab_s:[82,37],"1003fd328":13,disappear:[90,72,48,50],grown:15,mps_word_t:[82,87,17,48,37,16,33,13,28,34,29],fp_pattern:46,incorrectli:[90,59],receiv:[30,82,16,57,5,60,89,11,37,90,7,50,13,35],suggest:[30,18,44,10,60,91,50,92,93,37],make:[0,39,55,56,17,18,54,62,63,65,68,53,70,40,72,74,4,13,58,42,59,5,21,44,22,49,24,25,88,29,81,30,82,10,50,11,46,48,34,35,86,36,32,43,89,15,84,77,78,16,33,41,71,52,94,37,51,38],transpar:[82,56,60,10,48,46,70,84,87],complex:[30,59,62,70,11,15,46,16,65,41,51,72],split:[54,56,58,18,89,63,11,67,46,71,50,3,13],mps_mvt_free_siz:77,complet:[42,30,82,57,5,18,44,10,62,33,11,37,67,24,71,51,32,41,84,35,29],elli:[42,31,15],mps_fmt_adjust_fencepost_t:46,fragil:33,evid:[16,59],vvv:13,quentin:31,rail:54,kit:[20,4,86,5],fairli:[55,72],rais:35,refil:[84,94],ownership:43,refin:[42,24,57,72,15],gustavo:31,poolarena:41,protocolerror:50,mps_io_t:32,studi:[46,11,31],tune:[20,86,31,30,44,22,37,16,35,62],dylan:[17,5,83,6,25,11,15,68,51,8,41,18],char_bit:88,undesir:77,bewar:[84,16],mps_ap_trip:84,mps_lib_assert_fail:32,thu:[0,30,57,17,60,61,74,15,67,77,53,70,25,34,84],messeng:[30,31],thr:[82,94],inherit:[20,41,59,15,45],poolmrg:[26,83],contact:[39,20,82,5,8,48,91,84,79,78,16,40,25,92,4,94,27,29],greatest:18,thi:[0,39,55,56,57,17,18,54,60,61,62,63,64,65,66,67,68,53,70,40,2,74,3,4,75,34,58,42,50,59,5,21,44,22,78,79,24,7,8,26,27,28,88,29,81,30,82,9,45,10,25,11,46,47,12,92,13,35,85,80,87,36,48,72,94,32,43,89,69,15,37,84,77,90,16,83,33,41,71,1,6,51,38],endif:51,lockstruct:43,programm:[0,30,59,54,60,62,88,11,90,65,77,53,71,15,41],jean:31,portabl:[39,31,32,15,71,48,33,13,37,51],arenasetsparecommitlimit:6,left:[50,57,18,1,10,6,25,89,62,15,48,33,2,74,13,34,29],arena_ld_length:6,protocol:[39,57,59,65,67,40,34,42,20,6,79,80,26,82,45,33,46,41,84,50,37,51,52],background:[18,45,6,43,69,29,51],just:[0,54,57,17,18,67,13,1,4,41,58,42,59,44,78,25,29,30,82,50,83,46,34,35,15,90,16,33,71,94,37,51,38],mps_sac_alloc_fast:12,shapiro:31,pool_create_v:[],orient:[42,54,31,60,62,15,41],bandwidth:[62,72],human:[3,13,21],ifdef:51,nowadai:[67,71],unbuff:92,poolcondemn:80,act_on_rang:18,previous:[17,59,43,90,25,26,13],easi:[82,18,22,11,15,37,67,16,4,94,35,51],interfer:29,had:[0,30,58,83,15,42,46,16,72,25,92,13,66,37],lumpi:36,define_class:41,fortran:[11,15],spread:[30,89,61],"0x1003f9ae0":16,board:31,henriqu:15,els:[0,42,8,16,51,25,84,37,29],save:[53,55,57,31,33,15,71,50],gave:[30,15],opt:4,applic:[39,54,59,62,68,53,71,74,4,77,23,29,30,31,32,11,89,15,90,16,33,38],"0x1003f9c18":16,preserv:[56,17,61,67,70,71,80],r_o:94,locu:42,pretest:[0,15],distanc:35,lcc:88,birth:77,"0x1003f99d8":16,obj_isfwd:[35,37],"0x000000010000ea40":16,apart:[7,11],linux:[39,43,88,16,8,4,94,51],measur:[58,31,62,71,33,34,29,17],overcompens:62,specif:[84,57,17,18,62,63,72,74,34,42,59,43,6,23,80,26,29,81,30,82,31,11,46,13,36,15,50,51],arbitrari:[41,6,35,48,66],bufferinit:80,hunt:31,manual:[0,53,56,59,54,61,62,1,66,40,80,74,19,75,42,20,77,23,79,24,8,81,30,82,50,11,46,12,92,84,39,85,15,33,71,38,37,52],mit:31,dep:51,"0x00000001003fb130":16,mps_pf_fri3gc:88,src_ld:87,colmerau:15,unnecessari:[53,30,17,25],underli:[57,25,11,90,71,50],www:4,right:[30,18,31,44,50,11,48,46,33,34,5,37,38],old:[53,54,57,58,59,60,61,62,63,70,72,74,84,88,6,24,25,30,45,34,35,87,15,50,37],mps_arch_s8:88,deal:[30,55,87,68,34,15,67,60,71,74,41,27],interv:[0,54,18,25,50,84,37,29],mps_arch_s9:88,maxim:[42,77,41],dead:[53,54,56,57,17,59,60,61,62,63,65,69,40,72,42,44,22,79,80,47,84,36,16,37],mmqa_test_funct:18,zct:[56,76],born:74,intern:[84,54,55,17,18,83,65,71,74,4,13,58,20,6,25,29,81,30,31,45,10,11,46,12,34,49,85,32,89,16,50,38],printer:[13,15],addrcomp:34,pain:[30,17],indirect:[55,56,17,5,65,69],successfulli:[81,82,56,36,84,47,12,50,41,35,29,72],make_pair:37,mps_key_max_s:[77,75,28],insensit:15,cooper:[42,58,31,43,6,15,24,70,29],combat:8,bottom:[82,8,25,16,50,37],logarithm:[51,88],segmyseg:41,fox:31,arthur:31,subclass:[46,6,41,58],tempor:[20,77,50,19,84,75,38],track:[42,30,57,54,10,15,46,24,16,71,65,37,72],ucsc:31,morereturn:16,overcom:15,condit:[53,30,37,81,59,5,10,47,11,65,35,84,7,71,50,41,4,34,51],foo:[48,16,12,80,13,51],type_integ:[37,25],c99:[57,9,77,22,79,2,8,92,27,75,28,29,85],fencepost:[54,56,60,10,46,1],core:[62,56,57,48],plu:[77,6,51,5],sensibl:80,bole:31,bold:30,someclass:41,pose:37,libsqlite3:4,confer:31,promot:[53,36,59,61,22,70,74,41],"0x7fff5fbff808":16,hsu:31,mps_frequenc:12,post:[0,54,36,62,90,25],"super":[46,41],gartner:15,proceed:31,chapter:[51,16,31,29,37],obj:[16,6,25,83,37,46,78,7,33,84,35,87],harlequin:[93,15],patchi:72,slightli:[72,6,50,17,25],simul:[68,31,15,50],felleisen:31,poolscan:[16,80],despair:38,frame_o:40,old_symtab_s:37,liber:94,commit:[84,82,57,45,10,6,62,71,12,80,34,37,29],sept:31,produc:[81,82,36,18,15,46,72,13,84,29],mps_key_pool_debug_opt:[92,27,75,28,1],encount:[10,13,11,33],curiou:13,"float":[53,54,59,61,65,69,71,74,51],encod:[58,18,21,67,68,69,70,72,13],bound:[0,56,36,58,18,60,62,63,15,68,16,71],soo:31,two:[0,54,55,56,57,58,18,62,1,65,67,68,70,71,2,74,4,34,42,59,21,22,24,50,8,27,29,30,82,31,10,25,11,46,47,12,13,85,80,87,36,48,32,43,89,15,37,84,16,33,92,6,51,72],down:[0,54,17,18,70,71,72,4,42,88,6,7,32,29,30,10,46,12,35,15,16,50,37],attrincr_rb:34,"0x0":16,formerli:[88,57,25],lieu:42,wrap:[67,30,69,46,33],opportun:[46,36],cafeteria:71,storag:[0,53,56,57,58,18,60,62,63,66,67,68,71,72,74,59,77,24,29,30,31,41,15,50],kakkad:31,accordingli:[3,15,32],suffici:[53,18,77,89,15,70,41,37],mps_class:35,mps_t_word:[34,51,88],config_var_:51,support:[0,39,56,57,58,18,54,62,48,66,70,40,72,74,3,4,75,41,42,59,43,77,6,78,79,24,50,8,27,30,82,9,31,10,25,46,47,12,92,34,35,85,86,87,32,88,89,15,37,84,90,33,71,52,94,22,51,38],why:[0,30,16,36,18,32,90,7,25,34,84,38],avail:[39,54,57,58,18,62,65,68,70,71,72,74,4,84,59,5,44,32,29,81,30,10,25,11,13,89,15,77,16,50,94,51],width:[34,88,59,51,50],reli:[30,57,17,60,10,90,48,77,24,70,13,94,84,38],editor:[93,15],fraction:92,acknowledg:[20,93],overhead:[42,30,17,18,77,6,70,11,65,68,24,59,50,41,62,38],btfindresrang:18,lowest:[7,59,18],head:[46,84,61],traceid:34,toward:[30,71,18],form:[0,54,56,57,18,60,61,62,63,65,66,67,53,70,71,72,74,5,7,8,28,10,80,11,48,13,89,15,16,50,92,94,37,51],offer:[53,15,67,46,71,74],forc:[30,13,37,15,33],poolno:80,mpscmv:75,somehow:15,multiprocessor:31,hear:38,percentag:77,heap:[53,54,56,57,58,59,62,65,66,70,71,72,42,22,80,29,30,82,31,11,35,89,15,16,33,37],old_symtab_root:37,oopsla:31,hashtabl:25,"true":[0,54,59,48,33,84,18,6,7,8,26,29,81,30,25,41,35,87,34,90,50,92,37],cached_count:12,reset:[87,18,6,25,34,13],"throw":11,attr:[10,6,34],rattl:30,maximum:[42,63,36,18,77,6,51,46,12,50,34,75,29],tell:[0,39,55,87,21,74,82,15,42,54,53,51,25,84,37,29,72],mps_pool_t:[81,37,1,9,85,79,77,22,8,35,84,46,12,74,92,27,75,25,2],tucson:31,absenc:[32,83,46],autoconf:4,emit:[13,59,51,80],mpscsnc:79,accessset:34,uncoop:[62,31],featur:[0,56,59,48,70,71,72,1,13,20,6,25,29,82,45,8,11,46,22,84,15,37],alongsid:[41,56],mps_word_width:[51,18,88],classic:[30,4,71,24,66],utc:[13,16,31],"abstract":[42,30,31,18,43,6,45,15,54,46,7,51,34,41,29],consciou:31,decrypt:33,mps_class_t:[81,9,79,77,22,8,46,2,74,92,27,75,85],"__line__":46,postscript:[57,71,11,15,68],exist:[0,56,17,18,62,48,71,3,13,42,6,24,26,28,30,46,12,41,35,36,34,50,93,37],darko:31,strive:[6,87],mps_root_create_fmt:82,"0x0000000100003f55":[13,16],pirinen:[42,58,31,6,65,67,46,70,71,93],sticki:[63,71,31],assembl:[31,51,17,15],"_io":[48,65],encrypt:33,testor:43,when:[0,53,55,56,57,17,18,54,60,61,62,63,65,66,67,69,70,71,2,74,3,4,75,34,58,42,59,44,22,78,79,24,50,8,27,28,29,30,82,9,10,25,11,46,12,13,35,85,80,87,36,48,72,94,32,89,15,37,84,77,90,16,83,33,41,92,1,6,51,38],lockclaimrecurs:43,mps_begin:46,poolstruct:80,accessread:34,jone:[30,56,18,31,21,60,83,11,65,70,72,80,3,93],fmt_scan:82,test:[0,53,17,18,60,62,68,13,4,41,88,44,7,25,29,30,45,10,34,87,15,84,78,16,50,92,37,51,52],mpsacl:29,presum:[6,43],telemetri:[20,87,17,44,10,32,80,70,48,37,16,25,4,13,29,52],unlimit:[30,7],mps_class_mv2:[],jonl:[93,58],node:[53,55,57,61,67,70,71,50],matur:[10,22,31],notif:[83,50],intend:[18,60,2,34,43,77,22,7,80,29,82,9,10,33,41,35,87,32,15,50,94,37,51,72],benefici:18,felt:30,stringid:13,mps_debug_option_:[92,27,75],intens:[56,31],intent:[18,48,70,50,13,34],consid:[53,30,36,17,18,54,61,6,63,11,59,71,80,50,84,81,35,62,38],occasion:17,mps_build_ac:88,russo:31,brian:31,younger:[53,55,57,61,65,72],event_kind:13,my_malloc:30,longer:[0,54,56,57,18,62,63,71,72,74,34,24,8,26,81,30,10,80,11,12,41,35,36,15,90,93,37],furthermor:[46,82,17],home:15,arenainit:6,phantomrefer:[72,74],blockrang:50,candid:[57,35,18],iwmm:31,phong:31,ignor:[82,57,17,47,65,24,7,72],gracefulli:60,config_:51,time:[0,39,55,56,57,17,18,60,62,63,65,66,67,68,53,70,71,72,74,4,34,42,59,5,21,44,22,78,24,8,28,29,30,82,31,10,25,11,46,47,12,13,35,87,36,48,1,32,43,89,69,15,37,84,77,90,16,83,41,92,52,94,6,51,38],push:[71,63,40,59,85],mps_fmt_fwd_t:[54,35,37],offsetof:[8,33,37,16,80,84,25],backward:[53,6,18],strong_buckets_ap:25,chunksiz:13,matthia:31,rom:[62,72],chain:[0,53,56,58,59,54,61,62,63,67,69,71,2,1,44,22,25,27,28,29,41,86,36,89,37,52],globals_root:37,skip:[84,54,86,17,18,22,25,37,79,16,71,2,8,27,35,9],mps_:48,global:[30,80,17,43,6,74,82,37,86,16,71,72,25,41,4,93,34],ost:31,invent:[53,24,58,15],osi:5,cacm:31,signific:[53,30,59,18,77,32,6,89,11,67,70,74,92,13,62],addrcopi:34,dalton:31,milo:31,pldi:31,osf:[4,88],hierarch:31,decid:[42,30,36,17,18,80,11,84,46,71,12,74,57,34,37,29,38],middl:[82,57,62,65,16,72,50,41,84,29],depend:[53,50,56,57,17,18,54,63,48,67,68,69,40,72,74,19,75,13,20,59,88,77,6,79,7,8,27,29,30,82,9,45,10,25,46,92,22,34,85,86,87,36,89,15,78,33,41,71,52,94,37,51,38],zone:[42,6,17],graph:[53,55,56,57,61,65,67,70,71],cornel:31,intermedi:[77,17],w3ppmv:88,rel:[30,56,58,15,70,71,12],environment:32,yve:31,rightmost:18,decis:[36,17,18,32,78,59,40,37],jvm:15,lasttract:6,henderson:31,brown:31,sourc:[39,59,13,4,41,20,5,21,6,8,29,30,31,45,32,50,46,34,87,15,78,33,51,38],mps_sac_t:12,string:[84,30,36,17,31,21,32,70,15,68,16,2,65,25,13,28,37],barrett:[93,31],blumof:31,"1003fe000":13,unfamiliar:64,feasibl:46,broadli:[63,35],bruggeman:31,octob:31,word:[53,56,57,17,18,61,62,65,67,70,71,72,73,74,13,58,59,91,8,82,25,33,46,48,34,35,85,84,16,50,37,51],exact:[54,55,57,17,59,62,48,70,71,72,74,34,88,22,79,8,27,82,10,25,84,37,38],seemingli:16,cool:[57,10,66,68,16,72,4,13,51],"0x1003f9af8":16,format_return:46,"0x1003fe278":16,administr:[11,15],level:[39,57,59,62,65,66,67,68,71,72,74,13,88,6,24,7,8,30,25,11,46,34,15,16,50],did:[30,37,29,15,25],die:[53,36,17,59,22,65,16,72,25],gui:31,henri:[70,31],metadata:[25,8],iter:[17,18,45,6,15,50,37],rusag:32,magnet:58,item:[6,71,21],"__time__":21,quick:[54,63,89],recogniz:58,dip:46,round:[58,10,89,11,71,12,25,92,84,37,29],dir:51,o1algc:88,prevent:[0,57,17,31,6,90,78,24,70,12,8,34,72],edelson:[71,31,15],slower:[30,62,57,58,18],attrbuf_alloc:34,sign:6,oldspac:[60,54],colin:31,cost:[55,56,60,62,63,67,70,71,2,84,42,5,44,24,25,31,50,12,13,15,77,33,37,51],unprotect:[82,56,8],maximum_s:[77,75],relocat:66,port:[32,15,90,25,37,51],leaf_ap:25,addr:[81,50,37,34,6,8,83,35,84,46,16,25,41,13,28,22,29,87],malo:31,texa:31,uniform:[59,18,80],current:[0,39,57,58,18,54,68,70,40,72,74,4,41,42,59,43,6,8,27,88,29,82,50,11,46,34,21,15,13,33,71,94,51],"0x00000001003f9730":16,arenafinish:6,suspect:16,mps_os_i5:88,va_list:[81,46,41,84,29],tolimit:18,failobj1:41,lockclaimglob:43,deriv:[56,57,58,60,32,6,65,24,70,48,50,34,41],increasingli:47,vector_:[37,33],guardian:[41,83,31],gener:[0,39,55,56,57,17,18,54,60,61,62,63,64,65,67,53,70,40,2,74,4,75,41,58,42,20,59,43,44,6,78,8,26,27,29,30,82,31,45,25,11,86,46,47,12,34,35,80,36,48,72,89,15,37,84,90,16,33,71,94,22,51,52],"1003fa7d0":13,integer_:37,disclaim:5,consult:[84,32,6,17],explicitli:[39,53,48,63,15,65,41,34,13,29],modif:[57,18,5,15,46,24,71,72,4],address:[0,54,55,56,17,18,60,61,62,63,65,66,67,68,69,70,71,72,74,13,58,59,44,6,50,8,28,29,81,30,82,45,10,25,12,22,34,35,87,48,89,15,84,16,33,92,94,37],failnoteseg:41,ratio:77,along:[57,61,25,89,80,10,34,41],lii6gc:[4,88],wait:[0,39,6,29,25],epdldebugpoolclass:41,mps_os_ia:88,shift:[34,51,17,18],steffen:31,queue:[0,57,17,62,25,83,67,90,71,72,50,52],weak_array_:8,attrpm_no_read:34,behav:[30,57,11,48,68,47,41],thirti:31,extrem:[70,71,51],bob:31,rafael:31,reclaim:[0,39,56,57,54,61,63,65,67,53,70,40,72,74,75,76,42,77,22,78,79,24,8,27,81,82,9,45,10,25,46,92,34,85,80,1,15,84,90,71,37,38],macintosh:[51,31,88],mps_rank_t:[82,79,72,8,34,28],chalmer:31,semant:[32,6,56,41,15],refsetuniv:42,regardless:[29,50],prerequisit:[4,86],grunwald:[63,31],extra:[81,30,56,17,18,6,65,67,24,80,84,62,29],pentium:56,modul:[42,20,30,5,18,21,32,6,43,11,15,53,45,50,65,74,41,49,51],c1990:[],prefer:[58,6,24,34,4,17],reig:31,type_uniniti:84,visibl:[48,59,29],marker:[54,82,59,60,37,40,35],prompt:[54,90,15,24,72,8,4,29],prei:74,sigbu:[16,94],memori:[0,39,55,56,57,17,18,54,60,61,62,63,64,65,66,67,68,53,70,71,72,73,74,4,34,58,42,20,59,5,88,44,22,23,24,50,91,8,26,29,81,30,82,31,45,10,25,11,86,93,46,47,12,13,35,14,80,87,36,48,1,32,89,69,15,37,84,90,16,33,76,52,94,6,51,38],univers:[42,31],visit:[53,82,58,22,16,4,35,29],todai:[30,71,15],perl:[53,54,11,15],cmp_t:[87,25],live:[0,54,55,56,57,59,62,63,67,53,70,72,74,44,22,78,24,8,30,82,9,31,10,25,47,12,80,36,1,69,90,16],handler:[16,6,68,7,74,13,94,35],mps_key_args_end:[1,9,77,22,8,37,79,2,25,92,27,75,28,35,29,85],scope:[41,71,17,15],prev:84,tightli:37,unsaf:[90,71,29],idempot:13,afford:[42,30,17],peopl:[0,30,57,62,64,15,91,70,71,93],claus:5,brooksbi:[39,31,18,21,6,43,83,46,7,80,50,26,3,93,51],scholten:31,visual:[39,57,88,15,4,51],appel:[42,58,65,31,74],olivi:31,prototyp:[51,18,15],examin:[42,56,17,18,61,24,87,71,41,37,29,58],alexand:31,mps_pool_check_free_spac:1,effort:[10,62,65,29,74,51],easiest:46,behalf:30,fly:31,judi:93,graphic:[93,51,15,58],dissimilarli:59,poolam:[10,18],car:[16,37,31,33],prepar:[0,36,18,16,12,80,84],pretend:11,uniqu:[42,58,31,13,34,51],imper:15,descriptor:[54,6,80,50],minimum:[54,57,17,18,77,74,46,72,50,92,51],can:[0,39,55,56,57,17,18,54,60,61,62,63,65,66,67,68,53,70,40,72,74,4,34,58,42,59,5,21,44,6,78,76,24,50,91,8,27,28,88,29,30,82,9,31,10,25,11,46,12,92,13,35,80,87,36,48,1,43,89,69,15,84,77,90,16,83,33,41,71,94,37,51,38],inadequ:[71,11],findshortresrang:18,purpos:[54,57,58,62,71,2,4,75,13,5,43,6,8,29,30,31,45,50,12,22,41,35,15,33,94,37],laughter:13,traceabl:[6,80],cisc:63,boilerpl:41,strother:31,mps_arena_t:[0,59,60,48,2,75,77,22,79,8,27,28,29,81,82,9,83,46,35,85,87,36,90,92,94,37],encapsul:[87,6,74,67,71,72,25,29],stream:[54,58,10,32,50,70,37,16,80,25,4,13,29,52],predict:[30,77,36,17,18,44,63,11,60,59,71,92,57,84,75,29],winston:31,agent:42,limitreturn:[18,50],heard:30,critic:[84,20,57,17,31,43,10,62,65,49,46,16,33,41,13,66,37,52],abort:[32,13,16,37,33],tracesetempti:6,recycl:[53,54,57,17,59,62,63,65,70,71,72,1,42,20,22,23,24,80,29,82,11,89,15],mps_pf_xci6ll:88,unfortun:[30,11],occur:[0,54,56,57,59,60,62,65,67,68,69,70,71,72,74,34,24,29,10,11,47,41,87,84,37],verlag:31,alwai:[0,54,58,59,63,65,67,68,53,71,72,1,34,88,77,25,26,29,30,82,10,46,47,48,13,35,89,16,33,92,37,51],differenti:72,exit_cod:82,multipl:[39,53,56,59,54,60,61,1,66,67,69,70,71,74,84,42,18,43,6,8,29,30,45,46,47,12,41,85,87,15,90,94,37,52],instant:[81,54,29],mps_frame_t:40,reg_root:[82,37],mps_telemetry_intern:[13,70],write:[0,56,57,17,60,83,65,67,68,71,72,74,19,4,13,58,42,20,5,8,28,29,30,82,9,31,32,11,46,48,34,15,84,90,91,3,33,41,94,37,38],vital:[58,10,65,33,84,34],anyon:30,pure:[39,53,56,25],familiar:[42,37],parameter:51,predictor:31,controlalloc:[6,41],poolclassepvm:18,unlucki:90,product:[39,53,86,17,5,21,10,22,35,46,16,51,27,4,59,13,29],proc:[31,21],snc:[19,38,40,79,20],book:[93,11,51],csl:31,max:6,clone:31,make_t:25,usabl:29,jacqu:31,membership:[6,50],mad:31,"1993a":[68,72],mai:[0,39,55,56,57,17,59,54,60,62,63,65,67,68,53,70,40,2,74,4,75,34,58,43,77,22,78,79,24,50,8,27,29,81,30,82,9,31,10,25,11,47,12,92,13,35,85,80,87,36,48,72,94,32,89,69,15,37,84,90,16,33,41,71,1,6,51,38],underscor:48,allocat:43,data:[39,53,56,57,17,18,54,60,62,63,65,66,67,68,69,70,71,72,74,34,58,59,5,43,6,24,7,25,29,30,82,9,31,45,10,50,11,46,47,12,13,1,32,15,84,16,33,41,94,37,38],grow:[0,30,36,77,62,71,50],man:[62,18],mps_key_mvff_arena_high:[92,28],mps_fmt_class_t:35,stress:[4,50],mps_arena_:[60,48],practic:[42,87,57,18,31,11,48,67,24,33,13,37,58],findshortresetrang:18,mpsio:[32,13],explicit:[54,56,58,30,11,15,46,41],mps_arg_:[81,1,9,77,22,8,64,37,84,79,2,25,92,27,75,28,35,29,85],mps_root_create_t:[82,37,25],pooltrivbufferinit:80,inform:[0,53,56,57,17,59,54,60,62,64,65,67,68,69,70,74,13,58,42,5,21,6,23,24,91,80,29,31,32,50,11,46,41,35,36,16,33],"switch":[17,25,15,37,33,4,27],preced:[89,28],combin:[39,30,57,31,88,89,6,50,11,15,42,67,46,24,12,74,4,51,72],block:[0,39,55,56,57,58,59,54,60,61,62,63,65,67,53,70,40,2,74,75,84,42,20,44,6,78,79,24,50,25,27,28,29,81,30,82,9,45,10,8,11,46,47,12,92,13,35,85,87,36,48,72,32,89,15,37,77,90,16,33,71,1,22,51,38],finddelet:50,csd:31,callabl:6,talk:46,tbl:[87,25],approx:42,"_ts_":46,schwartz:[67,70,31],anticip:[30,74],softrefer:[71,72],approv:[5,50],ymmv:39,cutt:31,thr_o:94,size_t:[18,48,1,75,84,43,77,22,8,28,29,30,82,32,25,46,12,34,35,85,36,16,33,92,94,37,51],equip:31,still:[53,56,17,18,62,63,70,73,74,4,42,59,43,78,24,25,29,30,80,11,46,13,35,87,15,90,16,50],ieee:31,dynam:[53,30,56,57,59,31,6,63,89,90,65,66,69,70,71,15,41,62,72],"0x000000010006631f":16,conjunct:[56,51,43],mps_arena_start_collect:29,group:[93,51,15],mps_key_align:[92,28],concis:[13,28,50],polici:[39,53,56,57,17,59,54,63,65,67,70,71,74,58,18,77,6,81,31,48,41,89,92,52,37,12],zendra:31,bekker:31,tort:5,window:[39,53,58,43,32,62,88,69,51,8,4,94,34,29],mail:[18,6,46,91,41,51],main:[30,82,56,57,58,31,89,62,50,70,48,68,24,16,71,72,74,41,37,51],message_o:0,confin:[34,11],non:[57,18,61,62,65,70,71,72,1,3,34,42,59,5,43,6,50,25,26,27,29,82,31,45,10,8,41,35,80,87,32,15,33,37],free_templ:1,recal:37,halt:[53,59],halv:70,mmqa:18,mps_arena_walk:46,cbsblocksiz:50,jame:31,alist:10,mayuseinlin:50,initi:[84,54,57,17,18,63,67,70,71,34,43,44,6,80,29,30,82,25,12,41,50,37,51],tucker:[93,31],therebi:[53,18],half:[70,18],superset:42,provision:42,discuss:[42,54,21,11,67,46,90,91,41,37,51],nor:[56,62,63,67,71,12,74],introduct:[39,20,80,37,41,18,21,6,45,86,23,46,7,51,50,26,3,4,34,42],critiqu:31,obj_scan:[78,37,35,33],term:[39,54,55,56,57,17,59,60,61,62,63,65,66,67,68,53,70,71,72,73,74,4,58,5,77,30,11,46,69],workload:31,name:[58,18,60,63,65,13,80,4,41,42,59,21,8,7,32,28,30,45,10,25,46,48,34,35,88,15,50,51],lewi:[31,15],perspect:[31,8],didn:[53,46,59,15],revert:42,type_vector:33,buckets_pool:25,separ:[55,57,17,18,60,62,63,48,68,71,72,4,34,42,6,24,25,29,30,11,46,12,41,85,50,92,51],mps_addr_return:83,massachusett:31,sigusr2:94,januari:[42,31],mps_fmt_put_fencepost_t:46,confid:[24,27,25],compil:[39,54,56,57,17,18,60,62,63,65,66,68,69,70,71,72,74,3,4,84,58,5,21,24,30,82,31,10,13,86,88,15,16,33,37,51],everyth:[82,13,37],domain:[30,15],replai:80,mps_args_begin:28,dialect:15,moher:31,replac:[54,60,8,15,35,46,78,25,41,37],individu:[87,57,18,6,47,74],continu:[39,30,63,57,59,18,89,33,11,15,67,70,24,7,65,25,50,37,29,72],lookasid:[68,70,59],dramat:[44,53],"0x00000001003f9b70":16,redistribut:5,replay:80,"0x00000001003f9bc8":16,significantli:[42,30,89,18],poolreadi:6,year:[57,31],operand:[34,16],happen:[42,30,57,17,72,10,62,25,11,37,84,46,16,12,8,41,81,94,35,61],dispos:[35,15],mps_args_add:28,conting:50,shown:[70,67,90,16,25,13,84],myformat:4,jackson:[93,31],space:[84,54,56,57,17,59,60,61,62,63,65,68,70,40,72,74,75,34,58,42,44,6,24,25,26,29,30,31,10,80,11,46,12,92,13,85,87,36,1,15,77,16,83,50,71,37,51],profit:5,protocolsomeclassguardian:41,rankfin:34,overcommit:[60,62],"0x7fff5fbff174":16,profil:[31,88,44,70,77,16,13],underwrit:[46,1],toolchain:[4,88],rational:[61,34,51,45],mps_arch_i4:88,mps_alloc_pattern_t:47,mps_arch_i6:88,mps_arena_expos:29,correct:[39,50,57,45,43,10,6,8,70,90,84,24,33,40,25,41,27,88,35,62],mps_arch_i3:[51,88],undead:[69,56,63],earlier:[0,56,71,58],"goto":[41,17,18],newsiz:50,thirdli:[6,15],million:[44,37],seventh:37,argv:[82,16],mps_key_mvt_frag_limit:[77,28],mps_message_t:[0,83,90,36,25],california:31,lab:31,carl:31,org:[4,15],"byte":[53,57,58,18,62,64,67,68,69,70,71,1,75,84,59,77,6,80,29,82,32,33,46,12,34,85,89,15,50,92,37],argc:[82,16],sigxfsz:[16,94],boehm:[53,30,82,57,58,31,65,90,15,93],care:[84,54,82,17,59,35,25,41,34],mps_key_min_s:[77,28],reusabl:41,kaufmann:31,wai:[84,17,18,62,65,67,70,72,74,4,41,42,5,21,6,78,24,8,29,30,82,10,25,11,46,47,34,87,32,43,89,15,90,16,37,51,38],mps_word_shift:[51,18,88],badli:[67,89,70,11,8],prescrib:71,frequenc:[24,12],mps_pool_class_mvff:[],synchron:[0,30,56,57,58,31,70,59,71,12,84,72],mps_size_t:[92,75,85],refus:[6,29],recov:[30,47],turn:[42,53,63,36,1,25,46,16,71,80,33,57,13,35],tlb:70,place:[58,62,65,70,71,72,74,84,77,6,8,29,30,82,25,11,13,35,87,36,15,90,16,37,51,38],unwis:46,principl:[42,51,31],imposs:65,frequent:[53,20,37,17,30,22,15,23,24,16,74,35,29],first:[0,53,57,17,18,54,61,62,63,65,67,71,1,19,4,75,41,58,20,59,88,44,6,23,24,25,26,28,29,81,31,8,83,46,12,13,35,87,36,89,15,84,77,16,50,92,94,37,51,38],oper:[0,39,56,57,17,18,54,62,65,66,67,68,53,70,71,72,74,4,34,58,42,50,59,5,43,77,6,23,24,7,8,29,81,30,82,9,31,10,25,11,46,12,13,35,87,48,88,89,15,84,16,33,94,37,51],suspend:[42,6,94,35,43],written:[39,56,57,17,18,70,72,1,13,42,6,8,30,32,11,41,89,15,78,50,93,37,51],directli:[53,82,56,58,5,21,62,90,15,66,84,24,7,72,74,41,13,34,51],subrang:18,carri:[87,74,59,33,90,80,25],onc:[31,30,63,57,17,18,46,8,15,42,48,39,71,12,65,25,34,84,41,29,72],arrai:[54,55,57,58,18,63,64,48,68,71,6,65,25,28,82,8,12,22,34,35,36,15,94,37],resultreturn:16,bufferempti:6,supernam:41,acquisit:90,act_on_range_high:18,"long":[0,39,17,18,48,67,53,71,72,74,84,42,59,88,77,22,24,25,28,29,30,9,31,32,33,83,12,34,87,36,16,50,37,51],symmetri:18,xci3gc:[4,88],fromlimit:18,ring:[6,57,34],mps_arena:[83,29],open:[31,20,17,18,54,32,25,78,15,39,90,50,8,4,5,29,38],predefin:[37,51],size:[53,54,55,56,57,17,18,60,61,63,65,66,67,69,71,72,73,74,75,13,58,59,43,44,6,79,50,8,27,28,29,30,82,9,45,10,25,11,86,46,47,12,34,35,85,80,87,36,48,1,32,88,89,15,37,84,77,16,33,41,92,94,22,51,38],mps_build_sc:88,given:[42,30,55,56,1,59,60,32,62,50,83,82,65,67,46,12,25,41,13,37],unlink:70,capac:[0,30,36,44,22,27,37,62],pad1_:[16,37],fmt:[9,22,1,79,2,8,27,35],anderson:93,gen_param:36,necessarili:[57,34,70,37,16,41,13,29],draft:[46,6,51],yip:[62,31],circl:15,handbook:[93,11,31],white:[42,53,55,57,17,60,6,65,67,70,71,80,26,93,35,58],conveni:[0,30,82,57,18,10,6,33,32,15,42,67,50,25,41,28,37],chilimbi:31,mps_mv_size:75,mps_pool_create_v:81,mps_fmt_scan_t:[82,17,37,71,33,35],demer:[53,31],mps_res_io:10,especi:[30,56,17,60,74,65,46,70,72,50],resetrang:18,copi:[53,54,57,17,18,60,62,63,65,67,68,69,70,71,2,74,19,4,84,58,42,20,5,44,6,24,25,26,27,30,9,31,10,46,47,48,41,35,36,72,32,15,37,33,1,22,38],specifi:[0,39,57,18,54,1,65,53,2,74,75,6,78,79,8,27,28,81,30,82,9,10,25,46,47,12,22,13,35,85,80,36,90,50,92,37,38],ebi:31,blacklist:58,weak_array_t:8,enclos:[54,57,48],mostli:[17,18,62,63,48,40,2,19,4,20,44,6,25,27,30,9,31,10,11,46,47,22,34,36,15,16,33,71,37,38],floppi:[62,58],domin:30,mps_io_flush:[32,13],holder:5,mps_pool_create_k:[81,1,9,77,10,22,8,37,79,2,25,92,27,75,35,85],serv:[77,6],wide:[30,56,36,77,22,63,15,24],amcfix:17,subexpress:84,kolodn:31,balanc:[62,59],mpsavm:[48,37,29],were:[84,54,56,57,18,63,67,70,40,2,13,88,44,22,25,30,82,46,12,41,35,87,36,15,50,94,37],posit:[81,82,87,59,18,25,48,35,33,34,37],server:[62,31,15],obj_gen_param:37,transport:[70,71],seri:[67,54,13,56,24],pre:4,analysi:[0,42,82,18,31,60,22,37,59,72,13,35],sai:[42,30,32,62,74,11,35,84,70,71,72,25,4,34],look:[0,54,57,17,18,61,13,72,41,6,24,25,31,10,8,11,84,35,87,78,16,33,51,38],obj_empti:[16,37],anywher:30,dash:25,"1992a":71,nickola:31,"1992c":[60,70],"20g":16,deliv:[15,21],ravenbrook:[39,4,91,5,93],mps_fmt_a_:[37,35,25],repack:31,sat:[13,16],buffercr:80,engin:[42,15],techniqu:[39,53,56,57,17,59,61,62,63,67,68,71,72,58,42,20,44,6,23,24,30,31,11,41,89,15,33],advic:[86,16,12,29],scanstat:[26,34],destroi:[81,30,82,56,36,18,60,80,83,15,37,84,77,71,12,65,1,13,35,29,72],note:[0,53,56,57,17,18,54,60,62,65,67,68,70,40,72,73,4,13,58,42,59,88,44,22,78,24,50,25,27,29,81,30,82,9,31,45,10,8,46,47,12,92,34,35,80,87,36,48,32,89,15,84,90,33,71,94,37,51,38],ideal:[9,44,62,11,65,72,41,17],take:[84,54,57,17,18,63,65,70,71,80,41,42,50,59,77,6,79,24,7,25,27,28,29,81,30,82,9,10,8,11,46,12,22,13,87,36,48,89,15,90,16,33,92,37,51,38],advis:[92,5,50],"0x000000010001287d":16,interior:[56,57,58,65,33],unfix:[52,33],noth:[42,36,43,34,1,68,51,25,92,13,75,37,29,38],mps_pf_fri6gc:88,begin:[42,54,57,18,21,10,80,89,65,48,46,67,70,71,51,61,4,84,29],sure:[30,55,46,16,71,33,37,51],tospac:[54,71,70,57,61],norman:[60,31],trace:[53,56,57,17,59,62,63,65,67,70,71,72,34,58,42,6,23,24,80,29,82,31,45,83,13,35,16,33,37],normal:[0,55,57,17,48,71,72,74,84,43,77,24,7,8,29,25,46,34,87,13,90,41,51],buffer:[84,9,18,32,6,70,65,68,59,71,80,92,34,94,13,58],friedman:[60,31],enter:[16,71,59,74],compress:[71,57],clearer:34,eclect:15,poollo:18,egc:[4,88],wire:[62,74],provabl:[56,63,37],tract:[6,17,45],pair:[50,56,58,18,88,25,16,33,4,37],neatli:30,paulo:31,mps_alloc_pattern_ramp:47,perceiv:[0,15],synonym:[57,58,18,15,71,74],proud:13,quantiti:[53,30,58,62,64,66,70,74],runtim:[31,17,15,37],pattern:[20,56,36,59,30,89,63,11,87,54,46,47,40,72,1,84,52],senior:93,mrg:[26,83],review:[31,17,18,37],mrb:60,uncontrol:[32,13],messageempti:83,mps_amc_appli:22,show:[30,44,6,24,16,25,13,41],mps_mvff_free_siz:92,maint:51,infant:[53,65,31],merit:46,concurr:[39,54,57,58,31,67,90,72,74,41],overlarg:12,permiss:[84,35,15],hack:18,threshold:6,obj_delet:[25,87,8],cbschangesizemethod:50,ground:72,slot:[54,41,28,84,8],onli:[39,53,55,56,57,58,18,60,61,62,63,65,66,67,69,70,40,72,74,34,42,50,5,21,77,6,78,79,24,7,8,27,28,29,81,30,82,9,10,25,83,46,47,12,13,35,80,87,48,1,32,43,89,15,37,84,90,16,33,41,71,94,22,51,38],slow:[0,30,17,63,70,15,46,16,71,12,29],slop:46,fenc:[46,54],pointer:[0,54,55,56,57,17,18,60,61,62,1,65,66,67,69,70,71,72,74,84,58,42,50,59,88,6,78,79,24,7,8,27,29,81,30,82,9,31,32,25,11,46,12,34,35,85,80,87,36,48,89,15,37,90,16,33,94,22,38],"0x7fff5fbfef2c":16,transact:31,activ:[42,30,56,57,59,43,6,62,15,54,69,71,65,63,37,29],behind:[42,13,57,2,25],clocks_per_sec:32,z80:18,luc:31,black:[42,53,57,58,45,60,65,67,70,71,80,35],btfindshort:18,sigusr1:94,petrank:31,analys:36,wilei:31,overwritten:[60,24,16,72],moreau:31,nearli:[84,62,17,65,37],variou:[20,82,37,17,18,21,30,50,62,15,23,46,33,4,34,51],get:[0,57,17,18,61,68,71,74,4,84,42,44,22,8,29,30,10,25,83,46,12,41,86,36,89,16,33,37,51],genera:31,mung:51,clang:[39,4,16,88],secondari:[51,31],cannot:[0,55,56,57,18,65,66,67,69,70,71,72,34,42,59,6,24,50,25,27,29,30,10,8,11,46,47,48,41,89,84,90,33,37,51,38],murali:31,freestor:[54,66],eventrep:80,mps_io_writ:32,requir:[0,53,56,57,58,18,54,60,61,62,1,65,67,70,71,2,74,75,13,59,21,77,6,79,24,50,8,27,28,29,30,82,9,45,10,25,11,46,34,35,85,80,87,72,32,43,89,15,37,90,91,83,33,41,92,94,22,51,38],ssb:71,reveal:[16,59,25],discontigu:59,arenaclamp:6,seldom:68,borrow:46,yield:74,hash_t:[87,25],joker:13,tillotson:93,"0x7fff5fbfef28":16,roger:31,aris:[54,56,35,5,33],though:[17,18,62,90,15,69,16,51,74,35,29],scott:31,where:[84,54,55,56,57,17,18,61,62,63,65,68,70,13,72,74,4,41,50,59,21,6,49,24,7,8,29,30,82,83,25,11,46,12,34,35,87,36,48,43,89,16,33,71,94,37,51],mps_key_mvff_first_fit:[92,28],summari:[42,6,80,17,50],kernel:72,ams_alloc:10,highest:[29,18,72],lasttractbas:6,mps_formatted_objects_stepper_t:[71,35],closurep:50,symtab_root:[37,25],zaphod:18,reserv:[57,17,59,60,62,48,68,69,71,72,34,58,5,77,80,29,30,82,10,12,84,37],lnc:31,concern:[42,30,60,62,11,70,16,72,50,37],infinit:62,checkl:7,detect:[56,59,63,65,67,72,1,84,78,8,29,30,82,45,25,11,46,12,41,90,16,50,37,51,38],"0x1003cb958":16,parent:[61,65,7,40,34,41],mps_sac_flush:12,mps_telemetry_filenam:[32,13],checkd:7,enumer:[34,71,50],"0x000000010007b14a":16,label:[13,70,48,52],hist:[42,18,21,6,43,83,46,7,80,50,26,3,41,51],palimpsest:74,enough:[59,30,89,37,58,18,54,77,10,50,11,35,16,12,32,13,63,34,29],between:[0,53,55,56,57,17,54,62,65,66,67,68,71,72,74,4,84,88,77,6,24,25,28,29,30,31,32,33,11,46,12,22,41,80,36,48,90,50,37,51],"import":[84,30,82,17,18,44,33,70,15,37,48,24,7,71,65,25,13,50,34,72],checku:7,across:[57,65,50,92,4,51],dybvig:[72,31],spars:[55,59,65,72,74,15],pretti:17,august:31,amort:50,mps_build_:51,comp:15,tarditi:31,style:[41,80,17,15,18],cheap:[53,56,89],blame:30,cycl:[53,54,57,59,44,8,65,67,70,71,15,74,29],sparc:[4,18,88],spare:[54,45,6,11,71,29],inflex:[70,11],uncondition:90,shortag:[94,11],come:[37,18,6,50,11,62,15,35,68,56,65,8,13,4,29],caar:16,reaction:13,unrel:16,freestand:32,mps_cached_count:12,mono:15,region:[30,59,31,54,80,15,16,71,72,33,41],mps_var_df:51,contract:[6,5],retir:51,audienc:13,saguaro:57,coucaud:31,mani:[39,54,55,56,57,17,18,62,63,65,66,68,71,72,74,13,58,42,59,77,24,25,29,30,82,32,11,12,41,87,89,15,84,90,16,93,37,51,38],unstructur:9,mann:[6,93],bitset:[34,58],nettl:[72,31],bufferpool:10,undocu:[92,94],color:[53,57,58,60,65,67,70,71],overview:[39,20,86,42,18,21,83,6,43,11,23,46,45,50,3,41,37,51],inspir:15,period:[30,56,24,47,71,37,29],dispatch:[50,37,17,15,25],mps_class_mv_debug:[75,28,1],duti:15,exploit:[77,22,17],qin:31,anti:41,exclud:[32,4,58,18],sentinel:6,constant:[82,57,18,88,10,50,65,46,16,48,32,51,72],poll:[0,6,45,25],poli:41,damag:[62,5],ultim:6,clarif:51,coupl:[30,37],resort:25,invert:[65,18,15,74],feldt:93,invers:[53,18],fixabl:80,mark:[53,54,57,17,18,61,62,63,65,67,69,70,71,74,19,58,42,20,24,25,26,27,31,10,80,13,36,1,15,93,38],klauser:31,workshop:[31,88],sparecommitexceed:6,weak_table_:8,scannabl:[42,59,71,25,37,38],string_equalp:25,"0x0000000100002fe4":16,parser:37,mps_arena_spare_commit:[6,71,29],"000ae0397334e0a0":13,derefer:1,thousand:44,resolut:[32,13],andrew:[93,31],catastroph:71,mps_sac_class_limit:12,compactli:[68,71,58],ironpython:15,lectur:[13,31],former:[42,54,67,72,21],mps_arena_spare_commit_limit:[71,29],sound:[11,18],"char":[84,87,36,58,32,25,37,16,33,13,28,34],"0x000000010000261b":16,thesi:31,"0x000000010002686d":16,mps_align_t:[59,48,92,34,28,35],diagnost:4,poolfre:[34,80],epdlpoolclass:41,antoni:31,thisclasscoerc:41,wasmark:26,trick:37,cast:[54,60,32,48,70,33,34,41],invok:[30,57,59,18,50,46,90,7,33,41,13,35],mps_ap_alloc_pattern_end:[47,72],mps_pool_debug_option_:[46,28,1],"na\u00efv":[90,25],amcscan:16,invoc:[57,59,48,71,50,41],mps_message_gc_not_condemned_s:36,addroffset:34,findshortresetrangehigh:18,advantag:[30,58,43,77,89,11,65,46,71,72,25],stdout:32,metric:64,henc:[53,30,55,57,74,70,84,7,72,25,41,50,35,80],mps_scan_begin:[82,17,8,33,48,37,78,25,35],worri:[30,17,11,15,25,84],destin:[32,87,29],cluster:18,"0x1003f9b98":16,cobol:[11,15],eras:15,cbsiteratelarg:50,"0x7fff5fbff830":16,mps_ss:17,nearbi:[63,16,11],smalltalk:[53,54,56,31,11,15,72],sos9sc:88,develop:[39,18,70,4,5,21,44,6,7,27,29,31,45,10,11,46,41,86,15,50,51,38],"0x1003f9b58":16,alphabet:18,stepper:[82,10,22,68,71,35],lippgc:88,same:[84,54,55,56,57,17,18,62,63,48,67,68,69,40,72,74,13,58,42,59,43,77,22,78,79,50,8,26,27,29,30,82,31,10,25,46,47,12,34,35,85,87,36,32,88,90,33,41,92,37,51,38],check:[0,54,56,17,18,60,40,80,1,19,4,34,42,20,43,6,79,7,25,29,81,30,31,45,10,50,46,12,41,88,89,84,90,16,33,37],binari:[54,56,17,5,21,32,6,43,89,67,51,13,29,58],epoch:[32,6,34],mps_arena_class_t:[59,29],pad:[54,80,37,57,9,1,60,61,22,8,86,65,35,46,16,2,74,27,25,79],protsync:51,sos8gc:88,circularli:71,knuth:71,document:[39,17,18,60,62,48,70,40,3,4,34,42,5,21,6,7,80,26,28,29,81,30,31,45,10,83,46,47,41,43,15,84,50,71,94,51],ensuresomeclass:41,week:15,exhaust:[77,35],finish:[0,30,9,50,61,6,25,11,65,42,46,53,16,80,74,13,28,41,29,58],typesett:15,poolfix:17,nest:[57,47,28],assist:[71,13,16,70,65],driver:51,someon:[30,48],treadmil:[60,70,57,31],event_param:13,driven:[67,31],capabl:[84,13,71,72,15],mps_root_create_table_mask:82,mps_addr_pool:[81,29],improv:[56,18,63,68,72,4,44,22,24,32,27,30,9,31,10,8,46,36,89,15,77,91,92,51],extern:[54,55,56,57,58,18,65,71,72,74,42,24,80,29,30,45,11,83,41,89,90,50,92,51],postpon:[37,25],mps_fmt_skip_t:[71,35,37],tradition:67,mps_args_end:28,appropri:[56,57,58,18,62,65,71,72,74,42,59,21,77,7,80,29,82,25,41,35,89,90,37,38],port_:[37,25],macro:[84,17,18,21,61,6,88,48,46,7,12,33,41,34,28,37,51,52],attrscan:34,justifi:[59,18,50],w3i6mv:[4,88],without:[0,39,55,56,17,18,54,60,62,65,67,53,71,72,4,41,5,6,24,27,28,29,81,30,82,9,31,10,50,11,46,47,12,34,35,86,36,48,15,84,90,33],evict:57,temptat:33,model:[53,31,15],branquart:[31,15],dereferenc:[34,84,15],commitlimit:6,table_rehash:[87,25],tobt:18,gdr:80,printezi:31,execut:[39,55,56,57,17,18,62,74,70,1,58,59,5,43,44,8,32,80,41,21,15,94],among:[30,15,46],c89:57,unflush:13,rest:[94,35,37],halfwai:50,mps_build_lc:88,gdb:[13,16,29],doligez:[31,15,74],kill:30,tracequantum:16,aspect:[57,21,44,88,11,71,50,29],touch:[10,84,87,61],rankexact:34,speed:[30,57,18,77,11,15,71,12,33,13,84,38],mps_build_ll:88,concentr:[30,51,21],death:[53,77,31,25],autocad:53,miscellan:[30,32,23],issetrang:18,mmap:[60,62,72,51],except:[39,58,18,62,48,67,2,74,59,5,43,6,65,80,30,82,50,83,46,12,13,35,89,15,33,94,22,51,72],littl:[42,30,18,6,63,11,15,46,12,80,62,51],desktop:71,"0x1003cbe50":16,instrument:51,setenv:4,treatment:57,exercis:[16,70,31,18,50],notori:15,role:[54,37],doctorat:31,pitman:93,disrupt:31,splayfindfirst:50,nielsen:31,tobas:18,read:[0,58,18,63,48,67,70,71,72,74,13,42,43,6,8,29,82,9,32,25,83,46,34,35,15,90,16,94],outermost:47,amc:[20,36,17,10,22,48,16,47,2,80,19,27,37,38],mop:46,mov:8,vivek:31,reassembl:33,sac_o:12,anchovi:50,insist:41,sobalvarro:[57,31,15],mod:51,mps_class_am:[27,28],intel:[56,58,88],distil:15,patrick:31,robson:31,integ:[54,82,37,58,18,88,32,8,35,67,69,7,71,59,25,13,34,87],shrink:[77,6,58,50],benefit:[42,30,54,6,46,71,8,41,62],weakest:72,either:[39,57,58,18,62,63,65,67,71,72,4,42,5,43,77,6,24,25,26,28,29,81,30,82,83,8,11,46,12,34,35,87,48,89,15,90,16,50,37,51],larchant:31,output:[10,32,48,16,71,50,4,13],downward:[29,18],inter:[57,22,65,67,24,72,35],manag:[0,39,55,56,57,17,18,54,60,61,62,63,64,76,65,66,67,68,53,70,40,2,73,74,75,34,58,42,20,59,5,77,6,23,79,24,50,8,26,27,85,29,81,30,82,9,31,45,83,25,11,46,12,92,13,35,14,80,87,36,48,72,94,89,69,15,37,84,90,16,33,41,71,93,1,22,51,38],fulfil:6,arena_o:29,cbsfinish:50,minsiz:50,free_:80,poolawl:18,thermodynam:31,mps_key_format:[1,9,22,8,37,79,2,25,27,28,35],legitim:33,interlock:87,splayroot:50,journei:37,cruz:31,assert_mpsi:51,has_reservoir_permit:12,constitut:[37,18],resfail:[34,50],basic:[42,30,58,6,74,11,15,46,70,71,51,25,92,41,37,29,72],slice:[42,36],poolmv2:50,thereund:46,definit:[82,56,17,18,45,6,80,15,46,7,48,50,41,51],achiev:[82,56,77,6,65,24,71,62],legal:28,moon:[93,31,15],pioneer:15,moor:[31,18,43],exit:[30,55,18,65,37,90,16,94,35],"0x00000001003f9a58":16,mps_fix2:[54,82,17,8,33,37,78,25,35],mps_fix1:[54,82,17,8,33,37,78,25,35],virtualalloc:[51,29],sus8gc:88,blocksiz:50,obj_pad:[35,37],immun:[57,65],compris:[6,72,18,43],power:[56,58,18,88,8,89,15,67,24,59,71,48,25,34],event_typ:13,sixth:37,garbag:[0,39,55,56,57,17,59,54,60,61,62,63,65,67,53,70,71,72,74,4,75,13,58,42,20,44,22,23,79,24,25,27,29,81,30,82,9,31,10,8,11,93,47,34,35,85,86,87,36,69,15,37,84,77,90,16,92,52,94,6,38],inspect:[18,65,16,3,35,29],indira:31,"0x00007fff9050ae2a":16,broken:[54,57,58,71,72,80,26],great:[56,63,17],fulli:[57,48,7,71,80,41],regexp:10,referr:65,s7m6mw:88,w3almv:88,src:51,simplest:[84,4,70,37],central:[71,57],greatli:[30,4,70,89],mps_mvt_size:77,arena_class_vm:29,joyner:[62,31],drag:31,acm:31,arenafin:83,degre:[46,48],wolf:31,stand:[67,30,24],wold:1,act:[42,62,80,57,74],johnston:[54,55,31,67,70,71,92,93],luck:[10,84,17],processor:[39,56,57,17,59,62,63,48,66,67,69,70,71,72,74,84,58,88,8,82,32,65,13,15,51],mps_message_type_en:[0,90,25],"001b":13,routin:[54,30,83,46],effici:[53,39,17,18,62,63,65,67,69,70,40,72,75,84,58,42,59,77,6,24,8,27,29,30,82,9,31,11,46,92,22,34,89,50,71,37],"001a":13,dot:13,shaw:31,"00000001003fd000":13,wordindex:18,terminolog:[87,62,67,71,74,41,52],surviv:[42,53,56,36,17,59,62,11,15,69,74,37],vigil:17,fence_templ:1,btrangessam:18,cbsblocklimit:50,nikla:31,icfp:31,your:[39,55,17,68,13,4,84,44,32,29,30,82,10,25,47,34,86,90,16,33,37,38],stare:8,fmtdy:17,log:[34,32,4,13,50],unflip:83,area:[42,30,56,57,58,59,54,61,62,63,11,65,66,71,50,29],aren:[39,17,5,25,34,94,84,18],mps_class_snc:[79,28],poolclassmrg:83,overwrit:[54,56,58,18,30,60,62,46,69,16,71,59,1,84],checkabl:6,strip:33,start:[0,54,55,57,17,18,72,65,70,40,2,4,75,41,58,42,59,77,6,79,24,50,8,27,28,29,81,82,9,25,47,48,92,13,85,80,36,89,15,37,84,16,33,71,52,94,22,38],mps_os_li:88,"00000001003fd328":13,interfac:[0,39,56,57,17,18,54,60,61,83,64,65,68,53,70,2,3,19,75,34,58,20,59,43,77,6,7,8,26,27,28,29,81,30,82,9,31,45,10,50,11,46,12,13,49,85,80,87,48,72,32,88,89,15,37,84,90,33,41,92,94,22,51,52],low:[42,30,36,18,45,60,32,8,15,67,46,33,71,74,92,13,88,50,35,29],lot:[42,30,87,36,17,6,50,11,15,46,24,74],resum:94,strictli:[53,51,18,58],obj_skip:[16,35,37],repetit:[11,33],mps_message_gc_start_whi:[0,36],longword:[56,63],morrison:31,programmat:3,conclud:30,tomasev:31,regard:[24,56,57,62],alain:[31,15],aslr:16,amongst:87,allegro:15,procedur:[57,59,45,25,15,90,71,72,33,37,51,38],obj_t:[84,82,87,8,25,78,16,33,13,37],illus:[0,62,71],trickier:37,untag:8,faster:[0,30,62,11,15,53,71,12,33,34,84],notat:18,amcscannailedonc:16,table_ref:[87,25],amcz:[20,9,33,2,25,19,37,38],sbrk:[60,71,58],possibl:[39,53,55,56,17,18,62,63,65,71,72,34,58,42,50,59,5,43,77,24,7,25,29,30,82,10,8,46,12,41,35,80,87,15,84,16,33,37,51,38],"default":[0,10,32,33,37,16,25,41,4,13,51],"__mode":15,poolalloc:[34,80],nearest:71,unusu:[62,29,15],manuel:31,embed:[31,21,32,50,15,65,33,37],deadlock:[6,63,90,43],powerless:39,pool_superclass:41,gone:29,addradd:34,creat:[0,39,57,18,54,60,61,62,1,48,67,70,71,2,74,75,13,42,77,6,78,79,8,27,28,29,81,30,82,9,25,83,46,12,22,41,35,85,86,87,36,72,15,84,90,50,92,94,37,51,52],conundrum:37,pseudo:17,deep:7,strongli:[53,31,74,15,67,71,72,25,92],intro:[42,18,21,6,46,50,3,41,34,51],decreas:[30,89,58,72],file:[54,17,62,48,66,71,72,3,4,5,21,24,25,29,30,45,32,13,15,90,16,37,51],type_str:[16,25],ecoop98:31,proport:[53,30,36,17,44,62,50,66,24,33,37],eliot:[93,31],tv_sec:32,fill:[84,82,18,32,6,63,37,46,80,74,92,34,35,62],hit:[42,58,62,63,66,16,72,74,94],again:[42,53,87,58,18,54,32,62,74,11,90,84,46,24,25,41,37],beyond:[82,17,15,29,4,35,51],know:[39,53,55,57,17,18,60,48,66,68,74,34,42,24,29,30,82,10,11,46,12,41,35,16,33,37,38],fput:[30,37,32],"0x1003f9ba8":16,hybrid:[53,62,50,59,45],reduct:[42,31],tight:[13,89,17,15,24],"0x00000001003fb000":16,valid:[54,57,59,62,66,72,18,6,7,80,29,81,82,8,25,11,46,84,36,16,50,51],compet:[65,29],epdldebugpoolclassstruct:41,you:[0,39,17,54,60,48,67,53,40,72,4,13,42,5,44,22,78,91,79,24,50,25,27,28,29,81,30,82,9,10,8,11,46,47,12,92,34,35,87,36,32,84,90,16,33,71,94,37,51,38],zvi:31,coerceclass:41,abysm:50,fork:57,discours:57,btre:18,genuin:[30,37,33],sigmod:31,config_var_df:51,sequenc:[82,57,18,89,6,1,70,16,40,33,41,34,35],symbol:[84,82,18,31,32,86,15,16,48,25,13,37,51,52],gnumak:4,lueh:31,wirth:15,string_:[16,37],briefli:[89,24,11,17],cbsfindlargest:50,peak:[17,29,37],nrevers:31,pool:[39,53,56,57,17,18,54,60,62,1,65,68,40,2,74,19,4,75,34,58,42,20,59,5,88,44,22,78,49,79,50,91,8,26,27,29,81,82,9,31,45,10,25,83,86,46,12,92,13,35,85,80,36,48,37,84,77,90,16,33,41,71,52,94,6,38],mps_arena_create_k:[28,37,29],reduc:[42,30,56,57,17,31,60,89,6,63,83,65,53,24,51,33,66,29,72],neighbour:50,"0x1003f9b48":16,symbol_pool:13,"0x1003f9948":16,directori:[4,51],readership:[18,45,6,21,46,50,41],cmp:[87,25],descript:[0,80,37,18,10,33,82,15,35,84,87,71,65,74,13,94,34,72],unseg:71,contraven:41,tricki:[34,33],inevit:18,mimic:1,mass:62,potenti:[53,82,17,18,43,32,24,59,37],appl:[13,16,31,15,66],mps_chain_destroi:[36,37],degrad:[30,9,50],cpu:[53,30,56,88,62,63,11,4,29],scm:[44,16],represent:[53,54,87,17,31,61,6,65,67,68,69,70,71,29,50,62,18,72],all:[0,39,55,56,57,17,18,54,61,62,63,65,66,67,53,70,40,72,74,4,34,58,42,50,59,5,43,44,6,78,24,7,8,26,28,29,81,30,82,10,25,11,46,47,12,92,13,35,85,80,87,36,48,1,88,15,37,84,77,90,16,83,33,41,71,94,22,51,38],caleb:31,consider:[30,17,31,54,62,3,49,51],illustr:[70,17,29,37],lack:[32,62,15],ala:18,scalar:[68,63,71,35,59],extrapol:37,attrincr_wb:34,abil:[42,58,11,15,46,51],ptw:46,follow:[0,57,18,62,65,70,40,72,13,42,5,21,6,91,24,50,25,28,30,82,10,8,11,47,12,22,34,35,80,48,43,89,15,84,16,33,41,71,37],disk:[30,58,31,62,63,66,68,71,72,74],ruinou:44,resok:[34,41,18,80],abid:6,mps_ap_alloc_pattern_reset:47,accesswrit:34,ron:31,tracefix:[6,13,80],codasyl:15,mps_message_gc_condemned_s:36,cbsdelet:50,program:[0,39,56,57,17,59,54,60,62,63,65,66,67,68,53,70,40,72,74,3,4,84,58,5,21,44,22,78,24,8,27,29,81,30,82,31,10,25,11,47,12,13,35,87,36,48,1,32,89,69,15,77,90,16,33,71,94,37,51,38],those:[54,56,57,17,18,61,63,65,70,71,72,74,84,58,42,43,6,7,32,29,30,10,80,46,13,89,78,37],"10992f000":13,segclass:41,swallow:74,neglig:5,introduc:[42,30,82,61,6,11,65,71,15,72],xiaohan:31,liter:57,straightforward:[51,25],replic:[68,62,72,31,74],far:[42,30,17,18,43,60,11,65,16,25,34,37,29],mps_shift_t:34,mpm:[42,34,17,18,80],fat:51,util:[13,52,15,50],mpw:51,mps_class_amc:[22,28,37],verb:[62,18],mechan:[0,53,55,56,57,58,59,54,60,61,62,63,65,67,70,71,72,74,84,20,43,6,25,29,81,45,46,41,39,21,15,90,50,94],quantifi:31,veri:[39,54,17,18,61,62,63,65,70,40,72,74,84,58,42,59,44,6,24,8,30,82,45,10,25,11,12,92,41,85,89,15,77,83,50,71,37,51],rebuild:13,gmake:4,recurs:[30,57,59,31,43,6,15,66,7,71,41],"0x0000000100005ff5":16,lisp:[53,30,57,59,31,62,11,65,66,67,68,70,71,15,13],rescommit_limit:[6,34],list:[0,53,55,56,57,58,18,54,62,68,70,71,72,84,5,43,24,91,8,28,29,81,30,31,10,46,12,13,49,88,89,15,16,50,92,37,51,52],mps_free:[39,81,9,85,77,22,84,79,12,8,92,27,75,35,62,38],arenapark:6,emul:[39,8],reset_mask:13,adjust:[56,60,63,65,46,24,70,71,80],mps_lib_get_stderr:32,stderr:[30,16,33,37,32],small:[39,53,55,57,17,18,61,62,63,65,70,71,72,19,42,20,59,44,6,24,29,30,9,33,11,46,12,84,85,36,89,15,50,37],tear:[32,37],reg_scan:82,kemeni:15,compareless:34,lockreleaserecurs:43,synergi:46,inherit_class:41,tupl:59,ref_io:33,computation:68,ten:[44,54,13,70,57],ensuredebugclass:46,addrset:34,pun:[52,70,37,48,33],past:[39,30,57,17,18,35,67,37,38],rate:[31,6,63,15,66,67,70,71,62],pressur:72,design:[39,53,17,18,54,62,63,80,1,3,41,42,20,59,21,6,24,7,25,26,29,30,31,45,32,8,11,46,50,34,43,15,84,90,91,83,33,94,37,51,38],pass:[0,54,57,17,18,62,64,65,66,67,69,71,2,1,75,13,58,42,77,22,79,50,32,26,27,28,29,82,9,31,10,8,11,46,12,34,35,85,80,87,36,15,84,78,16,33,41,92,94,37,51,38],further:[0,30,82,87,57,17,6,69,84,24,33,13,35,29],suboptim:[36,37],mps_chain_creat:[36,37],mps_arena_class_vm:[28,37,29],cursor:17,what:[0,39,57,17,18,54,72,34,42,59,44,6,49,24,8,29,30,82,10,80,11,46,12,41,35,86,36,89,84,16,33,94,37,51],stood:30,sub:[41,58,18,50],richard:[31,18,21,6,43,83,46,7,80,50,26,3,34,93,51],clock:[0,57,32,6,16,71,25],diag:51,sum:[54,82,59,77,62,89,67,92,75,35,29],mps_pool_class_mv_debug:46,abl:[54,82,57,18,21,72,43,11,69,15,37,46,24,16,65,50,94,35,29,38],overload:71,delet:[0,30,56,8,78,15,67,24,50,71,25,13,34,39],abbrevi:[71,63,64,25],version:[0,17,18,48,40,2,3,75,13,42,20,59,21,77,6,79,50,25,27,88,29,81,30,82,9,45,8,46,92,22,34,35,85,87,43,15,84,16,33,71,94,37,51],regnesentr:31,intersect:50,consecut:[77,54,59],mps_build_mw:88,mps_build_mv:[51,88],runfinalizersonexit:90,"public":[53,54,55,56,57,58,59,60,61,62,63,65,67,68,69,70,71,72,74,4,30,10,48,84,15],contrast:[55,71,62,29,74],sizeisalign:10,millisecond:29,hasn:[53,13],full:[30,16,18,54,47,88,70,15,66,90,7,12,25,13,37,29],themselv:[30,56,18,67,90,34,41],berkelei:[31,5],variat:[89,24,71,62,72],sanctifi:34,sophist:[77,24,51],client_is_wait:29,behaviour:[84,43,10,6,45,48,68,46,90,50,33,41,13],modular:[10,62,46,15,30],shouldn:[42,17,37],spector:93,box:[57,58,65,67,69,72],omiss:51,solari:[4,88],excess:15,free_siz:1,method:[84,54,56,57,17,60,65,71,2,74,4,41,58,42,21,6,78,79,50,25,26,27,82,9,31,45,10,8,86,46,48,22,34,35,80,36,72,15,90,16,33,52,37,51,38],standard:[57,62,64,48,70,13,4,84,21,6,24,25,29,81,30,31,32,65,41,15,33,51],modifi:[54,36,18,21,6,15,46,24,71,65,57,28,62],pointeradd:34,valu:[0,54,55,56,57,17,18,62,63,65,67,68,69,70,71,72,74,13,58,50,59,88,6,24,7,8,26,28,29,30,82,10,25,12,34,35,80,87,48,1,32,15,84,78,16,33,41,92,37],arena:[0,39,57,17,18,72,62,1,48,68,69,71,2,74,75,13,42,20,59,44,6,79,8,27,28,29,81,82,9,45,10,25,83,46,12,22,34,35,85,86,87,36,77,90,16,50,41,92,94,37,52],search:[54,18,31,61,89,24,71,50,13,58],ahead:57,garwick:31,fwd:[37,35,25],fstruct:37,removeadjacentrang:50,mac:[4,31,66],prior:[0,13,87,15,50],amount:[42,30,56,36,17,18,44,6,89,65,77,24,71,51,8,92,34,75,29,72],calder:31,pick:[41,69,31,25],action:[42,30,56,54,80,67,46,90,40,72,25,71,34,84,29],pauillac:43,mps_addr_fmt:[35,29],magnitud:[68,62,63,71],via:[84,62,1,48,70,72,74,75,13,5,77,6,79,7,8,27,29,81,30,82,9,10,80,11,12,22,41,85,87,32,15,83,50,92,94,37],depart:31,declin:47,primit:[30,24,57,65,15],transit:42,"0x1003fb130":16,reservoirpermit:41,readili:[32,24],filenam:13,mps_telemetry_get:13,inappropri:24,mps_io_destroi:32,heurist:[60,57,15,74],demonstr:13,gratuit:18,decrement:[67,24,63,72],coercion:41,dangl:[42,62,56,11,1],select:[42,18,31,10,6,66,68,72,74,13,51,58],gudeman:[67,69,70,58,31],hexadecim:13,sparecommit:6,"0x1003cb970":16,distinct:[54,58,21,60,88,11,65,68,71,17],findlongresetrangehigh:18,etc:[58,60,62,11,91,71,4,13,51],regist:[39,54,57,17,59,62,63,65,67,70,71,72,75,13,77,22,78,79,25,27,29,82,9,8,33,83,34,85,80,15,84,90,50,92,38,94,37,52],certainli:30,coverag:18,workstat:[65,15],rhel:39,azaguri:[57,31],taken:[36,6,11,70,24,7,71,25,34,29],zorn:[30,57,58,31,15,93],travers:[30,6,56],minor:0,more:[0,39,57,17,18,54,60,61,62,63,65,67,68,53,70,40,2,74,4,34,58,42,59,5,43,77,22,78,23,24,8,28,29,81,30,82,31,10,25,11,46,47,12,92,13,35,87,48,32,69,15,37,84,90,16,50,41,71,94,6,51,72],mps_reserv:[10,48,37,46,16,72,25,84,35],flat:[17,15],mellon:31,desir:[30,71,58,46],mps_alloc_dbg_v:46,hundr:[44,70,57],hyperspec:[57,15],brisl:[50,18,21],mps_sac_creat:[71,12],flag:[24,56,83,29],stick:63,particular:[0,53,57,17,18,54,60,62,63,65,70,71,72,74,84,59,5,43,77,6,24,25,29,30,50,46,47,48,13,35,80,87,15,33,93,22,51],known:[39,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,53,70,71,72,74,34,5,77,6,76,24,25,30,80,11,48,41,87,89,69,15,84,90,94,37],beown:43,cach:[56,57,17,18,62,63,66,67,70,71,72,75,20,59,77,6,79,24,8,27,81,9,31,45,11,12,85,92,38,22,52],mps_key_mean_s:[77,92,75,28],canterburi:31,none:[42,87,18,10,6,84,51,8,41,13,28,35,29,38],mps_class_mvff:[92,28],methodolog:31,operator_:37,damien:31,outlin:50,resresourc:34,dev:[4,72],histori:[42,20,31,18,21,6,43,83,62,15,46,45,7,80,50,26,3,13,41,51],rootstruct:34,remain:[42,54,80,57,9,89,74,70,90,37,67,24,50,71,51,25,13,84,34,29],den:[67,30,70,31],learn:[39,30,15],abandon:65,motiv:[59,15],btfindresrangehigh:18,dee:56,def:[6,51,34,18,50],stubborn:16,omit:[7,16],rootvar:34,bogu:26,useabl:6,scan:[39,53,55,56,57,17,18,54,72,63,65,68,70,71,2,74,75,13,58,42,20,59,44,22,78,49,79,24,8,27,29,82,9,31,45,10,25,86,46,48,34,35,85,80,89,84,77,90,16,33,92,52,94,37,38],rodriguez:31,registr:[57,25,52,94,74],share:[57,60,62,68,70,71,4,13,43,6,24,25,29,30,31,11,46,41,15,16,33,94],accept:[36,62,80,37,70,12,33,57,41,35,51,38],pessim:77,prehistori:6,unreli:[30,11],"0x0000000100001947":16,partner:15,phrase:68,struggl:16,strlen:25,resmemori:[34,50],condemn:[0,42,36,17,45,80,70,65,67,54,53,16,71,25,26,57],uncheck:7,huge:[30,63,71,66],cours:[53,32,6,37,84,35,29],untru:51,awkward:8,divid:[53,54,55,57,58,18,32,62,89,11,67,70,24,59,71,34,37],rather:[42,30,56,57,18,54,60,10,6,63,15,48,77,53,16,65,13,84,37],anoth:[0,53,55,57,58,18,54,60,65,66,70,71,72,74,34,42,24,8,29,81,30,82,25,33,11,47,12,41,87,36,48,89,15,84,90,16,50,94,37],comfort:44,nwper96:31,commonli:[42,54,56,58,59,10,62,63,66,67,68,71,74],rapport:31,narrowli:53,daconta:[31,15],heck:31,compactifi:[57,31],reject:[30,33],strong:[42,17,18,65,67,90,70,71,15,25,72],simpl:[57,17,18,70,71,72,4,58,59,43,77,24,25,31,32,8,85,89,15,16,33,38,37,51,2],mps_fmt_create_auto_head:35,pieper:[93,31],arenaseri:6,resourc:[0,54,59,60,62,65,66,70,40,80,4,34,77,32,29,30,10,25,11,41,35,90,50,51],referenc:[53,54,56,57,59,61,62,63,68,71,74,84,22,79,24,7,8,27,9,34,90,16,37],algebra:[68,71,59],mps_fmt_copy_t:35,variant:[9,61,22,8,15,37,79,71,72,33,27,35,38],reflect:[58,31],okai:[26,34],type_t:[84,87,37,25],sos8gp:88,rovner:31,varianc:35,associ:[0,30,80,87,84,59,43,6,50,64,90,15,67,69,70,12,65,25,13,62,51],unreserv:80,cmpf:25,circumst:[81,87,57,60,62,90,24,50,28,37,29],"short":[42,80,63,17,18,44,50,68,71,12,74,34,72],addr_method:[25,28,8],confus:[34,71,37,59],mpseventtxt:13,ambigu:[55,57,17,59,62,69,71,72,74,84,42,6,79,8,26,27,29,82,31,25,22,34,90,33,38,37,52],caus:[54,17,60,61,62,1,65,68,70,71,72,74,58,42,5,77,6,24,25,29,81,30,31,10,11,47,12,90,16,50,92,37,52],callback:[50,45],chiefli:53,leroi:[31,74],issubclasspoli:41,began:13,target_check_deep:7,rotat:61,reservoir:[46,13],root_o:82,soon:[42,82,56,57,17,74,90,65,37,24,33,4,35,29],mps_lib_memset:[32,34],reachabl:[53,54,57,58,59,62,63,65,67,69,70,71,72,74,22,79,24,8,27,29,30,82,9,31,25,11,84,80,15,90,33,37],cook:31,scientist:15,through:[42,55,41,17,18,6,80,15,37,67,46,90,12,65,50,26,13,34,29],cbsalign:50,word_act:18,hierarchi:[57,62,63,66,67,71,72,74,41],coerceinst:41,exponenti:53,suffer:[30,63,54],kistruck:93,tracescansegr:16,paramet:[84,57,17,18,60,65,13,80,41,77,22,79,32,27,82,9,45,10,8,46,12,34,35,48,15,50,92,94,37,51],"0x1003f9b70":16,typedef:[84,87,36,18,1,6,8,70,48,37,50,12,25,41,28,35,51],make_bucket:25,special_:37,fri4gc:88,mps_pool_class_epdr_debug:46,late:[81,62,25],harmless:[46,47],classofpoli:41,pend:[80,18,50],rapidli:[44,15],exchang:91,stephen:[93,31],tractstruct:6,might:[53,54,56,57,17,18,60,61,62,65,67,68,13,72,74,41,42,44,78,24,50,32,28,29,81,30,82,25,10,8,46,12,34,35,87,36,48,89,84,90,16,33,71,94,37,51,38],alter:[40,51],mps_key_t:28,finer:72,wouldn:[24,11,25],good:[39,42,82,17,5,58,44,32,63,89,90,84,53,71,13,37,29,18],"return":[0,39,57,17,18,54,62,83,65,70,40,2,75,34,50,59,43,44,6,78,79,24,7,25,27,28,29,81,30,82,9,10,8,11,47,12,92,13,35,85,80,87,36,48,32,89,37,84,77,90,16,33,41,71,94,22,72],amelior:46,mps_ap_t:[59,8,79,47,40,25,84,37],timestamp:13,pollut:42,entry_interpret:16,inria:[31,43],symbol_t:84,framework:[42,20,31,15,45],swizzl:31,mps_rank_ambig:[82,71,37,59,72],arenaalloc:6,compound:[30,57,51],abi:88,arbitr:62,detach:80,complain:46,bigger:[44,57,35,18],feet:29,eventu:[0,42,11,15,46],weak_buckets_ap:25,osarct:[4,88],datastructur:[6,18,50],refresh:[56,71,50],mysteri:[30,56,15],easili:[39,87,59,5,63,15,46,24,34],average_s:[92,75],ecru:[60,55],tracescan:80,type_pad:[16,37],"12th":31,found:[17,18,74,71,1,13,58,44,80,81,30,82,25,11,46,12,84,35,87,50,92,37],difficult:[30,56,59,54,62,90,15,24,16],mps_telemetry_label:13,clamp:[6,57,69,29,74],interleav:[39,54,62,57,2],weight:[56,18,31,67,24,72,58],"0x0000000100074106":16,arenaread:83,lua:15,hard:[42,30,82,58,62,11,24,16,71,72,84,37],idea:[42,57,45,15,46,90,71,25,13,41],ifip:31,realli:[42,30,81,54,6,46,33],heavi:30,linkag:51,cbsfinddeletelow:50,expect:[53,59,63,74,42,18,21,44,80,29,30,82,47,12,34,35,36,43,15,77,16,37],mps_stack_scan_ambig:[84,82,37,72],longjmp:35,operation:67,thing:[30,87,17,31,77,83,6,51,11,46,90,7,12,41,34,37,29,72],todo:25,event:[0,30,37,5,45,10,32,50,11,35,87,70,90,16,80,25,4,13,29,52],"0x00000001003f9c90":16,ftp:4,mps_sac_alloc:12,safeti:[52,94,87,43],uncollect:24,robert:31,publish:[53,91],research:[11,31,15],bibop:[72,17,15,58],resparam:34,mps_arena_cr:[6,29],fmt_ah:35,arenareleas:6,rove:[61,89],cbsiteratemethod:50,benjamin:[30,93,31],difficulti:[0,74],qualifi:[63,15],mps_lib_get_eof:32,proxi:54,uncommit:29,advanc:[20,86,58,31,30,61,8,11,15,25],mmu:[68,62,74],guess:16,pair_:[16,37,33],controlpoolstruct:6,mps_ap_creat:[9,77,22,79,8,92,27,84],reason:[17,59,65,71,72,74,84,18,5,6,50,80,29,30,82,10,8,34,35,32,89,15,90,33,92,38],base:[56,17,18,63,65,66,70,71,72,4,13,58,42,59,88,6,79,50,8,27,28,29,82,9,31,25,48,41,35,80,87,15,37,78,16,33,92,22,51,38],isymtab:37,believ:[56,70],suddenli:13,put:[42,54,87,57,18,60,8,62,25,83,48,46,69,74,29],classnamestruct:41,canon:41,earliest:15,mps_alloc:[81,9,85,79,72,10,22,8,48,37,84,46,77,12,74,92,27,75,35,62,38],lag:31,basi:[42,24,18],mps_label_t:[13,48],director:93,kept:[42,89,56,57,43,10,25,83,78,24,50,72,33,37,51],mpsc:48,thread:[39,57,17,59,62,63,67,70,72,34,58,42,20,43,6,29,30,82,9,31,12,41,35,86,87,84,16,94,37,52],mpsa:48,worth:[30,71],vararg:46,"_mps_fix2":17,mpsi:[10,16],mymp:4,perhap:[42,18,10,62,16,25,29],perman:[72,65],cbsstruct:50,lifetim:[53,55,56,17,31,60,61,22,63,11,15,66,77,71,65,25,37,62,72],entry_string_append:16,hasseg:6,simultan:[39,30,25,57,74],major:[42,30,56,57,5,22,89,15,46,53,62,29],dont:16,obviou:[46,6,34,18],upper:[77,48,51],feel:[46,37],articl:37,number:[0,53,56,57,17,18,54,60,62,63,67,68,69,70,71,2,74,4,13,58,59,43,44,6,25,27,29,30,82,9,31,10,50,83,12,34,80,36,32,89,15,77,16,33,41,37,51,72],placehold:37,globals_scan:37,mps_res_fail:[10,90,47,33],pop:[56,59,79,71,40,85],mps_message_typ:0,done:[0,53,57,58,62,71,74,4,42,25,29,30,32,83,46,13,87,36,15,16,50,37,51],uninterest:[17,50],stdlib:30,stabl:[77,31],implementor:[53,41],miss:[42,56,31,6,70,65,66,67,16,71,62],"000ae03973352375":13,fanci:46,gpl:5,differ:[39,55,17,18,62,65,67,68,70,71,3,4,58,42,5,44,6,25,29,30,31,10,50,11,46,12,34,35,87,36,48,89,77,16,33,92,37,51,38],fuller:11,script:[4,15],mps_t_ulongest:88,gpf:53,luiz:15,least:[0,54,57,17,18,61,62,48,67,70,71,74,84,59,6,80,29,30,50,46,12,13,85,87,36,33,37],mps_message_queue_typ:[0,62,25],checkpoint:21,paint:65,stori:[6,37],mps_key_awl_find_depend:[25,28,8],reclam:[67,90,31],statement:[84,48],relink:70,aver:[46,83,50],twenti:57,scheme:[0,53,57,58,59,65,67,71,72,44,25,82,31,11,13,86,87,15,90,16,33,37,52],supernamestruct:41,store:[0,39,55,56,57,17,18,54,60,62,63,65,66,67,68,70,71,72,74,34,58,42,59,43,6,24,25,29,30,82,31,83,50,11,46,12,41,35,85,48,89,15,84,90,33,94,37,38],eql:68,lii3gc:[4,88],alleg:33,assign:[84,30,59,18,62,89,15,67,70,12,34,13],parc:31,option:[6,50,64,48,46,71,80,27,92,13,75,28,37,29],table_delet:25,mps_thread_reg:[82,70,94,37],"0x7":33,similarli:[33,12,18,25],park:[81,82,57,6,69,74,22,29],pari:31,illeg:[80,40,1],part:[53,54,56,57,17,18,62,63,48,67,68,69,70,71,72,74,34,58,42,59,5,6,24,8,29,30,82,10,80,11,46,41,1,32,89,15,84,16,50,93,37,51],"0x1003fe820":16,mps_lib_fil:[32,50],fall:[53,87,31,77,10,15,24,12,34,72],mps_message_pol:[0,62],ncc:31,std:18,kind:[0,54,57,17,48,60,10,62,33,15,67,46,16,71,51,74,61,37,29,38],grep:13,doubli:[56,8,67,70,71,25,84,52],mipspro:88,cyclic:[39,30,56,57,31,15,72],remot:[22,79,72,8,27,38],remov:[0,42,80,56,6,33,82,15,37,46,24,50,71,48,74,28,35,51,72],dant:31,prot_bar:51,niklau:15,ringstruct:34,reus:[42,81,56,77,89,6,11,15,24,16,71,72,41],architect:93,sigcheck:10,arrang:[39,42,58,54,80,17],stale:[39,87,57,6,74,25,26,29,52],unalign:[82,58,59,62,69,80,92,84],typic:[53,54,55,56,57,58,18,60,62,63,65,67,68,69,70,40,72,74,13,42,59,5,88,77,6,24,8,29,30,82,10,80,11,12,41,35,87,48,32,89,15,84,50,71,37],grei:[42,53,80,45],randomli:11,cleaner:[53,11],comput:[42,30,87,57,58,31,6,25,11,15,24,16,71,72,74,62],"0b00":17,deleg:33,grarup:31,packag:[4,56,72,15],overran:16,perri:31,dedic:[94,15],"null":[30,82,87,50,6,8,48,37,46,78,16,71,80,25,84,28,35],commonplac:58,imagin:[46,13],wilson:[53,30,55,57,58,31,54,61,63,11,65,67,59,71,89],xref:42,brad:31,relationship:[46,41,7,15,68],thingcheck:7,mps_ld_:[34,87,25],ancillari:30,odd:57,lin:31,violat:[53,58,10,62,74,65,67,90,71,72,50,34],mps_res_param:[10,12],align_up:37,accessor:[41,50],count_max:18,build:[39,20,86,57,17,45,47,15,37,68,16,71,4,13,51],command:[0,10,15,16,4,13,51],analogu:70,brace:41,splai:[46,50,45],mktemp:13,pipelin:71,distribut:[39,53,56,36,5,31,44,63,15,67,24,65,72],alignof:37,unsur:[69,59],kai:31,previou:[61,54,17,43,10,80,89,90,16,71,74,13],reach:[0,54,56,57,62,74,11,24,50,72,25,34],mixtur:[54,8,33,48,15,25],crash:[90,11,29],most:[39,53,57,17,18,61,62,63,48,66,67,70,71,72,74,4,84,58,42,59,44,6,24,7,8,29,30,82,10,25,11,47,12,22,34,87,32,89,15,90,16,33,93,94,37,38],plai:31,plan:[31,38],moss:[93,31,74],alpha:[4,73,88],splat:[8,25,78,67,90,71,1],getrusag:32,appear:[39,30,87,57,58,83,62,74,70,65,16,48,25,41,13,50,37,51],bug:[39,30,56,54,10,32,89,11,15,16,65,74,13,84,29],filesystem:51,weak_table_t:8,clear:[30,87,58,18,60,74,67,16,71,72,25,13,33,34],cover:[42,82,63,11,48,71,33,84,37,29],recherch:31,destruct:[30,80],dimension:[71,15],quadword:[56,73],ext:51,getter:6,abnorm:[13,11],clean:[41,56,15,74],mpscawl:8,addr_io:46,blend:15,microsoft:[39,57,88,15,4,51],iwooo:31,think:[84,82,15,46,24,12,34,13],"0x000000010000d75f":16,summer:31,"0x0000000100005e30":16,pooltriv:80,xcode:4,memorandum:31,lispwork:15,eq_hash:[87,25],python:[30,11,15,74],simon:31,session:[29,25],particularli:[30,56,57,18,11,65,69,70,74,41],cdr:[16,37,33],fine:[62,16,90],find:[0,39,56,57,17,18,54,60,63,53,70,71,72,4,13,58,42,6,24,50,25,29,30,82,31,8,46,41,49,87,36,89,33,37,38],leewai:33,impact:51,buckets_fmt_:25,dosser:31,coerc:41,copyright:5,writer:15,solut:[30,55,45,6,50,11,15,46,24,74,4,37],"0x1003f9bc8":16,peculiar:72,ambig:42,rangessam:18,tag_mask:82,mps_message_finalization_ref:[90,83,25],templat:[46,1],factor:[30,62,70],unobtrus:[30,31],iec:[48,32,57,31,15],pooldebugmixinstruct:46,writef:34,boulder:31,remedi:74,poolamc:16,unus:[30,57,58,18,59,62,89,16,71,29,1,35,51],"__file__":46,express:[31,16,84,18,5,59,62,33,89,15,48,7,65,25,41,4,88,34,51],cheaper:[60,30,62,58,54],allen:31,nativ:[72,88],mainten:[41,51,50],fastest:[71,84,57,33],liabl:[13,5],cgi:15,cbsfindfirst:50,him:30,obligatori:41,morgan:31,napier88:31,whenev:[82,87,18,21,60,15,67,24,7,34,37],someclassstruct:41,synthes:31,"0x1003f9b68":16,"0x100001b80":16,mps_build_gp:88,common:[54,55,56,57,58,59,61,62,63,65,67,70,71,74,84,6,23,24,30,10,50,11,41,35,89,15,78,16,33,94,37,51,52],mps_chain_t:[36,22,2,27,28,37],fuzzi:11,unmaintain:15,"0x0000000100068050":16,sac:12,crl:31,"0x1003f9b88":16,set:[53,54,55,57,17,18,60,62,63,65,67,68,70,40,72,77,4,41,58,42,59,43,44,6,24,25,26,29,30,82,31,45,32,50,12,92,34,35,80,87,36,15,84,13,16,33,71,51],art:[62,15],fputc:32,btcreat:18,buildsi:51,"0x1003f9b80":16,extant:79,vinc:31,"00000001078c85b8":13,mutabl:[62,65,43],seg:[42,10,6,16,13,34,41],isfinalpool:6,see:[0,39,55,56,57,17,18,54,60,61,62,63,64,65,66,67,68,53,70,40,2,73,74,3,4,75,34,58,42,50,59,21,44,6,78,76,79,24,7,8,27,28,29,81,30,82,9,10,25,83,46,48,92,13,35,85,80,87,36,72,94,32,43,89,69,15,37,84,77,90,16,33,41,71,1,22,51,38],ierusalimschi:15,arg:[81,41,28,84,29],close:[39,30,57,59,5,54,77,74,90,53,25,51],"1003fd000":13,arm:58,analog:[32,62,29],barn:[93,51,31],"_win32":51,hess:31,expert:[30,93,11,38],misalign:[62,69],someth:[42,30,82,17,10,6,83,15,46,12,80,34,51],particip:80,weakli:[8,15,67,71,72,74],"case":[0,39,57,17,59,54,60,65,53,40,72,4,13,88,44,6,24,50,25,27,29,30,82,31,10,8,83,46,47,12,92,34,35,80,87,48,15,84,77,90,16,33,41,71,94,37,51],won:[42,17,6,11,71,12,84,37,72],mutex:43,amalgam:4,experi:[30,51,91,37,31],type_link:84,altern:[81,54,59,31,32,25,12,50,84,29,72],signatur:[6,7,41,18],mpsevent:13,chain_o:36,disadvantag:[24,70,11,37,58],numer:[69,15,8],complement:30,sole:68,isol:50,mps_ap_destroi:[84,37],res_v:[84,12],awl_pool:[79,8],incident:5,succeed:[10,34,37],stroustrup:[30,15],valuabl:93,consumpt:54,distinguish:[53,54,57,17,22,35,67,69,70,37,58],mps_ld_add:[87,25],classnam:41,"1003ff000":13,"0x000000010002b399":16,struct:[84,82,87,36,1,60,32,6,8,83,48,37,50,12,25,41,34,28,35,51],water:58,cryptic:80,last:[42,30,56,36,17,18,6,50,89,69,16,71,25,41,37,87],delimit:[82,35,33],linuxthread:[94,43],retent:71,hint:[30,57,59,77,47,12,92,36,75,37],alon:72,algol:[57,11,31,15],isomorph:70,xleroi:43,aver_and_check:51,context:[57,59,43,90,15,37,24,71,50,84,35,51],forgotten:16,oopsla97:31,mps_res_ok:[17,48,72,1,90,32,29,81,82,25,10,8,47,12,84,35,36,78,16,33,94,37],blocklimit:50,fermin:31,whole:[42,53,80,1,17,18,74,15,67,59,51,25,27,84,29],ecma:15,load:[30,17,72,58,63,15,71,65,4,13,29,52],songworm:31,simpli:[30,57,59,18,43,32,11,54,46,67,47,71,12,50,34,41,29,72],elliot:31,point:[0,39,57,17,59,54,60,62,1,65,67,53,70,40,72,74,75,13,58,42,43,44,6,78,79,24,25,27,29,81,30,82,9,10,8,46,47,12,92,34,35,85,87,36,48,32,69,15,37,84,77,90,16,33,71,52,94,22,38],instanti:[46,6,50],schedul:[0,63,36,9,31,44,32,22,8,62,90,47,59,25,13,27,29,52],hudson:[57,31],sweep:[20,36,31,18,1,58,10,57,63,15,24,71,80,61,19,27,62,38],arbitrarili:[12,37],header:[54,57,58,60,63,65,66,70,71,72,3,4,22,79,8,27,9,50,48,35,33,38,37,51,52],uniniti:[84,37],hangov:18,church:16,lar:[93,31],mistak:[84,16,12,59],gavin:[93,7,31,50],poolclassam:18,coincid:46,simpler:[0,30,37],topla:31,prot_:51,xci3ll:[4,88],stamp:[32,13],help:[30,17,54,62,1,16,33,41,13,93,28,37,29],devic:[62,11,59,74],due:[39,42,57,54,60,62,80,15,66,77,90,71,72,74,84],empti:[0,42,58,18,89,83,53,34,28,37],destructor:[30,56,57,31,54,15],mps_arena_extend:29,arenapol:[6,16],newcom:25,arenapok:83,txt:13,threaten:[70,57,31],devis:[62,70],obj_u:37,strategi:[42,57,59,31,43,46,24,71],anthoni:93,invis:[46,8],modern:[30,17,59,62,11,15,66,68,24,74,37],versa:[42,6,25,15,8],gavinm:[34,50],"0x0000000100067ca1":16,fire:[46,1],clariti:[10,34,82],imag:[30,71,72,18],ada:54,consequenti:5,unnecessarili:[71,25],gap:[46,66,35,37],fund:6,understand:[11,17,31,25],func:12,weak_array_find_depend:8,cbsdescrib:50,chatter:[0,52],vulner:[30,38],base_address:28,henriksson:31,aaron:34,strictest:53,"0x1003f9b78":16,mpscmvt:77,solid:27,typecheck:7,straight:[46,17],histor:[53,54,56,57,58,59,60,62,65,67,68,70,71,72,73,4,43,45,83,49,88,15],durat:[42,56,59,15,71,35,29],"while":[0,56,62,65,70,71,74,24,8,29,81,30,82,25,11,46,84,15,78,16,33,37,51],mps_key_extend_bi:[92,75,28,85],unifi:46,smart:[71,31,15,72],abov:[17,18,40,4,75,13,58,5,6,24,8,27,28,81,30,11,12,84,35,50,92,37,51],guido:15,fun:[18,6,83,46,7,34,51],mps_root_t:[82,37,72],loos:[53,71,58,15],loop:[54,87,57,17,18,77,90,24,25,84,37,29],pack:[58,35,37],propag:[41,17,37],malloc:[39,30,58,59,6,11,15,37,62],untag_s:25,mem_top_down:29,clinger:31,readi:[41,6,28,37,80],rip:15,willi:31,itself:[56,57,17,65,66,67,69,71,72,74,4,13,43,6,7,25,30,11,46,12,41,87,21,90,16,33],costli:[53,62,63],virtu:61,limit:[0,56,57,17,18,60,62,63,71,72,13,58,5,8,6,24,25,29,82,45,10,33,11,12,41,35,36,34,15,84,77,78,50,93,37,51],arenar:6,pedagog:[34,80],chase:[58,31],weakref:15,yuasa:31,mps_sac_fre:12,hypothesi:[53,22,65],minim:[42,18,31,68,62,15,46,70,12,41,37,51],belong:[0,39,57,59,54,40,72,74,75,77,6,79,25,27,29,81,82,9,8,92,12,22,84,35,85,87,36,33,71,94,37,38],shorten:51,x64:4,shorter:[84,37],stefanov:31,decod:[17,59,72,4,13,52],mps_res_t:[17,40,72,1,75,77,22,78,79,25,27,28,29,81,82,9,10,8,83,46,47,12,84,35,85,36,32,90,16,33,92,94,37,2],varp:37,sqlite3:4,mps_bool_t:[0,81,87,25,48,46,12,33,92,84,28,35,29],conflict:6,higher:[54,82,32,6,65,15,37],vmcreat:13,sigxcpu:94,lie:57,optim:[30,82,63,57,17,31,54,6,33,90,68,69,12,86,25,4,37,29],target_check_shallow:7,wherea:[57,62,40,68],pretenur:31,dimm:56,mps_pf_w3i6mv:88,moment:[34,83,25],arenacreatevm:13,temporari:[46,59,31],user:[0,60,68,44,32,6,62,11,15,46,65,80,8,13,41,29],bartlett:[62,71,31,15],robust:[30,56,18,11,92,28],wherev:34,transitori:50,recent:[54,82,57,17,59,61,6,63,40,74],sunpro:[4,88],lower:[48,6,70,62,29],task:[30,60,62,11,65,15,33,37],net:15,equival:[53,54,22,50,89,4,33,34,28,41],older:[53,30,55,57,88,61,62,35,24,71,72,74,37],entri:[55,87,17,18,72,6,25,11,15,65,8,93,94,38],yehudai:31,spent:[62,29],diwan:31,person:31,mps_lib_memcmp:[32,34],epdlpoolclassstruct:41,expens:[42,30,55,56,57,58,54,62,71],arenacommitlimit:6,cedar:54,johan:15,insidepol:6,spend:[0,30,57,62,11,70,29,51],poolclassawl:18,propos:[30,46,50,31,45],explan:[42,30],construct:[30,56,57,18,11,35,41,28,37,51],"000ae0397334df9f":13,buckets_scan:25,epcor:[46,50,18,21],table_:[87,37,25],obscur:[12,58],"0x00000001003fb148":16,insid:[81,36,17,31,22,65,16,33,94,35,18],relianc:48,shape:57,mysql:5,love:38,fflush:32,mps_key_arena_cl_bas:[],simm:56,stoutamir:93,isfwd:[35,25],cup:29,scenario:[41,84],restructuredtext:[18,21,6,43,83,46,7,80,50,26,3,51],theoret:[30,57],failnextmethod:41,eager:[59,50],mps_message_type_gc_start:[0,62,36],"0x10012a000":16,appli:[42,82,17,5,62,65,67,46,71,12,80,84,37,51],snap:[26,70,71],input:[53,59,10,48,90,71,25,13,29],unlik:[57,17,15,71,37,85],subsequ:[54,56,57,30,50,29],btresrang:18,useless:13,indentifi:70,subroutin:57,xcodebuild:4,march:31,obsolet:[37,88,35,25],format:[39,54,55,57,17,59,60,63,65,70,71,2,74,4,75,13,58,42,20,77,22,49,79,1,25,27,28,29,30,82,9,10,8,86,46,34,35,85,80,72,15,84,16,33,92,52,37,38],big:[42,58,44,11,71,29,85],single_act:18,mps_class_ams_debug:[27,28,1],"0x1003f9bb8":16,alias:[41,17],mps_arena_reserv:29,cierniak:31,insert:[46,84,50,52,74],bit:[39,54,56,57,17,18,60,62,63,65,67,70,72,73,74,4,13,58,42,20,59,88,6,24,50,8,82,31,45,25,46,34,35,80,87,33,37,51],characterist:[67,54,77],formal:15,xcodeproj:4,lost:[46,84,18,15],semi:[54,57,58,31,30,62,70,59,71,50],rossum:15,signal:[16,71,1,13,94,35,52],resolv:[30,34,70],manifest:16,heart:[54,57,58,80,71,72,33,26],collect:[0,39,55,56,57,17,59,54,60,61,62,83,65,67,53,70,40,72,74,75,34,58,42,20,88,44,6,23,79,24,25,26,27,29,30,82,9,31,45,10,8,11,93,47,92,13,35,85,86,87,36,32,69,15,37,84,77,90,16,71,52,94,22,38],princip:[15,50],pithi:80,popular:[15,74],eec:31,mps_pool_class_epdl_debug:46,setrang:18,mps_gen_param_:[36,37],often:[53,54,56,57,58,18,61,62,63,64,65,67,68,70,71,72,74,59,6,24,80,30,10,11,89,15,16,33,37],comparegreat:34,spring:71,creation:[63,57,17,59,50,83,46,90,40,25,13,37,29,58],some:[0,39,55,56,57,17,18,54,60,62,63,65,66,67,68,53,70,71,72,74,4,13,58,42,59,43,6,78,24,25,28,29,81,30,82,31,45,10,50,11,46,47,12,34,35,80,87,36,48,32,89,69,15,84,90,16,33,41,94,37,38],back:[77,87,74,58,59,21,60,83,62,25,11,68,46,45,50,71,72,33,34,84,29],understood:72,strongest:72,unspecifi:[72,18],sampl:[32,46],"0x1003faf30":16,instal:[30,4,13,86],scienc:[11,31],sizeof:[84,50,80,87,36,58,18,88,8,33,48,78,16,12,25,41,92,34,37],surpris:30,obj_fwd:[35,37],teco:15,scale:[30,62,15,67,71,34],laru:31,predefinit:51,prot:[6,51],mps_awl_find_dependent_t:8,per:[17,31,32,62,11,15,50,13,94,84,18],block_on_client_with_timeout:29,substitut:[7,5,33],mathemat:[67,18],larg:[53,54,55,56,17,18,62,63,65,66,67,70,71,72,74,58,59,44,6,24,8,30,9,31,11,46,47,12,34,35,89,15,77,50,92],undon:83,leftmost:[59,18],prod:51,reproduc:[30,16,5,54],worst:[53,54,31,59,89,67,90,8,92],mps_message_discard:[0,90,36,25],link_t:84,machin:[56,58,59,62,63,65,67,70,71,72,74,13,88,30,82,31,10,11,84,34,15,51],optarg:46,mps_var_:51,run:[0,39,56,17,18,54,60,62,63,65,66,70,71,72,4,13,58,42,59,5,44,6,24,25,29,30,31,10,8,11,34,35,86,87,15,84,90,16,33,41,94,37,51,52],mps_fmt_t:[9,79,10,22,37,46,2,8,27,28,35],epdrpoolclassstruct:41,nmake:[4,51],pietro:31,step:[39,17,18,33,70,84,46,24,16,25,27,37],convent:[20,55,56,57,18,30,60,65,70,48,74,41,51,52],mps_ap:16,squeez:66,santa:31,not_condemn:[0,16,25],mps_pool_walk:46,from:[0,39,55,56,57,17,18,54,60,61,62,63,65,67,68,53,70,40,72,74,3,4,75,34,58,42,50,59,5,21,44,22,78,79,24,7,8,26,27,88,29,81,30,82,9,31,10,25,11,46,47,12,92,13,35,85,80,87,48,1,32,43,89,69,15,37,84,77,90,83,33,41,71,94,6,51,38],subtract:[0,30,17,59,71,33,35],impos:[90,56,40,18],mps_class_mvff_debug:[92,28,1],proven:[54,69],constraint:[90,56,36,59,45,61,6,11,69,24,70,12,25,35,29],coexist:74,proce:[39,42,87,17,10,65,70,33,92,29],preclud:38,prove:[53,59,60,90,69,70,80,37],lieberman:[55,31],vmalloc:31,idl:[36,29,52],mean_siz:77,candi:51,alfr:31,slot_high:92,abstractarenaclass:6,"r\u00f6jemo":31,uncach:6,cutoff:47,frob:51,real:[42,30,31,62,83,15,68,24,71,12,65,74,34,72],colorado:31,primarili:[41,6,63,17,80],mps_ap_create_v:84,digraph:55,intl:31,within:[39,54,56,57,17,18,62,70,71,72,74,24,7,29,81,30,82,10,50,46,34,35,33,37,51,38],programat:35,toft:[31,15,72],myseg:41,rankweak:34,mps_message_clock:0,obj_:37,contributor:5,lesson:44,fopen:32,mps_key_rank:[79,25,28,8],trampolin:94,occupi:[42,18,62,65,69,16,72,29],inclus:[77,37],span:[39,54],carnegi:31,mythic:59,fledg:7,megabyt:[53,62,70,37,58],"0xfdfdfdfd":46,fast:[39,30,56,36,17,31,77,50,89,84,59,71,33,41,57,13,63,37,18,58],custom:[82,50,31,15,25],adjac:[54,56,57,58,30,89,12,73,50],reserve_depth:77,arithmet:34,includ:[39,53,55,56,57,58,18,54,72,61,62,65,67,68,70,71,2,4,75,34,59,5,88,77,6,79,24,7,32,25,27,28,29,30,9,31,10,8,11,46,48,13,35,85,80,87,89,15,37,16,50,41,92,22,51,38],suit:[72,15],forward:[84,54,86,57,9,18,79,60,22,8,65,37,46,71,2,74,41,27,35,58],nepot:61,superpag:[71,66],busytrac:6,cbss:50,tape:58,properli:[32,46,71,12,13,29],obj_unus:25,repeatedli:[54,77,63,46,71,29],subgraph:71,subsidiari:[46,50],mpscmf:85,teach:15,decomposit:18,navig:11,dgc:56,link:[54,56,57,67,70,71,72,74,19,4,84,20,21,25,30,31,8,11,13,15,78,3,50,38,51,52],translat:[17,31,45,6,70,65,68,46,59,74,62],atom:[42,30,59,31,43,6,63,41,94,84],cbsblock:50,line:[42,50,17,25,15,84,46,16,80,8,4,13,51],mitig:30,mminfo:[18,21,6,43,83,46,7,80,50,26,3,51],ismm:31,sdk:4,info:42,concaten:21,consist:[53,56,57,17,18,62,1,73,74,34,42,21,24,88,29,81,82,10,46,41,35,86,43,84,16,50,37,51],confusingli:[72,15],pool_debug_opt:[28,1],caller:[60,83,65,80,37,51],pkg_add:4,adequ:29,reorder:84,unlock:41,mps_roots_stepper_t:82,highlight:[84,31,25],mps_defin:[90,83,25],btsize:18,similar:[53,54,55,56,57,58,59,62,63,65,66,67,68,69,70,71,72,74,34,5,77,6,25,29,82,32,83,41,15,84,37],mps_fmt_destroi:[35,37],impl:[18,21,6,43,46,7,80,50,41,34,51],w3i3mv:[4,34,88],caught:94,event_label:13,obviat:46,mps_end:46,doesn:[42,30,87,57,17,18,44,6,25,62,84,24,71,12,8,41,34,22,29,38],repres:[84,54,55,57,58,18,63,48,66,68,69,70,71,72,74,34,59,6,25,28,30,82,31,33,46,13,35,87,90,50,37],poolasm:80,proper:30,incomplet:[21,60,32,43,83,48,46,7,26,3,34],septemb:[46,31],dconfig_var_df:51,aggrav:30,flexowrit:13,getthreadcontext:39,singli:50,phantom:[67,71,72,15,74],oberon:15,pronounc:56,sequenti:[54,58,31,77,62,65,70,71],sheetal:31,invalid:[0,42,82,81,58,10,6,74,65,67,50,40,72,25,71,34,84,29],setsparecommitlimit:6,appendic:20,"000ae03973361d5a":13,priori:[77,37,72],gonthier:[31,74],librari:[39,17,62,48,71,74,3,4,58,20,21,35,30,31,45,32,13,49,86,15,16,51],buckets_t:25,retract:6,mps_scan_end:[82,17,8,33,37,78,25,35],nice:46,btdestroi:18,draw:[55,71],llvm:[39,88],users:13,gigabyt:[53,70,58],event_al:51,benchmark:44,caml:15,mps_rm_prot:[82,74],w3i3m9:88,william:31,elsewher:[34,87,35,17,21],meaning:[6,7,13],wrongli:1,eval:[90,16,25],unwind:83,dram:[56,71],alloc_pattern:47,param:51,deserv:46,lang:[15,67,71,72,74,41],pmo:31,infrequ:[24,63,72],algorithm:[53,30,36,18,31,89,62,70,15,66,67,24,59,71,65,92,57,72],vice:[42,6,25,15,8],ams_is_invalid_colour:10,bibliographi:[20,11,31,30],bateman:93,discrimin:[34,70],depth:[77,63,37,31],appendix:[13,90],unconnect:66,mps_pool_mvff:[],leak:[0,30,31,62,63,11,15,53,71,12],mps_arena_unsafe_expose_remember_protect:29,fresh:80,leah:93,oop:[16,31],unclamp:[69,57,29,74],io_o:32,code:[84,54,56,57,17,18,60,62,63,65,68,40,72,74,4,13,58,42,59,5,43,6,49,25,29,81,30,82,9,45,10,50,11,46,47,12,34,35,80,36,48,1,88,89,15,90,33,41,71,52,94,37,51,38],partial:[30,57,18,59,77,71,41,84],edg:[53,61,55,70,71],mps_arch_al:88,scratch:[24,84],cbsfinddeletenon:50,fclose:[32,25],recomput:29,pthread_mutex_lock:43,mps_prod_str:21,mps_fmt_fencepost_wrap:46,attrbuf_reserv:34,mps_arena_spare_commit_limit_set:[6,71,29],holdout:30,searchbas:18,mps_builder_:51,cbsinsertisolatedrang:50,compact:[42,56,57,58,31,62,63,15,66,69,71,72],root_scan:82,privat:[6,71,84,48,25],procur:5,pthread:43,secur:[62,15,74],quarterli:31,tracecondemn:80,migh:46,young:[53,22,57,55],send:[67,91,94],mps_arena_step:[36,29],granular:[6,29,66],carefulli:[30,61,83,70,74,51],tricolour:[67,70,71],mps_arena_park:[22,29,74],becam:[90,59],visitor:[68,71],noop:51,fatal:13,sent:[10,13],isresetrang:18,pekka:[42,31,6,83,46,80,34,93],random:[54,16,71,72],mainstream:54,btreturn:18,peyton:31,amcss:[4,34],electron:[62,11,31],untouch:[10,34,18],implicitli:[41,63,62],popl:31,relev:[53,54,55,56,57,58,18,62,63,65,66,67,68,70,71,72,74,59,82,11,37,51],weak_array_scan:8,tri:[42,53,57,17,10,62,50,65,66,67,46,69,70,71,12,8,34,58],mps_ld_t:[87,25],mps_ld_isstal:[63,87,25],salad:71,question:[39,20,57,5,30,10,15,23,46,91,4,37,29,38],complic:[72,46,51,18,74],joel:31,scalabl:[42,41,71,31],michael:31,fewer:[30,11,18],mps_io_creat:32,"try":[39,30,82,17,43,42,46,24,71,51,8,13,37,29],poolclasslo:18,race:[10,41,84],attrgc:34,freed:[30,56,57,58,59,54,77,6,63,11,24,71,12,74,84,37,62],rdoss:31,pleas:[39,5,10,11,48,91,16,4,94,84],app:4,impli:[30,5,54,60,6,15,71,13,51],smaller:[57,58,1,63,89,46,71,74,92,34,38],fortun:[42,68,24,31],readabl:[13,52],weslei:31,"0x3":82,natur:[42,56,58,59,88,77,10,85,15,46,12,73,8,61,92,34,75,38],inconsist:[94,65],memset:[32,34,16],elisp:15,mps_build_eg:88,crop:15,jump:80,fold:46,compareequ:34,mps_key_arena_cl_addr:[28,29],s7ppac:88,"0x1003f9be8":16,download:[4,37],hyper:53,spaghetti:[71,57,51],rivera:31,append:16,mps_ss_:48,compat:[34,73,41,5],index:[20,87,17,18,54,15,67,71,65,74,34,58],lockclaimglobalrecurs:43,compar:[30,57,18,31,32,6,15,66,24,72,50,34,58],"0x1003f9c08":16,resembl:[56,57,58,15,1],"1003fc000":13,han:[93,31],"00000001003ff000":13,mpmst:80,experiment:[18,15,88],tom:93,mps_rank_weak:[82,8,67,78,72,25],mps_clock:[0,32,48],cele:15,mps_key_extend_s:75,deduc:42,whatev:[57,17,32,46,29,51],penalti:72,ramsei:31,led:18,chose:70,boolcheck:34,inlinedescriptors:50,"__assert_rtn":16,mps_args_non:[84,28,37,25],mps_message_type_gc:[0,62,36],closur:[57,31,59,80,15,66,50,51],waldemar:15,let:[60,10,16,37,46],ubuntu:39,tenur:[30,70,31,74],"0x0000000100003ea6":16,becom:[0,54,56,57,17,62,65,53,69,71,72,74,24,25,29,81,30,82,11,12,84,15,90,50,93,37],sinc:[39,53,56,17,18,54,60,62,67,40,34,58,42,6,24,25,29,30,82,32,41,35,85,87,36,89,15,84,16,71,94,37],mps_arena_commit_limit:29,attralloc:[10,34],convert:[50,18,21,32,6,43,83,46,7,80,33,26,3,13,34,51],survei:[11,31],convers:[46,6,48,15],survivor:[22,36],artifici:31,hilfing:31,conceiv:51,larger:[54,56,57,17,18,61,63,70,71,72,58,44,29,30,11,12,35,87,36,89,15,77,50,37],technolog:[30,57,31,68],oldsiz:50,later:[0,30,87,36,17,74,11,39,24,71,25,57,29],resurrect:[84,90,72],epdl:41,epdldbg:41,bufferdestroi:80,initialz:41,earli:[30,17,31,62,65,59,71,15,18],chang:[53,56,57,17,18,62,63,65,67,70,71,74,4,13,42,21,6,24,25,26,29,81,82,31,45,83,80,11,46,48,34,87,36,89,50,37,51,38],perform_client_act:29,chanc:[46,94],"0x00000001000014e3":16,marc:31,undergradu:15,calibr:32,mpsclo:9,kurtz:15,clark:[60,31],danger:[10,41,89],mps_lib_fputc:32,approxim:[42,30,82,56,36,59,54,6,63,53,72,34],aquir:93,foundat:42,sqlite:[4,13,52],apt:4,"0x0000000100008ca2":16,"boolean":[41,6,34,48,50],immut:[68,62,65,15,25],validli:[84,78,90,35],greg:31,microcod:15,tailor:31,fee:5,metaphor:46,zip:4,commun:[0,56,57,31,62,15,67,46,24,65,50,26,35,72],doubl:[53,56,36,17,31,69,59,12,74,34,29,58],coordin:[46,62],next:[39,54,57,17,18,61,68,53,71,84,42,77,6,25,29,50,11,47,12,41,35,86,36,89,16,33,37],few:[39,30,57,17,18,60,89,63,11,15,48,70,53,16,12,25,29,58],dconfig_plinth_non:[32,4],busi:[6,83,15,5,8],usr:4,protic:31,lesli:31,jonathan:31,postpost:1,remaind:[54,89],sort:[0,30,55,87,58,34,62,42,71,72,3,13,35,51],mps_ap_create_k:[79,84,25,37,8],clever:46,tag_data:46,fillmutators:6,mps_fmt_create_:35,pfm:51,mps_fix12:[48,33,35,37,8],classes_count:12,cbsfinddeletehigh:50,mps_key_arena_s:[28,37,29],mps_pf_xci3ll:88,rusage_self:32,structu:1,goal:91,interven:[47,12],mps_pf_:[51,88],account:[42,6,57,24,25],hoard:31,retriev:[0,36,18,83,68,90,71,29],augment:60,cannarozzi:31,alia:[84,82,87,60,10,48,70,72,32,34,41],annot:[51,17,15],larch:31,plinth:[0,20,34,32,48,49,74,4,13],obvious:[46,41],meet:[6,51,35,18,50],cbsblockbas:50,tracescanseg:16,fetch:[30,57,17,74],aliv:[61,30,63,9,59,79,8,10,33,78,65,67,44,90,71,72,25,37],proof:10,control:[39,54,55,56,57,17,18,62,65,70,71,72,34,42,59,6,24,7,29,81,30,82,31,45,32,11,46,48,13,85,15,84,16,50,94,37,51,38],config_var_hot:[10,51,66],weaker:74,bitmap:[57,58,65,70,71,13],process:[53,56,57,17,59,62,65,66,67,68,70,71,72,74,4,76,58,42,21,44,24,25,29,30,31,10,8,13,89,15,90,33,37],lock:[39,20,63,43,10,6,45,35,84,90,87,41,34,94,37],loci:42,"0x00000001003f9ae0":16,trap:[74,31,62,80,50,84],high:[30,56,36,18,31,62,50,70,15,59,71,65,33,92,13,58],protix:16,tag:[57,17,59,60,48,67,69,70,71,72,74,58,7,8,30,82,25,46,65,84,35,15,16,33,37,51,52],fprintf:[32,16,37,33],mps_arena_commit_limit_set:[10,57,29],"002d":13,mps_mv_free_siz:75,onlin:51,subsystem:31,giusepp:[93,31],everywher:[37,58],kib:17,"0x7fff5fbff0a0":16,minlength:18,link_:84,six:[92,4,72,31,88],smoothli:[36,37],"0x10012a5a0":16,georg:31,acycl:7,sig:[41,7,31],mps_thread_dereg:[82,94,37],fence_s:1,fencealloc:46,mps_pf_xci3gc:88,l979:31,circular:[61,70,31],prottramp:16,delai:[77,90,16,31],"_addr":[37,33],overridden:[6,41,51],"1078c85b8":13,interchang:[55,72],watch:62,bufferfinish:80,gcc:[39,18,88,16,4,37,51],inst:41,attent:30,attenu:50,faq:[30,15],btfindlong:18,physic:[30,59,68,44,61,62,65,60,69,70,71,72,74],mps_arena_releas:[69,16,29],alloc:[39,53,55,56,57,17,18,54,60,61,62,63,65,66,67,70,40,2,74,75,34,58,42,20,59,43,44,6,78,23,79,24,50,8,27,28,29,81,30,82,9,31,10,25,11,86,46,47,12,92,13,35,85,80,36,48,72,94,89,15,37,84,77,90,16,83,33,41,71,52,1,22,38],drop:[67,24,76],essenti:[0,60,15,71,74,37],mps_fix:[35,33],seriou:[39,30,72],init:[6,50,46,80,84,41],chapman:31,element:[57,6,63,70,16,71,12,50,28,37],issu:[58,59,62,11,90,71,3,94,18,52],chief:[93,29],stavro:[93,58],unaccept:[30,71,65],allow:[0,53,56,57,17,18,54,62,66,69,70,13,72,1,4,34,58,42,59,21,6,24,50,25,26,27,29,30,82,10,8,46,12,41,35,80,15,84,78,91,33,71,37,51],oslo:[0,15],fallback:50,longest:34,mps_tag_a_:46,elif:51,neglect:[0,10,15],poor:[30,36,61,62,11,24,74,37],larson:31,ouput:29,berger:31,train:31,move:[39,54,55,56,57,17,18,61,62,63,65,66,70,71,72,74,75,84,58,42,77,6,79,24,8,26,27,29,9,45,25,12,22,34,35,85,80,87,15,90,33,92,37,38],microsystem:15,meter:51,mps_root_creat:[82,57,37,74],notabl:[42,34,56,59],uniprocessor:31,jni:74,mps_message_gc_live_s:36,perfect:[36,58,74],pai:[30,17],famili:[88,51,15,58],movabl:[38,74],"0x1003fa7d0":[13,16],chosen:[42,17,61,89,69,24,71,37,29],concept:[17,31],mps_os_so:88,culprit:10,whether:[0,53,57,17,18,54,60,63,65,72,74,34,42,5,88,6,24,25,26,29,30,82,50,83,46,41,35,80,87,84,33,92,37,38],mps_addr_t:[84,17,59,48,70,72,34,22,78,25,28,29,81,82,8,83,46,12,13,35,87,90,16,33,37],mps_os_su:[51,88],mps_class_lo:[28,9],therefor:[54,82,57,59,77,50,90,35,24,70,71,72,33,34,66,37,29],symbol_:[84,37,25],trace_max:[6,34],uninitialis:74,cbsfinddelet:50,junction:61,fourth:37,handl:[0,55,17,62,48,66,67,40,72,74,84,42,43,78,79,8,82,32,25,11,46,12,34,35,15,90,16,33,71,94,51,52],auto:[9,22,8,79,33,27,35,38],overal:[44,37,17,18,21],innermost:47,handi:[67,71,74],mention:15,mps_root_create_reg:[84,82,70,94,37],snake:74,arenafre:6,instead:[84,56,57,17,18,63,48,67,70,13,72,75,41,42,6,24,7,25,27,29,81,30,9,10,8,83,46,12,34,32,15,16,33,71],front:[54,63,36,29],arenadestroi:83,scatter:[24,55,31],mps_alloc_dbg:46,mps_arena_clamp:[57,29],type_pair:[13,16,37,33],somewher:[30,82],config_plinth_non:32,anyth:[39,30,82,17,54,42,46,24,33,4,37,51],edit:[6,21],iglio:31,tran:6,myunnoteseg:41,dominiqu:31,arenawrit:83,februari:42,mode:[0,53,82,57,77,50,15,46,16,72,74,34,37,52],mnemon:[34,63,71],obtain:[0,57,5,10,62,89,15,68,71,34,29],stock:[31,15],walgenbach:31,cbsfinddeleteentir:50,whiten:80,subset:[42,82,18,77,80,71,72,50,37],societi:31,"__gc":15,accessnon:34,map:[30,63,57,58,18,54,60,32,6,74,68,46,69,59,71,51,25,62,29,72],arenaringinit:6,chunk:29,artur:31,mps_os_fr:88,remap:74,predic:[68,41,62],consum:[0,65,40,29,51,72],"static":[0,39,56,57,17,59,66,70,71,72,34,43,6,25,30,82,31,45,46,41,87,15,16,33,37],attrfre:34,fluctuat:[77,12],our:[6,11,48,25,34,13,38],mps_res_commit_limit:[10,12],mps_arena_collect:[22,16,29,74],mps_fmt_isfwd_t:[35,65,37],special:[39,54,55,57,58,59,60,63,48,40,72,74,13,5,6,79,8,30,45,10,50,11,41,34,89,15,90,83,33,71,37],out:[39,54,56,57,17,18,60,61,62,63,65,66,68,70,40,80,74,13,42,59,5,6,50,8,26,29,30,10,25,11,46,12,34,35,87,36,48,1,15,84,90,16,33,71,37],variabl:[84,56,57,17,59,60,62,63,48,71,72,1,19,75,13,20,43,77,22,79,24,25,27,29,81,30,82,9,31,32,8,11,46,41,80,15,50,92,52,37,38],eqv:[0,90,16,25],nick:[93,51,31],"th\u00e9se":31,contigu:[54,17,18,60,6,63,65,46,71,50,62,58],bag:58,influenc:[57,15],req:[18,6,83,46,50,41,51],facto:79,bobrow:[56,31,15],categori:[72,13,34,52],pooldescrib:80,mps_key_mfs_unit_s:[28,85],suitabl:[39,54,58,18,62,63,65,59,5,43,8,27,30,82,32,12,13,35,89,50,37,38],sever:[54,56,57,17,18,61,63,71,74,84,42,44,6,29,30,50,11,46,41,1,89,15,77,33,92,37,51],hardwar:[42,55,56,57,58,31,45,62,11,15,23,70,24,59,71,65,74,35,29],iam4cc:88,ref:[42,82,74,18,43,33,83,78,65,37,67,90,71,72,25,26,13,34],old_symtab:37,ree:[18,21,6,43,83,46,7,80,50,26,3,51],franc:31,fmt_o:35,parenthesi:48,fmt_a:35,frank:31,manipul:[30,18,6,63,15,67,7,71,50,94,35],powerpc:[4,65,88],edeadlk:43,"0x1003f9bd8":16,york:31,tempt:[87,48,33],releas:[30,82,36,21,10,6,43,90,48,54,1,80,25,4,94,29],mps_fmt_create_a:[37,35,25],mps_mortal:36,queri:[13,62],afterward:[82,33,29,25],refset:[42,6,34],reslimit:34,"000ae03973336e3c":13,walker:[46,80],intrus:31,tru64:[4,88],unwant:15,could:[55,18,60,62,83,66,70,13,72,4,41,42,24,27,29,82,10,50,11,46,34,87,15,33,37,51],lexer:37,ask:[42,20,37,57,30,83,15,23,12,81,35,29,38],segreg:[54,55,58,63,71,2,75,20,77,22,79,25,27,81,9,8,12,85,86,33,92,38,37,52],timer:13,david:[18,31,43,21,83,80,3,93],counterpart:[84,1],length:[0,87,36,18,8,37,84,16,25,41,13,33,34],enforc:94,wrote:[10,32],outsid:[42,30,55,60,46,38],mortal:[53,36,31,44,22,15,65,27,37],retain:[30,56,57,5,77,11,65,71,50],"universit\u00e9":31,scarc:[54,90],austin:31,softwar:[42,20,56,57,31,5,21,30,45,15,3,29,58],isbn:31,suffix:51,christoph:31,mps_class_amcz:[28,2,25],qualiti:32,port_clos:25,echo:13,date:[42,24,45,37,21],haskel:[11,31],lib:[4,51],facil:[42,43,32,6,46,50,41],redund:74,suffic:25,ecoop:31,prioriti:50,avert:41,supposedli:59,dump:46,strict:[53,57,58,5,71,72,50,41],unknown:[0,10,67,77,39],licens:[39,20,4,5],perfectli:30,system:[39,53,56,57,17,59,54,60,62,63,64,65,66,67,68,70,71,72,74,3,4,41,58,42,20,5,43,44,6,23,24,50,91,8,29,81,30,82,9,31,45,10,25,11,12,13,35,86,48,32,88,89,15,84,90,16,33,94,37,51],messag:[0,20,36,59,30,32,62,83,90,15,54,67,91,25,13,81,84,41,29,52],size_io:46,mps_message_type_t:[0,62,36,90,25],attach:[0,58,6,46,70,12,84,37,62,72],attack:62,poolcheck:7,btcopyinvertrang:18,termin:[54,59,18,10,32,50,70,33,13,84],"final":[0,39,17,54,67,70,72,74,75,42,20,77,6,78,79,25,26,27,28,30,9,31,45,8,83,22,34,85,86,15,90,92,38,37,52],poolreclaim:80,prone:30,configura:83,shell:13,ferrit:57,deregist:[82,83,90,94,37,29,38],"__del__":15,obj_quot:37,juli:[46,31],shallow:7,accompani:[51,5],lockreleaseglob:43,enqueu:[67,71,72,74],diminish:44,exactli:[53,56,57,18,60,8,11,48,46,50,74,34,63,41,51,38],steel:[42,58,31],ben:31,holland:31,cpython:15,bloat:30,tr94:31,couldn:[82,36,35,46,25,37],mps_io_:32,roberto:15,emac:[0,10,53,15],structur:[39,53,56,57,17,18,54,60,62,1,64,65,66,70,71,72,74,41,58,42,20,59,21,6,24,7,8,28,29,81,30,31,45,10,25,11,46,47,12,50,34,35,85,80,87,36,48,32,43,15,84,16,33,94,37,51],epdrinit:41,claim:[43,10,6,70,41,94],mps_res_resourc:[10,12,29],sens:[54,57,58,63,68,71,25,37,38],mps_arena_commit:[62,29],light:30,dubiou:[69,18],exp:16,spaceaccess:80,stdio:30,bet:46,busili:24,exhibit:[63,58],counter:13,"0x00007fff91aeed46":[13,16],freefre:1,mps_root_destroi:[82,37],linker:[71,51],deprec:[81,82,9,18,77,22,33,48,84,79,90,40,2,8,92,13,75,94,27,29,85],mps_pf_align:[85,88,77,61,6,8,75,51,38],correspond:[53,54,17,18,62,70,40,72,58,43,6,78,79,8,28,29,82,25,83,47,34,35,80,88,90,50,94,22,51],arenaaccess:6,corrupt:[30,56,59,10,46,16,1,13],scientif:15,usenix:31,have:[0,39,55,56,57,17,18,54,60,61,62,63,65,67,68,53,70,40,72,74,4,75,34,58,42,50,59,21,77,6,78,76,79,24,7,91,8,27,28,88,29,81,30,82,9,10,25,11,46,47,12,92,13,35,85,80,87,36,48,1,32,43,89,69,15,37,84,90,16,83,33,41,71,93,94,22,51,38],ari:31,need:[0,39,55,56,57,17,18,54,60,61,63,65,66,67,53,40,2,74,4,34,58,42,59,43,22,78,79,24,8,27,29,30,82,9,10,25,11,46,12,92,13,35,80,87,36,48,72,32,15,37,84,90,16,83,33,41,71,94,6,38],wakel:31,finalpool:6,serrano:31,tidi:[0,86,37,51],flip_mask:13,optimis:17,runciman:31,lazili:[83,57],sdram:[56,71],depict:55,mpscamc:[22,2,48,37],min:[6,51,50],findlongresrang:18,"0x1003cbe38":16,accuraci:[67,34],mix:41,unawar:74,discret:[35,80],"0x7fff5fbff7d0":16,which:[0,53,55,56,57,17,18,54,60,61,62,63,65,66,67,68,70,40,72,74,4,34,58,42,59,5,21,77,6,78,76,24,7,25,26,28,88,29,81,30,82,31,10,50,11,46,47,12,13,35,85,80,87,36,48,32,43,89,15,84,90,16,83,33,41,71,94,37,51,38],mps_message_type_fin:[0,54,62,90,25],mip:[4,88],addison:31,type_charact:25,singl:[39,53,56,57,17,18,54,60,62,63,71,72,42,59,43,44,6,24,8,27,28,45,46,41,89,15,16,50,94,37,51],uppercas:48,btisresrang:18,radioact:31,unless:[53,59,48,74,75,13,77,22,24,8,27,30,9,25,50,11,46,84,85,33,92,37],freebsd:[39,4,94,51,88],clash:[41,48],deploy:[39,10,13],transmit:32,jun:[13,16],lockfinish:43,who:[0,10,15,30],discov:[57,44,10,70,46,78,16,25,37,29],mpslib:[32,4],arenacr:6,rankambig:[26,34],awl:[20,56,18,8,67,78,25,19,38],eight:[67,51],intern_str:25,deploi:39,bjarn:[30,15],nostop:16,judici:30,"class":[39,53,56,57,17,18,54,72,1,65,67,68,40,2,74,19,4,75,13,58,20,59,77,22,78,49,79,8,27,28,29,81,30,82,9,45,10,25,83,86,46,12,92,34,35,85,80,48,15,37,84,90,33,41,71,52,94,6,38],morrisett:31,make_port:25,lee:31,placement:[6,59,31,18,74],weiser:[53,30,57,31,15],dens:18,instig:0,gather:[53,71,58],request:[39,54,57,58,18,62,65,66,67,53,71,74,75,84,42,59,21,6,91,25,29,81,10,80,11,46,12,34,85,89,15,16,50,92,37,38],face:[71,62,11,59],inde:[41,6,35,62,33],deni:80,snapshot:[67,71,65],determin:[0,53,56,57,17,59,54,63,65,66,67,68,69,70,71,72,74,3,84,42,21,6,78,24,8,26,29,81,30,82,25,50,46,34,35,80,87,15,90,33,37,38],xavier:31,constrain:[46,34,50],stichnoth:31,fact:[53,54,55,17,18,62,63,48,70,72,34,78,29,82,11,12,41,87,15,90,16,33,37],"000000010992f000":13,arenacheck:6,guei:31,gen_count:36,assert:[0,80,16,57,17,18,1,72,10,32,33,66,7,59,25,13,37,51,52],text:[58,59,45,15,71,80,13],verbos:13,"0x100002130":16,minski:[31,15],poolaccess:80,connect:[53,55,57,60,32,22,11,90,24,72],bring:[29,18],"0x000000010000447d":16,empir:31,totalreturn:16,parentclassnam:41,topmost:[71,36],trivial:[6,84,50],anywai:[41,43,87,25],duck:15,wors:[54,89],insertisolatedrang:50,textual:[80,50],locat:[0,54,55,57,58,18,60,62,63,65,67,40,72,74,34,20,59,43,77,6,24,50,8,29,81,82,45,10,25,11,46,12,41,35,86,87,36,48,32,89,84,90,83,33,71,52,94,37,38],materi:[30,5],"0x00000001003f9a80":16,print:[0,50,15,37,90,16,80,25,13,34,29],youngest:53,correl:77,rash:[57,59,10,66,68,72,51],should:[0,54,17,18,62,65,67,70,72,1,4,75,13,42,44,6,79,7,25,26,27,29,81,30,82,31,10,8,46,47,12,34,35,80,87,36,48,32,84,77,90,16,50,41,37,51,38],mps_ld_merg:87,held:[6,50,12,43],smallest:[53,57,58,89,71,12,50,34],suppos:[26,82,12,18],preturn:80,mps_capac:36,"0x00007fff90509df0":16,various:22,"0x1003fad48":16,local:[54,56,57,17,59,61,62,63,65,68,70,71,72,4,84,58,43,24,7,30,82,31,32,11,48,41,35,89,33,37,51],hope:[82,51],mps_ap_alloc_pattern_begin:[47,72],meant:[54,71],count:[53,54,56,18,60,61,62,63,67,71,72,76,59,43,77,23,24,25,28,29,30,82,31,46,34,15],protstruct:51,changeov:17,mps_fmt_pad_t:[37,35,74],contribut:[42,93],mps_block_siz:12,lii4gc:88,findfirstbefor:50,tract_of_addr:6,make_str:[16,25],mergerang:50,memcpi:[32,34,16,84],bear:44,joint:31,theori:[62,59,58,5],lockinit:43,lockix:10,mps_class_mvt:[77,28],cbsblockdescrib:50,increas:[53,30,57,54,60,10,51,83,67,47,12,13,89,29,72],debugpoolcheckmethod:41,cbsgl:50,thomson:93,obj_fmt:[37,35,25],dirti:[56,57],extract:21,enabl:[0,10,32,8,90,71,25,41,13,37],organ:30,whilst:80,underscan:[27,16,86],caudil:31,stanford:31,symtab:[82,37,25],mpscam:27,grai:[53,57,58,60,65,67,70,71],stuff:51,mps_sac_destroi:12,integr:[39,42,59,88,10,62,15,37,48,46,51,25,34,27,29],partit:[61,6,72,31,45],contain:[84,54,55,57,17,18,72,62,1,65,67,70,71,2,74,4,75,13,58,42,59,5,21,77,22,78,79,24,50,8,27,28,29,30,82,9,25,11,46,48,34,35,85,80,87,36,43,37,90,16,33,41,92,6,51,38],grab:92,btfindlonghigh:18,btfindlongresrangehigh:18,view:[39,42,58,59,43,6,65,54,46],mvff:[20,62,1,92,50,19,75,38],conform:[57,18,32,48,41,51],legaci:4,modulo:87,inexplic:59,bucket:[53,87,57,58,59,74,25,37],frame:[54,56,57,59,65,40,74,75,20,77,22,79,8,27,82,9,92,13,85,16,71,38,52],knowledg:[77,89,11,71,50,41,37],bty:18,btx:18,flip:[42,54,58,45,6,84,70,34,94,13,29],veljko:31,temporarili:47,now:[0,30,57,17,18,54,62,25,83,15,84,80,74,13,81,28,37],stack:[39,55,56,57,17,59,65,66,70,40,72,74,19,20,77,22,79,24,8,27,28,30,82,9,31,11,47,92,84,85,15,90,16,71,94,37],modulu:18,mps_add_fencepost:46,wirf:31,polymorph:[34,41],statu:[30,50,88,8],error:[84,54,56,17,59,60,62,1,65,69,71,72,74,13,58,20,22,8,27,29,81,30,82,25,10,33,83,47,12,34,35,80,87,36,48,32,16,50,37,51,52],correctli:[87,59,33,65,80,84,41],reform:51,mps_os_xc:88,boundari:[57,18,31,63,65,59,71,92],segment:[53,17,18,62,63,65,67,71,72,74,75,34,58,42,59,6,80,46,41,85,13,92],below:[39,57,18,33,80,4,13,43,44,6,24,25,29,30,82,10,8,11,46,41,36,88,89,84,90,16,50,37,51],mps_ap_:[84,48],tend:[58,18,11,67,33,17],favor:30,state:[0,56,57,17,59,62,65,69,71,72,74,34,42,43,6,80,29,81,82,32,50,46,48,22,41,35,15,33,94,37,52],sparecommitlimit:6,entrant:[72,10,35,50],mpseventsql:[86,4,13],mps_fmt_auto_header_:[35,33],crude:60,progress:[42,53,36,31,63,91,74,57,13,29],neither:[81,82,56,74,67,7,50],induc:15,tent:46,locksiz:43,javascript:[11,15],kei:[53,56,17,8,11,15,67,46,78,50,25,28,87],amen:34,lamport:31,appopri:12,supplant:15,mps_res_unimpl:10,job:[30,22,11],entir:[30,80,17,18,44,62,8,11,69,15,24,50,71,65,74,29],rare:[53,63,57,59,10,6,74,70,71,12,50,84,37],fri3gc:[4,88],argument:[0,57,18,64,48,67,2,1,75,41,42,20,8,6,79,25,27,28,29,81,82,9,31,10,33,12,22,34,35,85,84,77,50,92,94,37,52],amer:31,swift:57,addit:[84,56,57,58,18,60,70,13,17,42,77,22,79,24,8,27,29,30,9,11,46,12,41,35,89,15,90,92,37],mps_fix_cal:[35,33],attrpm_no_writ:34,drum:[71,58],bucket_:[87,25],mps_class_mv:[75,28],unformat:[77,46,92,38],obtrus:24,mps_arch_pp:88,ramp:[47,36,72,52],equal:[57,18,31,32,35,67,50,4,34,29,58],jersei:15,mps_pool_creat:[81,9,77,22,79,2,8,92,27,75,85],jin:31,detlef:31,instanc:[54,82,17,59,77,32,6,80,65,67,46,70,71,50,34,41,62,58],grain:[53,61,6,67,50],equat:58,committe:15,mps_class_mf:[75,28,85],section:[42,50,87,18,43,10,8,11,70,45,33,25,4,37,51,38],freeli:[35,5],prot_foo:51,cactu:[71,57],suno:[4,88],boyer:[31,18],"0x00000001003f9b40":16,comment:[0,17,50,33,80,93],unimpl:34,unmark:[62,71],english:[57,36],steadili:77,guidelin:[41,45],rarer:56,arriv:67,arena_high:92,walk:[46,35,80],solv:[30,31,62,25,24,71,50,37],ucb:31,commenc:29,respect:[42,87,58,18,43,10,6,70,15,59,71,50,34,37],leftblock:50,traceset:[6,34],seligmann:31,mailto:5,quit:[30,82,57,59,54,61,15,67,46,24,70,13,37,38],slowli:13,pin:[61,22,33,74],platform:[39,53,18,61,63,48,67,72,74,4,75,13,20,21,77,45,32,34,49,85,86,88,15,50,92,94,37,51,38],addition:[30,18,62,48,47,41,29],decent:38,accumulatorreset:34,compos:[89,31],insuffici:[84,50,40,15,74],compon:[42,30,5,21,6,15,72,4],plezbert:31,treat:[55,56,8,25,90,87,80,74],tactic:37,immedi:[42,30,82,56,81,58,21,77,25,65,68,69,16,40,33,37,29,87],"0x000000010002d020":16,mps_pf_lii3gc:88,field:[84,54,55,57,58,18,60,63,65,70,71,72,74,34,42,6,7,8,26,25,11,46,41,35,80,15,37,51],set_mask:13,memcmp:[32,34],both:[84,56,57,17,18,65,13,72,1,41,43,6,24,25,29,8,33,11,46,92,48,22,34,15,90,50,71,37,38],presenc:[87,59,63,46,24,8],decai:[53,31],forestal:74,bulk:63,zero:[0,56,1,17,59,72,61,63,67,33,2,74,19,13,20,76,24,32,28,30,82,9,25,10,8,12,34,80,15,50,37,38],togeth:[53,54,36,59,18,77,89,11,37,46,72,66,35],colnet:31,reinhold:31,plausibl:[30,18],present:[42,53,43,32,25,11,70,47,71,80,33,34,37,51,38],statist:[13,36,17,29],determinist:16,multi:[39,30,5,31,43,6,63,70,59,72,74,84,94,37,62],cbsinit:50,obj1:41,plain:18,align:[53,1,17,18,61,63,65,67,69,70,80,74,75,84,58,59,88,77,6,79,50,8,27,28,29,82,9,45,10,25,46,12,22,34,35,85,48,16,33,92,37,51,38],event_intern:13,corrigendum:31,fmt_b:35,unsuit:24,defin:[0,54,57,58,18,61,65,66,70,71,72,34,43,7,32,88,82,10,25,83,46,48,41,80,21,90,16,33,37,51],deem:29,talpin:[31,15,72],rightblock:50,glossari:[53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,76,20,30,11,14,93],s7ppmw:88,sep:51,observ:[53,30,58,59,63,90],april:31,mps_os_o1:88,layer:[71,11,89],fwd2_:37,conclus:30,incapacit:13,cell:[60,67,57],almost:[39,30,59,15,67,46,84,37],"5th":31,site:[30,91,54],bodi:[53,41,63,91],mps_pool_class_t:81,archiv:[4,91],cbsinsert:50,attrfmt:[34,80],substanti:[24,56,72,15],buckets_fmt:25,r2000:88,protspong:51,revis:[50,57,31,25],foreign:[54,38,9,74],pda:71,greater:[18,32,68,71,50,34,29],mutat:[42,53,56,57,59,45,6,63,69,15,67,54,24,70,71,65,74,34,62,29,72],mps_arch_:51,mps_mvff_size:92,"0x00000001003f9b80":16,referenti:54,satisfi:[81,54,56,59,18,77,89,35,71,74,84,66,37,38],cross:57,access:[0,53,56,57,58,18,60,62,63,65,66,67,68,69,70,13,72,74,3,4,41,59,43,22,24,8,30,82,9,32,25,11,46,12,34,35,80,87,36,48,15,84,90,16,83,50,71,94,51,38],member:[56,57,48,70,2,75,88,77,6,79,8,27,28,29,9,34,85,15,33,92,93,22],matthew:[93,7,31,50],anachronist:65,mps_reserve_block:[84,48],largest:[67,88,12,59,50],failur:[50,56,10,62,25,70,16,80,32,41,34,87],inc:31,infer:[71,59,15,72],backtrac:[10,16],leaf_pool:25,competit:77,undesign:42,http:[4,43],denot:[4,58,18],expans:[10,34,48,18,21],heapsort:66,maxlength:18,upon:[67,68,41,48,25],effect:[0,54,57,58,18,62,65,13,42,59,44,79,24,29,30,82,31,46,47,12,41,87,48,89,84,16,50,37,51],coffe:29,dai:[42,30,18,8],mps_pf_lii6gc:88,lii3eg:88,sooner:[30,16,17,29],student:15,dealloc:[53,54,56,59,60,62,74,65,66,71,1,75,77,22,79,8,27,30,9,10,80,12,84,85,15,50,92],customalloc:31,decoupl:51,maclisp:[58,31],expand:[88,10,48,15,34,41],mordechai:31,off:[55,57,43,60,89,70,46,16,71,80],cbsmayuseinlin:50,firstli:[6,62,17,15],mps_telemetry_databas:13,builder:51,obj_ap:[16,37,25],well:[0,54,58,18,62,63,48,68,77,40,4,41,42,44,24,50,25,27,30,8,11,46,12,34,35,87,89,15,84,13,33,71,38],morri:31,thought:[13,34],action_find_set_bit:18,exampl:[0,39,56,57,17,18,54,60,62,63,65,66,67,68,53,70,71,2,74,4,75,34,58,42,59,5,21,77,6,78,79,24,7,8,27,28,29,30,82,9,45,32,25,11,86,46,12,13,35,85,80,87,36,48,72,94,88,89,69,37,84,90,16,33,41,92,52,1,22,51,38],frombt:18,ecmascript:15,mpseventcnv:[4,13],choos:[42,20,77,57,17,59,72,44,78,90,84,46,53,70,51,86,19,41,37,29,38],undefin:[30,18,32,6,48,90,70],encourag:[62,89,17],colour:[42,57,18,45,10,67,70,71,34,29],btfindshorthigh:18,mckinlei:31,latest:[0,32,15,71,4,13],test1:18,test2:18,bye:0,paus:[30,36,44,6,11,65,24,72,57,62,29],less:[53,56,57,17,18,71,72,74,75,84,58,77,6,25,29,30,32,11,12,34,36,89,90,50,92,37],conv:[34,18],compel:30,pitfal:24,myseginit:41,mistaken:[84,25,8],metrowerk:[4,51,88],topic:[20,86,8,11,48,25,37],distant:[30,16],heavili:[30,50],type_pad1:[16,37],paul:[93,31],zoneshift:6,systemat:56,brainpow:17,"00000001003fe000":13,gmk:4,web:[91,15],adt:[34,18,43],rapid:[31,15,50],idiom:71,dylan_scan_contig:17,elsevi:31,alloct:46,makefil:[4,51],hall:31,bits_act:18,add:[42,30,82,87,89,10,50,70,15,37,84,46,24,16,12,25,41,4,28,13],divis:[57,58,31,15,67,71],epdldebugcheck:41,mps_telemetry_control:[32,13,70,29],exempt:5,mps_pool_destroi:[81,90,37],ado:17,ought:6,match:[30,66,46,47,12,25,34,28,38],"0x00000001003fb0a0":16,jython:15,branch:[71,84,57,17,51],poolclassstruct:[34,80],dest:32,"002b":13,hpl:31,multiprocess:31,arguabl:41,sigsoft:31,built:[30,82,56,57,17,88,15,48,4,37],realiz:37,five:[42,82,58,77,62,24,35,17],usual:[0,53,55,56,57,17,18,54,61,62,63,65,66,67,68,70,71,72,74,84,58,42,59,24,25,29,30,10,80,11,12,41,35,39,87,89,15,90,33,92,37,51],burden:53,nointersect:50,press:31,redesign:15,lockclaim:43,tr99:31,mps_arena_destroi:[90,13,37,29],motorola:88,resid:[42,56,57,58,67,68,71,72,41],like:[53,54,56,57,17,18,62,65,40,2,4,75,13,42,59,5,77,6,79,24,50,8,27,28,29,30,9,10,25,11,46,47,48,34,85,80,36,89,15,37,84,78,16,33,41,92,22,72],success:[39,53,63,48,66,40,72,41,43,32,29,10,50,11,12,84,35,87,34,15,13,90,33,94],safest:33,corpor:31,resio:34,lose:[60,54,56,71,50],roth:31,stagger:56,ref_p:90,necessari:[84,54,57,48,66,70,13,80,34,43,6,24,25,26,29,30,8,46,65,22,41,87,21,90,33,94,37,51],martin:[93,31],customis:[51,31],async:42,architectur:[57,58,59,63,65,66,67,69,70,71,72,73,74,4,84,42,20,21,6,8,26,82,31,45,80,83,46,13,88,37,51],soft:[67,71,72,15],page:[56,57,17,18,62,63,65,66,67,68,69,70,71,72,74,4,58,59,6,29,30,82,31,13,35,15,37],amd:88,provok:[10,16,30],unreach:[39,53,82,56,57,54,62,80,11,90,15,69,16,72,74,81,37,29,38],exceed:[34,10,6,12],revers:[0,30,18,54,70,71,41,37],unit_s:85,captur:57,"0x7fff5fbff3e0":16,mps_os_:51,yarsun:31,interact:[0,30,31,18,32,62,63,11,65,24,71,25,13,89,29,52],hain:31,self:[54,70,31],certain:[30,80,56,58,54,89,33,11,15,67,68,24,47,70,51,74,71,63,50,29,72],"__kill":[13,16],"_msc_ver":51,superclass:[46,41],flush:[0,32,71,12,13,37,29],piec:[30,57,45,43,89,24,70,1,29],guarante:[54,17,60,65,67,72,58,43,77,6,24,29,30,82,32,46,12,35,87,90,50,37,38],contig:6,peter:31,type_weak_t:8,mainli:[71,11,15,45],win32:43,subramanian:31,trust:72,leaf:[20,63,17,59,54,44,33,68,71,2,25,19,38,35,9],borland:15,lead:[56,36,58,59,60,89,62,63,70,16,71,92,51],broad:34,avoid:[0,53,56,57,17,61,63,65,66,71,2,74,13,58,5,43,44,6,25,29,30,50,83,46,48,41,49,34,89,90,33,37,51,72],mps_res_memori:[10,82,12,29],thank:93,overlap:[42,82,32,47,80,29],debug_opt:[92,27,75,1],estim:[54,36,17,15,29],leav:[30,56,17,18,54,32,46,24,71,29,58],disciplin:[72,15],overlai:72,launch:9,speak:[35,58],pollthreshold:6,mps_os_s7:88,mynoteseg:41,"0x1003fe928":16,milutinov:31,investig:[53,30,27],fromspac:[60,54,70,71],slight:[77,15],aitr:31,journal:31,"enum":50,usag:[36,17,21,62,66,13,37,29,58],hosk:[93,57,31,74],facilit:[71,15],paper:[30,13,70,11],host:32,obei:[37,72],although:[54,57,59,60,62,65,70,71,41,18,43,6,24,7,25,30,11,46,48,34,15,50,38],offset:[80,71,35,18,74],java:[53,30,31,54,11,15,66,67,90,71,72,74],sigabrt:[13,16],stage:[42,17,71,33,13,49,51],about:[0,56,57,17,18,62,63,65,67,69,70,40,72,74,13,58,42,59,77,22,78,24,25,29,81,30,82,80,11,46,41,35,36,34,15,84,90,91,50,94,37,51,38],actual:[0,54,55,56,57,58,62,65,66,40,73,74,42,43,6,24,25,29,30,82,80,11,46,41,92],fri6gc:[4,88],world:[62,11,31,29],findlast:50,column:[13,88],freedom:[68,30,15,46],irix:[60,4,88],justif:[41,18],tracer:[42,6,34,45],mps_key_vm_w3_top_down:[],jouannaud:31,rule:[90,34,37,25],constructor:[30,56,57,59,15,37],fals:[0,81,87,41,18,6,50,48,37,84,12,33,26,92,34,35,29],discard:[0,54,36,50,90,47,12,25,57,84,35,29,38],hypothet:41,disabl:[0,6,17],conflat:50,sleepycat:5,harder:[89,65,15,74],own:[39,57,68,70,71,72,4,34,42,43,6,32,29,30,82,10,25,11,46,41,89,15,84,37],absolut:[12,59,74],roughli:17,kathryn:31,unbox:[58,65,69,71,33,37],around:[61,30,36,17,43,58,32,62,8,69,15,84,46,24,25,34,37,38],mps_build_cx:88,eventdef:13,automat:[39,53,56,57,17,59,72,62,1,65,66,67,40,2,74,19,4,75,20,77,22,23,79,24,50,8,27,29,81,30,82,9,31,10,25,11,46,47,12,92,84,35,85,80,36,48,15,78,33,71,94,37,51,38],warranti:5,guard:[90,6,41,25],refer:[0,39,55,56,57,17,18,54,60,61,62,63,76,65,67,53,70,71,2,74,19,75,34,58,42,20,59,77,22,78,23,79,24,8,26,27,29,81,30,82,9,31,45,10,25,11,93,46,48,13,35,85,80,87,72,89,69,15,84,90,16,83,33,41,92,52,94,37,51,38],awhil:12,lund:31,scanner:[82,63,17,49,33],tito:31,lockreleasempm:43,hysteresi:[77,6,45],pointless:85,mere:[42,46,63,57,87],merg:[87,57,18,50,89,80],mps_fmt_b_:35,behavior:[30,57,31,11,15,71],van:15,obj1struct:41,val:[1,9,77,22,8,37,79,7,2,25,92,27,75,28,35,29,85],pictur:[39,42],assumpt:[22,11,46,90,8,41,34],transfer:[62,63,71,74],findlongresetrang:18,intellig:[63,17,31],trigger:[68,74],lockreleaseglobalrecurs:43,inner:[57,18],define_alias_class:41,"var":[41,51,38],protocolclasssuperclasspoli:41,c90:57,contamin:31,"function":[0,39,56,57,17,18,54,60,62,63,64,65,66,67,68,53,40,72,74,34,42,20,59,43,6,7,8,26,28,29,81,30,82,9,31,45,10,25,11,46,47,12,50,13,35,80,87,48,32,15,37,84,90,16,83,33,41,71,94,22,51,52],btissetrang:18,north:31,unexpect:[16,37,15,33],unwrap:[67,69,72],subsum:42,findlastaft:50,message_typ:0,middleblock:50,mps_debug_class:46,tv_usec:32,type_symbol:[84,16,37,25],gain:[44,15,46,33,94,29],spuriou:42,grate:93,munro:31,eas:[30,15],inlin:[39,30,82,87,84,17,59,33,65,48,50,12,25,4,34],buf:[10,32],poolmark:80,"0x1003f9bf8":16,exit_failur:30,suppli:[89,87,59,43,32,50,11,15,46,65,25,41,35,38],also:[0,39,55,56,57,17,18,54,60,61,62,63,64,65,66,67,68,53,70,40,2,73,74,4,13,58,42,59,5,43,6,76,24,7,25,26,29,30,82,9,31,80,11,46,12,92,34,35,87,36,48,1,89,69,15,37,84,90,91,50,41,71,22,51,72],dmb:58,made:[84,56,17,59,65,66,71,41,58,18,21,6,80,29,30,10,25,46,13,87,43,15,50,93,51],wise:[60,30,56,31,93],clearli:[6,16],wish:43,o1alcc:88,displai:[0,11,21],troubl:[30,56],asynchron:[0,59,11,37,70,16,71,35,29],record:[0,42,56,57,17,18,54,32,6,63,15,67,46,59,71,13,94,76,29,87],btfindlongresrang:18,blockbas:50,ensur:[84,56,17,59,65,67,70,71,13,58,6,24,25,29,30,82,9,32,8,41,35,89,15,90,33,37,51],indefinit:[56,57,59,63,65,66],mps_headers:35,tracepol:[6,16],otherwis:[0,39,55,17,18,54,67,71,2,34,58,42,5,43,6,25,29,81,82,50,11,47,12,13,35,87,36,84,90,33],problem:[53,54,56,59,62,66,70,71,72,74,13,42,6,23,24,8,30,31,25,11,46,34,89,15,90,50,37],walter:93,tracesetismemb:6,succe:[0,30,6,46,84,29],lfp:31,foster:15,multipli:29,immobil:74,evalu:[31,25,65,48,16,12,33,34,84],pascal:[11,15],"int":[54,82,18,10,6,83,48,71,32,41,34,28,37,51],mask:[82,18],dure:[0,54,56,57,18,60,61,62,1,65,67,71,72,74,84,42,43,6,24,80,29,30,50,46,41,35,87,33,37,38],dish:71,memoiz:[62,57,51],xerox:31,pig:74,multic:62,sptab:37,implement:[0,39,55,56,57,17,18,54,60,63,65,66,67,53,70,40,72,74,4,41,58,42,20,59,5,21,77,6,91,24,7,32,26,30,31,45,10,8,11,46,92,12,50,34,85,80,87,48,43,15,37,84,90,16,83,33,71,52,25,51,38],erik:[0,15],protocolsomeclassstruct:41,ing:15,resunimpl:34,eric:31,probabl:[42,30,82,18,54,10,67,53,70,71,72,34,37,29],misleadingli:25,mutual:[43,31,38],sizenews:50,nonetheless:84,buckets_skip:25,detail:[39,53,57,17,18,60,62,65,68,71,13,42,43,50,8,30,45,25,11,46,48,41,87,84,90,33,37],virtual:[17,59,60,62,63,48,66,67,68,69,70,71,72,74,88,6,24,65,29,30,31,10,11,12,84,15,37,52],mps_fmt_check_fenceposts_t:46,ultrasparc:65,other:[0,39,55,56,57,17,18,54,60,61,62,63,65,68,53,70,40,72,74,3,4,34,58,42,50,59,5,21,44,6,78,49,79,24,7,8,27,29,81,30,82,10,25,11,46,12,92,13,35,85,80,87,36,48,43,89,69,15,37,84,77,90,16,33,41,71,94,22,51,38],lookup:[87,58,18,62,65,66,16,25,17],futur:[53,30,82,63,36,17,59,45,10,50,48,67,90,47,80,32,41,57,34,13,58],rememb:[31,30,53,57,17,18,43,72,55,15,42,54,24,67,71,65,34,82,29,38],varieti:[30,63,57,59,18,21,10,45,15,66,68,46,16,72,4,52,13,51,38],deliber:[62,37],siginvalid:6,"0x000000010000341f":16,mps_rank_exact:[55,8,82,79,71,72,25,37],kent:[93,31],naggum:[0,15],repeat:[87,62,25,46,90,70,1,84,37],attardi:[93,31,15],foostruct:80,pooldestroi:80,june:[46,31],neeli:31,throughout:[18,89,48,67,70,71,37],mps_objects_step_t:46,mps_collect:29,vein:59,stai:[59,8],multithread:31,experienc:30,philipp:31,eof:32,eqv_hash:25,refsig:80,pdp:[73,58,31],reliabl:[39,30,82,87,81,15,42,24,16,51,25,84,37,29],indirectli:[67,30,24,41],comparison:[34,50,87,25],pool_class:35,gdbinit:[13,16],portion:[72,57,29,18,74],emerg:[90,6,50,17,25],tightest:89,auxiliari:[72,65,38],suballoc:[30,60,89,11,65,23,71],decemb:31,invari:[10,83,65,67,70,71,15,80],emeri:31,ansi:[39,30,57,58,43,32,48,4,13,51]},objtypes:{"0":"std:option","1":"std:envvar","2":"c:type","3":"c:function","4":"c:macro"},titles:["12. Messages","18. Debugging pools","5. AMCZ (Automatic Mostly-Copying Zero-rank)","18. Software versions","2. Building the Memory Pool System","Memory Pool System Kit Open Source License","1. Arena","4. Checking","7. AWL (Automatic Weak Linked)","8. LO (Leaf Object)","3. Error handing","1. Overview","15. Segregated allocation caches","19. Telemetry","Memory Management Glossary","4. Memory management in various languages","4. Debugging with the Memory Pool System","3. The critical path","2. Bit tables","Pool reference","Memory Pool System","19. Library version mechanism","4. AMC (Automatic Mostly-Copying)","Introduction to memory management","3. Recycling techniques","6. Advanced topics","9. The generic fix function","6. AMS (Automatic Mark and Sweep)","2. Keyword arguments","4. Arenas","5. Frequently Asked Questions","Bibliography","1. Plinth","8. Scanning","17. General MPS types","7. Object formats","11. Garbage collection","3. Garbage collecting a language with the Memory Pool System","1. Choosing a pool class","1. Overview of the Memory Pool System","17. Allocation frames","16. Protocol inheritance","6. Collection framework","14. The lock module","5. Tuning the Memory Pool System for performance","Design","15. Debugging features for client objects","16. Allocation patterns","1. Interface conventions","Internals","3. Coalescing block structure","7. Configuration","Reference","Memory Management Glossary: G","Memory Management Glossary: F","Memory Management Glossary: E","Memory Management Glossary: D","Memory Management Glossary: C","Memory Management Glossary: B","Memory Management Glossary: A","Memory Management Glossary: O","Memory Management Glossary: N","Memory Management Glossary: M","Memory Management Glossary: L","Memory Management Glossary: K","Memory Management Glossary: I","Memory Management Glossary: H","Memory Management Glossary: W","Memory Management Glossary: V","Memory Management Glossary: U","Memory Management Glossary: T","Memory Management Glossary: S","Memory Management Glossary: R","Memory Management Glossary: Q","Memory Management Glossary: P","10. MV (Manual Variable)","Memory Management Glossary: Z","12. MVT (Manual Variable Temporal)","20. Weak references","13. SNC (Stack No Checking)","5. Pool class interface","5. Pools","10. Roots","8. Finalization","6. Allocation","9. MFS (Manual Fixed Small)","Guide","14. Location dependency","2. Platforms","2. Allocation techniques","13. Finalization","Contact us","11. MVFF (Manual Variable First Fit)","Acknowledgements","9. Threads"],objnames:{"0":["std","option","option"],"1":["std","envvar","environment variable"],"2":["c","type","C type"],"3":["c","function","C function"],"4":["c","macro","C macro"]},filenames:["topic/message","topic/debugging","pool/amcz","design/version","guide/build","copyright","design/arena","design/check","pool/awl","pool/lo","topic/error","mmref/begin","topic/cache","topic/telemetry","glossary/index","mmref/lang","guide/debug","topic/critical","design/bt","pool/index","index","design/version-library","pool/amc","mmref/index","mmref/recycle","guide/advanced","design/fix","pool/ams","topic/keyword","topic/arena","mmref/faq","mmref/bib","topic/plinth","topic/scanning","design/type","topic/format","topic/collection","guide/lang","pool/intro","guide/overview","topic/frame","design/protocol","design/collection","design/lock","guide/perf","design/index","design/object-debug","topic/pattern","topic/interface","topic/internals","design/cbs","design/config","topic/index","glossary/g","glossary/f","glossary/e","glossary/d","glossary/c","glossary/b","glossary/a","glossary/o","glossary/n","glossary/m","glossary/l","glossary/k","glossary/i","glossary/h","glossary/w","glossary/v","glossary/u","glossary/t","glossary/s","glossary/r","glossary/q","glossary/p","pool/mv","glossary/z","pool/mvt","topic/weak","pool/snc","design/class-interface","topic/pool","topic/root","design/finalize","topic/allocation","pool/mfs","guide/index","topic/location","topic/platform","mmref/alloc","topic/finalization","contact","pool/mvff","mmref/credit","topic/thread"]}) \ No newline at end of file | ||
diff --git a/mps/manual/html/topic/allocation.html b/mps/manual/html/topic/allocation.html index 4eb813abcbc..005782b6f88 100644 --- a/mps/manual/html/topic/allocation.html +++ b/mps/manual/html/topic/allocation.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>5. Allocation — Memory Pool System 1.111.0 documentation</title> | 11 | <title>6. Allocation — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="6. Object formats" href="format.html" /> | 31 | <link rel="next" title="7. Object formats" href="format.html" /> |
| 32 | <link rel="prev" title="4. Pools" href="pool.html" /> | 32 | <link rel="prev" title="5. Pools" href="pool.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="format.html" title="6. Object formats" | 42 | <a href="format.html" title="7. Object formats" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="pool.html" title="4. Pools" | 45 | <a href="pool.html" title="5. Pools" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,9 +55,9 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="allocation"> | 57 | <div class="section" id="allocation"> |
| 58 | <span id="topic-allocation"></span><span id="index-0"></span><h1>5. Allocation<a class="headerlink" href="#allocation" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-allocation"></span><span id="index-0"></span><h1>6. Allocation<a class="headerlink" href="#allocation" title="Permalink to this headline">¶</a></h1> |
| 59 | <div class="section" id="manual-allocation"> | 59 | <div class="section" id="manual-allocation"> |
| 60 | <span id="index-1"></span><h2>5.1. Manual allocation<a class="headerlink" href="#manual-allocation" title="Permalink to this headline">¶</a></h2> | 60 | <span id="index-1"></span><h2>6.1. Manual allocation<a class="headerlink" href="#manual-allocation" title="Permalink to this headline">¶</a></h2> |
| 61 | <div class="admonition-note admonition"> | 61 | <div class="admonition-note admonition"> |
| 62 | <p class="first admonition-title">Note</p> | 62 | <p class="first admonition-title">Note</p> |
| 63 | <p class="last">Not all <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> support this interface: | 63 | <p class="last">Not all <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> support this interface: |
| @@ -108,7 +108,7 @@ all.</p> | |||
| 108 | 108 | ||
| 109 | </div> | 109 | </div> |
| 110 | <div class="section" id="allocation-points"> | 110 | <div class="section" id="allocation-points"> |
| 111 | <span id="index-2"></span><h2>5.2. Allocation points<a class="headerlink" href="#allocation-points" title="Permalink to this headline">¶</a></h2> | 111 | <span id="index-2"></span><h2>6.2. Allocation points<a class="headerlink" href="#allocation-points" title="Permalink to this headline">¶</a></h2> |
| 112 | <p><a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">Allocation points</em></a> provide fast, <a class="reference internal" href="../glossary/i.html#term-inline-allocation-1"><em class="xref std std-term">inline</em></a>, nearly <a class="reference internal" href="../glossary/l.html#term-lock-free"><em class="xref std std-term">lock-free</em></a> allocation. | 112 | <p><a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">Allocation points</em></a> provide fast, <a class="reference internal" href="../glossary/i.html#term-inline-allocation-1"><em class="xref std std-term">inline</em></a>, nearly <a class="reference internal" href="../glossary/l.html#term-lock-free"><em class="xref std std-term">lock-free</em></a> allocation. |
| 113 | They allow code to allocate without calling an allocation function: | 113 | They allow code to allocate without calling an allocation function: |
| 114 | this is vital for performance in languages or programs that allocate | 114 | this is vital for performance in languages or programs that allocate |
| @@ -123,16 +123,18 @@ many small objects. They must be used according to the | |||
| 123 | </dd></dl> | 123 | </dd></dl> |
| 124 | 124 | ||
| 125 | <dl class="function"> | 125 | <dl class="function"> |
| 126 | <dt id="mps_ap_create"> | 126 | <dt id="mps_ap_create_k"> |
| 127 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_ap_create</tt><big>(</big><a class="reference internal" href="#mps_ap_t" title="mps_ap_t">mps_ap_t</a><em> *ap_o</em>, <a class="reference internal" href="pool.html#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> pool</em>, ...<big>)</big><a class="headerlink" href="#mps_ap_create" title="Permalink to this definition">¶</a></dt> | 127 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_ap_create_k</tt><big>(</big><a class="reference internal" href="#mps_ap_t" title="mps_ap_t">mps_ap_t</a><em> *ap_o</em>, <a class="reference internal" href="pool.html#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> pool</em>, <a class="reference internal" href="keyword.html#mps_arg_s" title="mps_arg_s">mps_arg_s</a><em> args[]</em><big>)</big><a class="headerlink" href="#mps_ap_create_k" title="Permalink to this definition">¶</a></dt> |
| 128 | <dd><p>Create an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a> in a <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> | 128 | <dd><p>Create an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a> in a <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>.</p> |
| 129 | <p><tt class="docutils literal"><span class="pre">ap_o</span></tt> points to a location that will hold the address of the | 129 | <p><tt class="docutils literal"><span class="pre">ap_o</span></tt> points to a location that will hold the address of the |
| 130 | allocation point, if successful.</p> | 130 | allocation point, if successful.</p> |
| 131 | <p><tt class="docutils literal"><span class="pre">pool</span></tt> is the pool.</p> | 131 | <p><tt class="docutils literal"><span class="pre">pool</span></tt> is the pool.</p> |
| 132 | <p><tt class="docutils literal"><span class="pre">args</span></tt> are <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a> specific to the pool class | ||
| 133 | to which <tt class="docutils literal"><span class="pre">pool</span></tt> belong. See the documentation for that pool | ||
| 134 | class. (Most pool classes don’t take any keyword arguments; in | ||
| 135 | those cases you can pass <a class="reference internal" href="keyword.html#mps_args_none" title="mps_args_none"><tt class="xref c c-macro docutils literal"><span class="pre">mps_args_none</span></tt></a>.)</p> | ||
| 132 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if successful, or another | 136 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if successful, or another |
| 133 | <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> if not.</p> | 137 | <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> if not.</p> |
| 134 | <p>Some pool classes require additional arguments to be passed to | ||
| 135 | <a class="reference internal" href="#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a>. See the documentation for the pool class.</p> | ||
| 136 | <div class="admonition warning"> | 138 | <div class="admonition warning"> |
| 137 | <p class="first admonition-title">Warning</p> | 139 | <p class="first admonition-title">Warning</p> |
| 138 | <p class="last">An allocation point must not be used by more than one | 140 | <p class="last">An allocation point must not be used by more than one |
| @@ -148,9 +150,31 @@ takes its extra arguments using the standard <a class="reference internal" href= | |||
| 148 | </dd></dl> | 150 | </dd></dl> |
| 149 | 151 | ||
| 150 | <dl class="function"> | 152 | <dl class="function"> |
| 153 | <dt id="mps_ap_create"> | ||
| 154 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_ap_create</tt><big>(</big><a class="reference internal" href="#mps_ap_t" title="mps_ap_t">mps_ap_t</a><em> *ap_o</em>, <a class="reference internal" href="pool.html#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> pool</em>, ...<big>)</big><a class="headerlink" href="#mps_ap_create" title="Permalink to this definition">¶</a></dt> | ||
| 155 | <dd><div class="admonition-deprecated admonition"> | ||
| 156 | <p class="first admonition-title">Deprecated</p> | ||
| 157 | <p>starting with version 1.112.</p> | ||
| 158 | <p class="last">Use <a class="reference internal" href="#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 159 | arguments</em></a> interface is more reliable and produces better | ||
| 160 | error messages.</p> | ||
| 161 | </div> | ||
| 162 | <p>An alternative to <a class="reference internal" href="#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> that takes its extra | ||
| 163 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> variable argument list | ||
| 164 | mechanism.</p> | ||
| 165 | </dd></dl> | ||
| 166 | |||
| 167 | <dl class="function"> | ||
| 151 | <dt id="mps_ap_create_v"> | 168 | <dt id="mps_ap_create_v"> |
| 152 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_ap_create_v</tt><big>(</big><a class="reference internal" href="#mps_ap_t" title="mps_ap_t">mps_ap_t</a><em> *ap_o</em>, <a class="reference internal" href="pool.html#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> pool</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_ap_create_v" title="Permalink to this definition">¶</a></dt> | 169 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_ap_create_v</tt><big>(</big><a class="reference internal" href="#mps_ap_t" title="mps_ap_t">mps_ap_t</a><em> *ap_o</em>, <a class="reference internal" href="pool.html#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> pool</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_ap_create_v" title="Permalink to this definition">¶</a></dt> |
| 153 | <dd><p>An alternative to <a class="reference internal" href="#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a> that takes its extra | 170 | <dd><div class="admonition-deprecated admonition"> |
| 171 | <p class="first admonition-title">Deprecated</p> | ||
| 172 | <p>starting with version 1.112.</p> | ||
| 173 | <p class="last">Use <a class="reference internal" href="#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 174 | arguments</em></a> interface is more reliable and produces better | ||
| 175 | error messages.</p> | ||
| 176 | </div> | ||
| 177 | <p>An alternative to <a class="reference internal" href="#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a> that takes its extra | ||
| 154 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> | 178 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> |
| 155 | </dd></dl> | 179 | </dd></dl> |
| 156 | 180 | ||
| @@ -166,7 +190,7 @@ allocated from it, so long as they were successfully | |||
| 166 | 190 | ||
| 167 | </div> | 191 | </div> |
| 168 | <div class="section" id="allocation-point-protocol"> | 192 | <div class="section" id="allocation-point-protocol"> |
| 169 | <span id="topic-allocation-point-protocol"></span><span id="index-3"></span><h2>5.3. Allocation point protocol<a class="headerlink" href="#allocation-point-protocol" title="Permalink to this headline">¶</a></h2> | 193 | <span id="topic-allocation-point-protocol"></span><span id="index-3"></span><h2>6.3. Allocation point protocol<a class="headerlink" href="#allocation-point-protocol" title="Permalink to this headline">¶</a></h2> |
| 170 | <p>This protocol is designed to work with <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental garbage | 194 | <p>This protocol is designed to work with <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental garbage |
| 171 | collection</em></a> and multiple <a class="reference internal" href="../glossary/t.html#term-thread"><em class="xref std std-term">threads</em></a>, where between any | 195 | collection</em></a> and multiple <a class="reference internal" href="../glossary/t.html#term-thread"><em class="xref std std-term">threads</em></a>, where between any |
| 172 | two instructions in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a>, the MPS may run part | 196 | two instructions in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a>, the MPS may run part |
| @@ -231,10 +255,10 @@ may point to the old location of blocks that moved.</p> | |||
| 231 | </ol> | 255 | </ol> |
| 232 | <p>The usual implementation of the allocation point protocol in <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> | 256 | <p>The usual implementation of the allocation point protocol in <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> |
| 233 | is thus:</p> | 257 | is thus:</p> |
| 234 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 258 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 235 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 259 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 236 | <span class="k">do</span> <span class="p">{</span> | 260 | <span class="k">do</span> <span class="p">{</span> |
| 237 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 261 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 238 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="cm">/* handle the error */</span><span class="p">;</span> | 262 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="cm">/* handle the error */</span><span class="p">;</span> |
| 239 | <span class="cm">/* p is now an ambiguous reference to the reserved block */</span> | 263 | <span class="cm">/* p is now an ambiguous reference to the reserved block */</span> |
| 240 | <span class="n">obj</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> | 264 | <span class="n">obj</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> |
| @@ -336,20 +360,20 @@ may evaluate its arguments multiple times.</p> | |||
| 336 | 360 | ||
| 337 | </div> | 361 | </div> |
| 338 | <div class="section" id="example-allocating-a-symbol"> | 362 | <div class="section" id="example-allocating-a-symbol"> |
| 339 | <span id="index-4"></span><h2>5.4. Example: allocating a symbol<a class="headerlink" href="#example-allocating-a-symbol" title="Permalink to this headline">¶</a></h2> | 363 | <span id="index-4"></span><h2>6.4. Example: allocating a symbol<a class="headerlink" href="#example-allocating-a-symbol" title="Permalink to this headline">¶</a></h2> |
| 340 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">symbol_s</span> <span class="p">{</span> | 364 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">symbol_s</span> <span class="p">{</span> |
| 341 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_SYMBOL */</span> | 365 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_SYMBOL */</span> |
| 342 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* length of symbol string (excl. NUL) */</span> | 366 | <span class="kt">size_t</span> <span class="n">length</span><span class="p">;</span> <span class="cm">/* length of symbol string (excl. NUL) */</span> |
| 343 | <span class="kt">char</span> <span class="n">string</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="cm">/* symbol string, NUL terminated */</span> | 367 | <span class="kt">char</span> <span class="n">string</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="cm">/* symbol string, NUL terminated */</span> |
| 344 | <span class="p">}</span> <span class="n">symbol_s</span><span class="p">,</span> <span class="o">*</span><span class="kt">symbol_t</span><span class="p">;</span> | 368 | <span class="p">}</span> <span class="n">symbol_s</span><span class="p">,</span> <span class="o">*</span><span class="n">symbol_t</span><span class="p">;</span> |
| 345 | 369 | ||
| 346 | <span class="kt">symbol_t</span> <span class="nf">make_symbol</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">char</span> <span class="n">string</span><span class="p">[])</span> | 370 | <span class="n">symbol_t</span> <span class="nf">make_symbol</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">length</span><span class="p">,</span> <span class="kt">char</span> <span class="n">string</span><span class="p">[])</span> |
| 347 | <span class="p">{</span> | 371 | <span class="p">{</span> |
| 348 | <span class="kt">symbol_t</span> <span class="n">symbol</span><span class="p">;</span> | 372 | <span class="n">symbol_t</span> <span class="n">symbol</span><span class="p">;</span> |
| 349 | <span class="kt">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | 373 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> |
| 350 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">symbol_s</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">+</span> <span class="n">length</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> | 374 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="n">offsetof</span><span class="p">(</span><span class="n">symbol_s</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span> <span class="o">+</span> <span class="n">length</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> |
| 351 | <span class="k">do</span> <span class="p">{</span> | 375 | <span class="k">do</span> <span class="p">{</span> |
| 352 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 376 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">addr</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 353 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_symbol"</span><span class="p">);</span> | 377 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory in make_symbol"</span><span class="p">);</span> |
| 354 | <span class="n">symbol</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> | 378 | <span class="n">symbol</span> <span class="o">=</span> <span class="n">addr</span><span class="p">;</span> |
| 355 | <span class="n">symbol</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_SYMBOL</span><span class="p">;</span> | 379 | <span class="n">symbol</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_SYMBOL</span><span class="p">;</span> |
| @@ -362,7 +386,7 @@ may evaluate its arguments multiple times.</p> | |||
| 362 | </div> | 386 | </div> |
| 363 | </div> | 387 | </div> |
| 364 | <div class="section" id="cautions"> | 388 | <div class="section" id="cautions"> |
| 365 | <span id="topic-allocation-cautions"></span><span id="index-5"></span><h2>5.5. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> | 389 | <span id="topic-allocation-cautions"></span><span id="index-5"></span><h2>6.5. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> |
| 366 | <p>While a block is reserved but not yet committed:</p> | 390 | <p>While a block is reserved but not yet committed:</p> |
| 367 | <ol class="arabic simple"> | 391 | <ol class="arabic simple"> |
| 368 | <li>The client program must not create an <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact reference</em></a> to | 392 | <li>The client program must not create an <a class="reference internal" href="../glossary/e.html#term-exact-reference"><em class="xref std std-term">exact reference</em></a> to |
| @@ -411,24 +435,24 @@ choosing. See <a class="reference internal" href="debugging.html#topic-debugging | |||
| 411 | </div> | 435 | </div> |
| 412 | </div> | 436 | </div> |
| 413 | <div class="section" id="example-inserting-into-a-doubly-linked-list"> | 437 | <div class="section" id="example-inserting-into-a-doubly-linked-list"> |
| 414 | <span id="index-6"></span><h2>5.6. Example: inserting into a doubly linked list<a class="headerlink" href="#example-inserting-into-a-doubly-linked-list" title="Permalink to this headline">¶</a></h2> | 438 | <span id="index-6"></span><h2>6.6. Example: inserting into a doubly linked list<a class="headerlink" href="#example-inserting-into-a-doubly-linked-list" title="Permalink to this headline">¶</a></h2> |
| 415 | <p>This example contains several mistakes. See the highlighted lines:</p> | 439 | <p>This example contains several mistakes. See the highlighted lines:</p> |
| 416 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">link_s</span> <span class="p">{</span> | 440 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">link_s</span> <span class="p">{</span> |
| 417 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_LINK */</span> | 441 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_LINK */</span> |
| 418 | <span class="cm">/* all three of these pointers are fixed: */</span> | 442 | <span class="cm">/* all three of these pointers are fixed: */</span> |
| 419 | <span class="k">struct</span> <span class="n">link_s</span> <span class="o">*</span><span class="n">prev</span><span class="p">;</span> | 443 | <span class="k">struct</span> <span class="n">link_s</span> <span class="o">*</span><span class="n">prev</span><span class="p">;</span> |
| 420 | <span class="k">struct</span> <span class="n">link_s</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span> | 444 | <span class="k">struct</span> <span class="n">link_s</span> <span class="o">*</span><span class="n">next</span><span class="p">;</span> |
| 421 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 445 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 422 | <span class="p">}</span> <span class="n">link_s</span><span class="p">,</span> <span class="o">*</span><span class="kt">link_t</span><span class="p">;</span> | 446 | <span class="p">}</span> <span class="n">link_s</span><span class="p">,</span> <span class="o">*</span><span class="n">link_t</span><span class="p">;</span> |
| 423 | 447 | ||
| 424 | <span class="cm">/* insert 'obj' into the doubly-linked list after 'head' */</span> | 448 | <span class="cm">/* insert 'obj' into the doubly-linked list after 'head' */</span> |
| 425 | <span class="kt">link_t</span> <span class="nf">insert_link</span><span class="p">(</span><span class="kt">link_t</span> <span class="n">head</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">)</span> | 449 | <span class="n">link_t</span> <span class="nf">insert_link</span><span class="p">(</span><span class="n">link_t</span> <span class="n">head</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">obj</span><span class="p">)</span> |
| 426 | <span class="p">{</span> | 450 | <span class="p">{</span> |
| 427 | <span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 451 | <span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 428 | <span class="kt">link_t</span> <span class="n">link</span><span class="p">;</span> | 452 | <span class="n">link_t</span> <span class="n">link</span><span class="p">;</span> |
| 429 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">link_s</span><span class="p">));</span> | 453 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">link_s</span><span class="p">));</span> |
| 430 | <span class="k">do</span> <span class="p">{</span> | 454 | <span class="k">do</span> <span class="p">{</span> |
| 431 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 455 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 432 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> | 456 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> |
| 433 | <span class="n">link</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> | 457 | <span class="n">link</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> |
| 434 | <span class="n">link</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_LINK</span><span class="p">;</span> | 458 | <span class="n">link</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_LINK</span><span class="p">;</span> |
| @@ -454,13 +478,13 @@ be deferred until after a successful commit.</li> | |||
| 454 | scan method, so it must be initialized before the call to commit.</li> | 478 | scan method, so it must be initialized before the call to commit.</li> |
| 455 | </ol> | 479 | </ol> |
| 456 | <p>A correct version of <tt class="docutils literal"><span class="pre">insert_link</span></tt> looks like this:</p> | 480 | <p>A correct version of <tt class="docutils literal"><span class="pre">insert_link</span></tt> looks like this:</p> |
| 457 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">link_t</span> <span class="nf">insert_link</span><span class="p">(</span><span class="kt">link_t</span> <span class="n">head</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">)</span> | 481 | <div class="highlight-c"><div class="highlight"><pre><span class="n">link_t</span> <span class="nf">insert_link</span><span class="p">(</span><span class="n">link_t</span> <span class="n">head</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">obj</span><span class="p">)</span> |
| 458 | <span class="p">{</span> | 482 | <span class="p">{</span> |
| 459 | <span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 483 | <span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 460 | <span class="kt">link_t</span> <span class="n">link</span><span class="p">;</span> | 484 | <span class="n">link_t</span> <span class="n">link</span><span class="p">;</span> |
| 461 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">link_s</span><span class="p">));</span> | 485 | <span class="kt">size_t</span> <span class="n">size</span> <span class="o">=</span> <span class="n">ALIGN</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">link_s</span><span class="p">));</span> |
| 462 | <span class="k">do</span> <span class="p">{</span> | 486 | <span class="k">do</span> <span class="p">{</span> |
| 463 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> | 487 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">mps_reserve</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">ap</span><span class="p">,</span> <span class="n">size</span><span class="p">);</span> |
| 464 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> | 488 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"out of memory"</span><span class="p">);</span> |
| 465 | <span class="n">link</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> | 489 | <span class="n">link</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span> |
| 466 | <span class="n">link</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_LINK</span><span class="p">;</span> | 490 | <span class="n">link</span><span class="o">-></span><span class="n">type</span> <span class="o">=</span> <span class="n">TYPE_LINK</span><span class="p">;</span> |
| @@ -476,7 +500,7 @@ scan method, so it must be initialized before the call to commit.</li> | |||
| 476 | </div> | 500 | </div> |
| 477 | </div> | 501 | </div> |
| 478 | <div class="section" id="allocation-point-implementation"> | 502 | <div class="section" id="allocation-point-implementation"> |
| 479 | <span id="topic-allocation-point-implementation"></span><span id="index-7"></span><h2>5.7. Allocation point implementation<a class="headerlink" href="#allocation-point-implementation" title="Permalink to this headline">¶</a></h2> | 503 | <span id="topic-allocation-point-implementation"></span><span id="index-7"></span><h2>6.7. Allocation point implementation<a class="headerlink" href="#allocation-point-implementation" title="Permalink to this headline">¶</a></h2> |
| 480 | <p>An allocation point consists of a structure of type <a class="reference internal" href="#mps_ap_s" title="mps_ap_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ap_s</span></tt></a> | 504 | <p>An allocation point consists of a structure of type <a class="reference internal" href="#mps_ap_s" title="mps_ap_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ap_s</span></tt></a> |
| 481 | and an associated <a class="reference internal" href="../glossary/b.html#term-buffer"><em class="xref std std-term">buffer</em></a>.</p> | 505 | and an associated <a class="reference internal" href="../glossary/b.html#term-buffer"><em class="xref std std-term">buffer</em></a>.</p> |
| 482 | <div class="figure align-center"> | 506 | <div class="figure align-center"> |
| @@ -574,9 +598,9 @@ instruction at this point.</p> | |||
| 574 | <dd><p>The type of the structure used to represent <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation | 598 | <dd><p>The type of the structure used to represent <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation |
| 575 | points</em></a>:</p> | 599 | points</em></a>:</p> |
| 576 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_ap_s</span> <span class="p">{</span> | 600 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_ap_s</span> <span class="p">{</span> |
| 577 | <span class="kt">mps_addr_t</span> <span class="n">init</span><span class="p">;</span> | 601 | <span class="n">mps_addr_t</span> <span class="n">init</span><span class="p">;</span> |
| 578 | <span class="kt">mps_addr_t</span> <span class="n">alloc</span><span class="p">;</span> | 602 | <span class="n">mps_addr_t</span> <span class="n">alloc</span><span class="p">;</span> |
| 579 | <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">;</span> | 603 | <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">;</span> |
| 580 | <span class="cm">/* ... private fields ... */</span> | 604 | <span class="cm">/* ... private fields ... */</span> |
| 581 | <span class="p">}</span> <span class="n">mps_ap_s</span><span class="p">;</span> | 605 | <span class="p">}</span> <span class="n">mps_ap_s</span><span class="p">;</span> |
| 582 | </pre></div> | 606 | </pre></div> |
| @@ -588,7 +612,7 @@ points</em></a>:</p> | |||
| 588 | provides very fast allocation, and defers the need for | 612 | provides very fast allocation, and defers the need for |
| 589 | synchronization in a multi-threaded environment.</p> | 613 | synchronization in a multi-threaded environment.</p> |
| 590 | <p>Create an allocation point for a pool by calling | 614 | <p>Create an allocation point for a pool by calling |
| 591 | <a class="reference internal" href="#mps_ap_create" title="mps_ap_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create()</span></tt></a>, and allocate memory via one by calling | 615 | <a class="reference internal" href="#mps_ap_create_k" title="mps_ap_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_create_k()</span></tt></a>, and allocate memory via one by calling |
| 592 | <a class="reference internal" href="#mps_reserve" title="mps_reserve"><tt class="xref c c-func docutils literal"><span class="pre">mps_reserve()</span></tt></a> and <a class="reference internal" href="#mps_commit" title="mps_commit"><tt class="xref c c-func docutils literal"><span class="pre">mps_commit()</span></tt></a>.</p> | 616 | <a class="reference internal" href="#mps_reserve" title="mps_reserve"><tt class="xref c c-func docutils literal"><span class="pre">mps_reserve()</span></tt></a> and <a class="reference internal" href="#mps_commit" title="mps_commit"><tt class="xref c c-func docutils literal"><span class="pre">mps_commit()</span></tt></a>.</p> |
| 593 | </dd></dl> | 617 | </dd></dl> |
| 594 | 618 | ||
| @@ -631,24 +655,24 @@ when the allocation point has insufficient space.</p> | |||
| 631 | </a></p> | 655 | </a></p> |
| 632 | <h3><a href="../index.html">Table Of Contents</a></h3> | 656 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 633 | <ul> | 657 | <ul> |
| 634 | <li><a class="reference internal" href="#">5. Allocation</a><ul> | 658 | <li><a class="reference internal" href="#">6. Allocation</a><ul> |
| 635 | <li><a class="reference internal" href="#manual-allocation">5.1. Manual allocation</a></li> | 659 | <li><a class="reference internal" href="#manual-allocation">6.1. Manual allocation</a></li> |
| 636 | <li><a class="reference internal" href="#allocation-points">5.2. Allocation points</a></li> | 660 | <li><a class="reference internal" href="#allocation-points">6.2. Allocation points</a></li> |
| 637 | <li><a class="reference internal" href="#allocation-point-protocol">5.3. Allocation point protocol</a></li> | 661 | <li><a class="reference internal" href="#allocation-point-protocol">6.3. Allocation point protocol</a></li> |
| 638 | <li><a class="reference internal" href="#example-allocating-a-symbol">5.4. Example: allocating a symbol</a></li> | 662 | <li><a class="reference internal" href="#example-allocating-a-symbol">6.4. Example: allocating a symbol</a></li> |
| 639 | <li><a class="reference internal" href="#cautions">5.5. Cautions</a></li> | 663 | <li><a class="reference internal" href="#cautions">6.5. Cautions</a></li> |
| 640 | <li><a class="reference internal" href="#example-inserting-into-a-doubly-linked-list">5.6. Example: inserting into a doubly linked list</a></li> | 664 | <li><a class="reference internal" href="#example-inserting-into-a-doubly-linked-list">6.6. Example: inserting into a doubly linked list</a></li> |
| 641 | <li><a class="reference internal" href="#allocation-point-implementation">5.7. Allocation point implementation</a></li> | 665 | <li><a class="reference internal" href="#allocation-point-implementation">6.7. Allocation point implementation</a></li> |
| 642 | </ul> | 666 | </ul> |
| 643 | </li> | 667 | </li> |
| 644 | </ul> | 668 | </ul> |
| 645 | 669 | ||
| 646 | <h4>Previous topic</h4> | 670 | <h4>Previous topic</h4> |
| 647 | <p class="topless"><a href="pool.html" | 671 | <p class="topless"><a href="pool.html" |
| 648 | title="previous chapter">4. Pools</a></p> | 672 | title="previous chapter">5. Pools</a></p> |
| 649 | <h4>Next topic</h4> | 673 | <h4>Next topic</h4> |
| 650 | <p class="topless"><a href="format.html" | 674 | <p class="topless"><a href="format.html" |
| 651 | title="next chapter">6. Object formats</a></p><h4>Downloads</h4> | 675 | title="next chapter">7. Object formats</a></p><h4>Downloads</h4> |
| 652 | 676 | ||
| 653 | <p class="topless"> | 677 | <p class="topless"> |
| 654 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 678 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -674,10 +698,10 @@ when the allocation point has insufficient space.</p> | |||
| 674 | <a href="../genindex.html" title="General Index" | 698 | <a href="../genindex.html" title="General Index" |
| 675 | >index</a></li> | 699 | >index</a></li> |
| 676 | <li class="right" > | 700 | <li class="right" > |
| 677 | <a href="format.html" title="6. Object formats" | 701 | <a href="format.html" title="7. Object formats" |
| 678 | >next</a> |</li> | 702 | >next</a> |</li> |
| 679 | <li class="right" > | 703 | <li class="right" > |
| 680 | <a href="pool.html" title="4. Pools" | 704 | <a href="pool.html" title="5. Pools" |
| 681 | >previous</a> |</li> | 705 | >previous</a> |</li> |
| 682 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 706 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 683 | <li><a href="index.html" >Reference</a> »</li> | 707 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/arena.html b/mps/manual/html/topic/arena.html index c2f30a67512..0acbf18e75f 100644 --- a/mps/manual/html/topic/arena.html +++ b/mps/manual/html/topic/arena.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>3. Arenas — Memory Pool System 1.111.0 documentation</title> | 11 | <title>4. Arenas — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="4. Pools" href="pool.html" /> | 31 | <link rel="next" title="5. Pools" href="pool.html" /> |
| 32 | <link rel="prev" title="2. Error handing" href="error.html" /> | 32 | <link rel="prev" title="3. Error handing" href="error.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="pool.html" title="4. Pools" | 42 | <a href="pool.html" title="5. Pools" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="error.html" title="2. Error handing" | 45 | <a href="error.html" title="3. Error handing" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,11 +55,11 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="arenas"> | 57 | <div class="section" id="arenas"> |
| 58 | <span id="topic-arena"></span><span id="index-0"></span><h1>3. Arenas<a class="headerlink" href="#arenas" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-arena"></span><span id="index-0"></span><h1>4. Arenas<a class="headerlink" href="#arenas" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>An arena is an object that encapsulates the state of the Memory Pool | 59 | <p>An arena is an object that encapsulates the state of the Memory Pool |
| 60 | System, and tells it where to get the memory it manages. You typically | 60 | System, and tells it where to get the memory it manages. You typically |
| 61 | start a session with the MPS by creating an arena with | 61 | start a session with the MPS by creating an arena with |
| 62 | <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> and end the session by destroying it with | 62 | <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> and end the session by destroying it with |
| 63 | <a class="reference internal" href="#mps_arena_destroy" title="mps_arena_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_destroy()</span></tt></a>. The only function you might need to call | 63 | <a class="reference internal" href="#mps_arena_destroy" title="mps_arena_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_destroy()</span></tt></a>. The only function you might need to call |
| 64 | before making an arena is <a class="reference internal" href="telemetry.html#mps_telemetry_control" title="mps_telemetry_control"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_control()</span></tt></a>.</p> | 64 | before making an arena is <a class="reference internal" href="telemetry.html#mps_telemetry_control" title="mps_telemetry_control"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_control()</span></tt></a>.</p> |
| 65 | <p>Before destroying an arena, you must first destroy all objects and | 65 | <p>Before destroying an arena, you must first destroy all objects and |
| @@ -110,32 +110,48 @@ and for <a class="reference internal" href="../glossary/g.html#term-garbage-coll | |||
| 110 | </dd></dl> | 110 | </dd></dl> |
| 111 | 111 | ||
| 112 | <dl class="function"> | 112 | <dl class="function"> |
| 113 | <dt id="mps_arena_create"> | 113 | <dt id="mps_arena_create_k"> |
| 114 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_arena_create</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> *arena_o</em>, <a class="reference internal" href="#mps_arena_class_t" title="mps_arena_class_t">mps_arena_class_t</a><em> arena_class</em>, ...<big>)</big><a class="headerlink" href="#mps_arena_create" title="Permalink to this definition">¶</a></dt> | 114 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_arena_create_k</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> *arena_o</em>, <a class="reference internal" href="#mps_arena_class_t" title="mps_arena_class_t">mps_arena_class_t</a><em> arena_class</em>, <a class="reference internal" href="keyword.html#mps_arg_s" title="mps_arg_s">mps_arg_s</a><em> args[]</em><big>)</big><a class="headerlink" href="#mps_arena_create_k" title="Permalink to this definition">¶</a></dt> |
| 115 | <dd><p>Create an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> | 115 | <dd><p>Create an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> |
| 116 | <p><tt class="docutils literal"><span class="pre">arena_o</span></tt> points to a location that will hold a pointer to the new | 116 | <p><tt class="docutils literal"><span class="pre">arena_o</span></tt> points to a location that will hold a pointer to the new |
| 117 | arena.</p> | 117 | arena.</p> |
| 118 | <p><tt class="docutils literal"><span class="pre">arena_class</span></tt> is the <a class="reference internal" href="../glossary/a.html#term-arena-class"><em class="xref std std-term">arena class</em></a>.</p> | 118 | <p><tt class="docutils literal"><span class="pre">arena_class</span></tt> is the <a class="reference internal" href="../glossary/a.html#term-arena-class"><em class="xref std std-term">arena class</em></a>.</p> |
| 119 | <p>Some arena classes require additional arguments to be passed to | 119 | <p><tt class="docutils literal"><span class="pre">args</span></tt> are <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a> specific to the arena |
| 120 | <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a>. See the documentation for the arena | 120 | class. See the documentation for the arena class.</p> |
| 121 | class.</p> | ||
| 122 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the arena is created | 121 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the arena is created |
| 123 | successfully, or another <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> otherwise.</p> | 122 | successfully, or another <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> otherwise.</p> |
| 124 | <p>The arena persists until it is destroyed by calling | 123 | <p>The arena persists until it is destroyed by calling |
| 125 | <a class="reference internal" href="#mps_arena_destroy" title="mps_arena_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_destroy()</span></tt></a>.</p> | 124 | <a class="reference internal" href="#mps_arena_destroy" title="mps_arena_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_destroy()</span></tt></a>.</p> |
| 126 | <div class="admonition-note admonition"> | 125 | </dd></dl> |
| 127 | <p class="first admonition-title">Note</p> | 126 | |
| 128 | <p class="last">There’s an alternative function <a class="reference internal" href="#mps_arena_create_v" title="mps_arena_create_v"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_v()</span></tt></a> | 127 | <dl class="function"> |
| 129 | that takes its extra arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> | 128 | <dt id="mps_arena_create"> |
| 130 | <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> | 129 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_arena_create</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> *arena_o</em>, <a class="reference internal" href="#mps_arena_class_t" title="mps_arena_class_t">mps_arena_class_t</a><em> arena_class</em>, ...<big>)</big><a class="headerlink" href="#mps_arena_create" title="Permalink to this definition">¶</a></dt> |
| 130 | <dd><div class="admonition-deprecated admonition"> | ||
| 131 | <p class="first admonition-title">Deprecated</p> | ||
| 132 | <p>starting with version 1.112.</p> | ||
| 133 | <p class="last">Use <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 134 | arguments</em></a> interface is more reliable and produces better | ||
| 135 | error messages.</p> | ||
| 131 | </div> | 136 | </div> |
| 137 | <p>An alternative to <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> that takes its | ||
| 138 | extra arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> variable argument | ||
| 139 | list mechanism.</p> | ||
| 132 | </dd></dl> | 140 | </dd></dl> |
| 133 | 141 | ||
| 134 | <dl class="function"> | 142 | <dl class="function"> |
| 135 | <dt id="mps_arena_create_v"> | 143 | <dt id="mps_arena_create_v"> |
| 136 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_arena_create_v</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> *arena_o</em>, <a class="reference internal" href="#mps_arena_class_t" title="mps_arena_class_t">mps_arena_class_t</a><em> arena_class</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_arena_create_v" title="Permalink to this definition">¶</a></dt> | 144 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_arena_create_v</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> *arena_o</em>, <a class="reference internal" href="#mps_arena_class_t" title="mps_arena_class_t">mps_arena_class_t</a><em> arena_class</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_arena_create_v" title="Permalink to this definition">¶</a></dt> |
| 137 | <dd><p>An alternative to <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> that takes its extra | 145 | <dd><div class="admonition-deprecated admonition"> |
| 138 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> | 146 | <p class="first admonition-title">Deprecated</p> |
| 147 | <p>starting with version 1.112.</p> | ||
| 148 | <p class="last">Use <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 149 | arguments</em></a> interface is more reliable and produces better | ||
| 150 | error messages.</p> | ||
| 151 | </div> | ||
| 152 | <p>An alternative to <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> that takes its | ||
| 153 | extra arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> | ||
| 154 | mechanism.</p> | ||
| 139 | </dd></dl> | 155 | </dd></dl> |
| 140 | 156 | ||
| 141 | <dl class="function"> | 157 | <dl class="function"> |
| @@ -154,7 +170,7 @@ and <a class="reference internal" href="../glossary/r.html#term-root"><em class= | |||
| 154 | </dd></dl> | 170 | </dd></dl> |
| 155 | 171 | ||
| 156 | <div class="section" id="client-arenas"> | 172 | <div class="section" id="client-arenas"> |
| 157 | <span id="topic-arena-client"></span><span id="index-2"></span><h2>3.1. Client arenas<a class="headerlink" href="#client-arenas" title="Permalink to this headline">¶</a></h2> | 173 | <span id="topic-arena-client"></span><span id="index-2"></span><h2>4.1. Client arenas<a class="headerlink" href="#client-arenas" title="Permalink to this headline">¶</a></h2> |
| 158 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include "mpsacl.h"</span> | 174 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include "mpsacl.h"</span> |
| 159 | </pre></div> | 175 | </pre></div> |
| 160 | </div> | 176 | </div> |
| @@ -164,18 +180,24 @@ and <a class="reference internal" href="../glossary/r.html#term-root"><em class= | |||
| 164 | <dd><p>Return the <a class="reference internal" href="../glossary/a.html#term-arena-class"><em class="xref std std-term">arena class</em></a> for a <a class="reference internal" href="../glossary/c.html#term-client-arena"><em class="xref std std-term">client arena</em></a>.</p> | 180 | <dd><p>Return the <a class="reference internal" href="../glossary/a.html#term-arena-class"><em class="xref std std-term">arena class</em></a> for a <a class="reference internal" href="../glossary/c.html#term-client-arena"><em class="xref std std-term">client arena</em></a>.</p> |
| 165 | <p>A client arena gets its managed memory from the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client | 181 | <p>A client arena gets its managed memory from the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client |
| 166 | program</em></a>. This memory chunk is passed when the arena is created.</p> | 182 | program</em></a>. This memory chunk is passed when the arena is created.</p> |
| 167 | <p>When creating a client arena, <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> takes two | 183 | <p>When creating a client arena, <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> requires two |
| 168 | extra arguments:</p> | 184 | <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a>:</p> |
| 169 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_arena_create</span><span class="p">(</span><span class="kt">mps_arena_t</span> <span class="o">*</span><span class="n">arena_o</span><span class="p">,</span> | 185 | <ul class="simple"> |
| 170 | <span class="kt">mps_arena_class_t</span> <span class="n">mps_arena_class_cl</span><span class="p">,</span> | 186 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_CL_ADDR</span></tt> (member <tt class="docutils literal"><span class="pre">.val.addr</span></tt>; type |
| 171 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> | 187 | <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_addr_t</span></tt></a>) is the <a class="reference internal" href="../glossary/a.html#term-address"><em class="xref std std-term">address</em></a> of the chunk of memory |
| 188 | that will be managed by the arena.</li> | ||
| 189 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type | ||
| 190 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>) is its size.</li> | ||
| 191 | </ul> | ||
| 192 | <p>For example (in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>):</p> | ||
| 193 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> | ||
| 194 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_ARENA_CL_ADDR</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">base</span><span class="p">},</span> | ||
| 195 | <span class="p">{</span><span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span><span class="p">},</span> | ||
| 196 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 172 | </pre></div> | 197 | </pre></div> |
| 173 | </div> | 198 | </div> |
| 174 | <p><tt class="docutils literal"><span class="pre">base</span></tt> is the <a class="reference internal" href="../glossary/a.html#term-address"><em class="xref std std-term">address</em></a> of the chunk of memory that will | ||
| 175 | be managed by the arena.</p> | ||
| 176 | <p><tt class="docutils literal"><span class="pre">size</span></tt> is its <a class="reference internal" href="../glossary/s.html#term-size"><em class="xref std std-term">size</em></a>.</p> | ||
| 177 | <p>If the chunk is too small to hold the internal arena structures, | 199 | <p>If the chunk is too small to hold the internal arena structures, |
| 178 | <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> returns <a class="reference internal" href="error.html#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>. In | 200 | <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> returns <a class="reference internal" href="error.html#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>. In |
| 179 | this case, you need to use a (much) larger chunk.</p> | 201 | this case, you need to use a (much) larger chunk.</p> |
| 180 | <div class="admonition-note admonition"> | 202 | <div class="admonition-note admonition"> |
| 181 | <p class="first admonition-title">Note</p> | 203 | <p class="first admonition-title">Note</p> |
| @@ -183,6 +205,17 @@ this case, you need to use a (much) larger chunk.</p> | |||
| 183 | call <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a> later on.</p> | 205 | call <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a> later on.</p> |
| 184 | <p class="last">Client arenas have no mechanism for returning unused memory.</p> | 206 | <p class="last">Client arenas have no mechanism for returning unused memory.</p> |
| 185 | </div> | 207 | </div> |
| 208 | <div class="admonition-deprecated admonition"> | ||
| 209 | <p class="first admonition-title">Deprecated</p> | ||
| 210 | <p>starting with version 1.112.</p> | ||
| 211 | <p>When using <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a>, pass the size and base | ||
| 212 | address like this:</p> | ||
| 213 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_arena_create</span><span class="p">(</span><span class="n">mps_arena_t</span> <span class="o">*</span><span class="n">arena_o</span><span class="p">,</span> | ||
| 214 | <span class="n">mps_arena_class_t</span> <span class="n">mps_arena_class_cl</span><span class="p">,</span> | ||
| 215 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">)</span> | ||
| 216 | </pre></div> | ||
| 217 | </div> | ||
| 218 | </div> | ||
| 186 | </dd></dl> | 219 | </dd></dl> |
| 187 | 220 | ||
| 188 | <dl class="function"> | 221 | <dl class="function"> |
| @@ -198,7 +231,7 @@ managed by the arena.</p> | |||
| 198 | 231 | ||
| 199 | </div> | 232 | </div> |
| 200 | <div class="section" id="virtual-memory-arenas"> | 233 | <div class="section" id="virtual-memory-arenas"> |
| 201 | <span id="topic-arena-vm"></span><span id="index-3"></span><h2>3.2. Virtual memory arenas<a class="headerlink" href="#virtual-memory-arenas" title="Permalink to this headline">¶</a></h2> | 234 | <span id="topic-arena-vm"></span><span id="index-3"></span><h2>4.2. Virtual memory arenas<a class="headerlink" href="#virtual-memory-arenas" title="Permalink to this headline">¶</a></h2> |
| 202 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include "mpsavm.h"</span> | 235 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include "mpsavm.h"</span> |
| 203 | </pre></div> | 236 | </pre></div> |
| 204 | </div> | 237 | </div> |
| @@ -213,11 +246,16 @@ it needs to commit memory to. This gives it flexibility as to | |||
| 213 | where to place <a class="reference internal" href="../glossary/b.html#term-block"><em class="xref std std-term">blocks</em></a>, which reduces | 246 | where to place <a class="reference internal" href="../glossary/b.html#term-block"><em class="xref std std-term">blocks</em></a>, which reduces |
| 214 | <a class="reference internal" href="../glossary/f.html#term-fragmentation"><em class="xref std std-term">fragmentation</em></a> and helps make <a class="reference internal" href="../glossary/g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a> | 247 | <a class="reference internal" href="../glossary/f.html#term-fragmentation"><em class="xref std std-term">fragmentation</em></a> and helps make <a class="reference internal" href="../glossary/g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a> |
| 215 | more efficient.</p> | 248 | more efficient.</p> |
| 216 | <p>When creating a virtual memory arena, <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> | 249 | <p>When creating a virtual memory arena, <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> |
| 217 | takes one extra argument:</p> | 250 | requires one <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a>:</p> |
| 218 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="n">mps_arena_create</span><span class="p">(</span><span class="kt">mps_arena_t</span> <span class="o">*</span><span class="n">arena_o</span><span class="p">,</span> | 251 | <ul class="simple"> |
| 219 | <span class="kt">mps_arena_class_t</span> <span class="n">arena_class_vm</span><span class="p">(),</span> | 252 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_SIZE</span></tt> (member <tt class="docutils literal"><span class="pre">.val.size</span></tt>; type |
| 220 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span> | 253 | <tt class="xref c c-type docutils literal"><span class="pre">size_t</span></tt>).</li> |
| 254 | </ul> | ||
| 255 | <p>For example (in <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>):</p> | ||
| 256 | <div class="highlight-c"><div class="highlight"><pre><span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> | ||
| 257 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span><span class="p">},</span> | ||
| 258 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 221 | </pre></div> | 259 | </pre></div> |
| 222 | </div> | 260 | </div> |
| 223 | <p><tt class="docutils literal"><span class="pre">size</span></tt> is the initial amount of virtual address space, in | 261 | <p><tt class="docutils literal"><span class="pre">size</span></tt> is the initial amount of virtual address space, in |
| @@ -235,19 +273,43 @@ several times larger than your peak memory usage.</p> | |||
| 235 | more times it has to extend its address space, the less | 273 | more times it has to extend its address space, the less |
| 236 | efficient garbage collection will become.</p> | 274 | efficient garbage collection will become.</p> |
| 237 | </div> | 275 | </div> |
| 276 | <p>An optional <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a> may be passed, but is | ||
| 277 | only used on the Windows operating system:</p> | ||
| 278 | <ul class="simple"> | ||
| 279 | <li><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_VMW3_TOP_DOWN</span></tt> (member <tt class="docutils literal"><span class="pre">.val.b</span></tt>; type | ||
| 280 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_bool_t</span></tt></a>).</li> | ||
| 281 | </ul> | ||
| 282 | <p>If true, the arena will allocate address space starting at the | ||
| 283 | highest possible address and working downwards through memory.</p> | ||
| 284 | <div class="admonition-note admonition"> | ||
| 285 | <p class="first admonition-title">Note</p> | ||
| 286 | <p class="last">This causes the arena to pass the <tt class="docutils literal"><span class="pre">MEM_TOP_DOWN</span></tt> flag to | ||
| 287 | <a class="reference external" href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx">VirtualAlloc</a>.</p> | ||
| 288 | </div> | ||
| 238 | <p>If the MPS fails to reserve adequate address space to place the | 289 | <p>If the MPS fails to reserve adequate address space to place the |
| 239 | arena in, <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> returns | 290 | arena in, <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> returns |
| 240 | <a class="reference internal" href="error.html#MPS_RES_RESOURCE" title="MPS_RES_RESOURCE"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_RESOURCE</span></tt></a>. Possibly this means that other parts | 291 | <a class="reference internal" href="error.html#MPS_RES_RESOURCE" title="MPS_RES_RESOURCE"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_RESOURCE</span></tt></a>. Possibly this means that other parts |
| 241 | of the program are reserving too much virtual memory.</p> | 292 | of the program are reserving too much virtual memory.</p> |
| 242 | <p>If the MPS fails to allocate memory for the internal arena | 293 | <p>If the MPS fails to allocate memory for the internal arena |
| 243 | structures, <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> returns | 294 | structures, <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> returns |
| 244 | <a class="reference internal" href="error.html#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>. Either <tt class="docutils literal"><span class="pre">size</span></tt> was far too small or | 295 | <a class="reference internal" href="error.html#MPS_RES_MEMORY" title="MPS_RES_MEMORY"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_MEMORY</span></tt></a>. Either <tt class="docutils literal"><span class="pre">size</span></tt> was far too small or |
| 245 | the operating system refused to provide enough memory.</p> | 296 | the operating system refused to provide enough memory.</p> |
| 297 | <div class="admonition-deprecated admonition"> | ||
| 298 | <p class="first admonition-title">Deprecated</p> | ||
| 299 | <p>starting with version 1.112.</p> | ||
| 300 | <p>When using <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a>, pass the size like | ||
| 301 | this:</p> | ||
| 302 | <div class="last highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">mps_arena_create</span><span class="p">(</span><span class="n">mps_arena_t</span> <span class="o">*</span><span class="n">arena_o</span><span class="p">,</span> | ||
| 303 | <span class="n">mps_arena_class_t</span> <span class="n">arena_class_vm</span><span class="p">(),</span> | ||
| 304 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">)</span> | ||
| 305 | </pre></div> | ||
| 306 | </div> | ||
| 307 | </div> | ||
| 246 | </dd></dl> | 308 | </dd></dl> |
| 247 | 309 | ||
| 248 | </div> | 310 | </div> |
| 249 | <div class="section" id="arena-properties"> | 311 | <div class="section" id="arena-properties"> |
| 250 | <span id="index-4"></span><h2>3.3. Arena properties<a class="headerlink" href="#arena-properties" title="Permalink to this headline">¶</a></h2> | 312 | <span id="index-4"></span><h2>4.3. Arena properties<a class="headerlink" href="#arena-properties" title="Permalink to this headline">¶</a></h2> |
| 251 | <dl class="function"> | 313 | <dl class="function"> |
| 252 | <dt id="mps_collections"> | 314 | <dt id="mps_collections"> |
| 253 | <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a> <tt class="descname">mps_collections</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em><big>)</big><a class="headerlink" href="#mps_collections" title="Permalink to this definition">¶</a></dt> | 315 | <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a> <tt class="descname">mps_collections</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em><big>)</big><a class="headerlink" href="#mps_collections" title="Permalink to this definition">¶</a></dt> |
| @@ -349,15 +411,16 @@ size_t <tt class="descname">mps_arena_reserved</tt><big>(</big><a class="referen | |||
| 349 | reserved via the operating system’s virtual memory interface.</p> | 411 | reserved via the operating system’s virtual memory interface.</p> |
| 350 | <p>For a <a class="reference internal" href="../glossary/c.html#term-client-arena"><em class="xref std std-term">client arena</em></a>, this is the sum of the usable portions | 412 | <p>For a <a class="reference internal" href="../glossary/c.html#term-client-arena"><em class="xref std std-term">client arena</em></a>, this is the sum of the usable portions |
| 351 | of the chunks of memory passed to the arena by the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client | 413 | of the chunks of memory passed to the arena by the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client |
| 352 | program</em></a> via <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> and | 414 | program</em></a> via <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> and |
| 353 | <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a>.</p> | 415 | <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a>.</p> |
| 354 | <div class="admonition-note admonition"> | 416 | <div class="admonition-note admonition"> |
| 355 | <p class="first admonition-title">Note</p> | 417 | <p class="first admonition-title">Note</p> |
| 356 | <p class="last">For a client arena, the reserved address may be lower than the | 418 | <p class="last">For a client arena, the reserved address may be lower than the |
| 357 | sum of the <tt class="docutils literal"><span class="pre">size</span></tt> arguments passed to | 419 | sum of the <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_SIZE</span></tt> keyword argument |
| 358 | <a class="reference internal" href="#mps_arena_create" title="mps_arena_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create()</span></tt></a> and <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a>, | 420 | passed to <a class="reference internal" href="#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> and the <tt class="docutils literal"><span class="pre">size</span></tt> |
| 359 | because the arena may be unable to use the whole of each chunk | 421 | arguments passed to <a class="reference internal" href="#mps_arena_extend" title="mps_arena_extend"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_extend()</span></tt></a>, because the |
| 360 | for reasons of alignment.</p> | 422 | arena may be unable to use the whole of each chunk for reasons |
| 423 | of alignment.</p> | ||
| 361 | </div> | 424 | </div> |
| 362 | </dd></dl> | 425 | </dd></dl> |
| 363 | 426 | ||
| @@ -418,7 +481,7 @@ memory.</p> | |||
| 418 | 481 | ||
| 419 | </div> | 482 | </div> |
| 420 | <div class="section" id="arena-states"> | 483 | <div class="section" id="arena-states"> |
| 421 | <span id="index-5"></span><h2>3.4. Arena states<a class="headerlink" href="#arena-states" title="Permalink to this headline">¶</a></h2> | 484 | <span id="index-5"></span><h2>4.4. Arena states<a class="headerlink" href="#arena-states" title="Permalink to this headline">¶</a></h2> |
| 422 | <p>An arena is always in one of three states.</p> | 485 | <p>An arena is always in one of three states.</p> |
| 423 | <ol class="arabic"> | 486 | <ol class="arabic"> |
| 424 | <li><p id="index-6">In the <em>unclamped state</em>, garbage collection may take place, | 487 | <li><p id="index-6">In the <em>unclamped state</em>, garbage collection may take place, |
| @@ -496,7 +559,7 @@ motion, and other background activity can take place.</p> | |||
| 496 | 559 | ||
| 497 | </div> | 560 | </div> |
| 498 | <div class="section" id="running-garbage-collections"> | 561 | <div class="section" id="running-garbage-collections"> |
| 499 | <span id="index-9"></span><h2>3.5. Running garbage collections<a class="headerlink" href="#running-garbage-collections" title="Permalink to this headline">¶</a></h2> | 562 | <span id="index-9"></span><h2>4.5. Running garbage collections<a class="headerlink" href="#running-garbage-collections" title="Permalink to this headline">¶</a></h2> |
| 500 | <p>The Memory Pool System’s garbage collector runs <a class="reference internal" href="../glossary/a.html#term-asynchronous-garbage-collector"><em class="xref std std-term">asynchronously</em></a> and <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incrementally</em></a>. This means that it is not normally | 563 | <p>The Memory Pool System’s garbage collector runs <a class="reference internal" href="../glossary/a.html#term-asynchronous-garbage-collector"><em class="xref std std-term">asynchronously</em></a> and <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incrementally</em></a>. This means that it is not normally |
| 501 | necessary to tell it when to start garbage collections, or to wait | 564 | necessary to tell it when to start garbage collections, or to wait |
| 502 | until it has finished collecting. (But if your program has idle time | 565 | until it has finished collecting. (But if your program has idle time |
| @@ -550,7 +613,7 @@ return until the collection has completed.</p> | |||
| 550 | 613 | ||
| 551 | </div> | 614 | </div> |
| 552 | <div class="section" id="using-idle-time-for-collection"> | 615 | <div class="section" id="using-idle-time-for-collection"> |
| 553 | <span id="topic-arena-idle"></span><span id="index-10"></span><h2>3.6. Using idle time for collection<a class="headerlink" href="#using-idle-time-for-collection" title="Permalink to this headline">¶</a></h2> | 616 | <span id="topic-arena-idle"></span><span id="index-10"></span><h2>4.6. Using idle time for collection<a class="headerlink" href="#using-idle-time-for-collection" title="Permalink to this headline">¶</a></h2> |
| 554 | <p>Some types of program have “idle time” in which they are waiting for | 617 | <p>Some types of program have “idle time” in which they are waiting for |
| 555 | an external event such as user input or network activity. The MPS | 618 | an external event such as user input or network activity. The MPS |
| 556 | provides a function, <a class="reference internal" href="#mps_arena_step" title="mps_arena_step"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_step()</span></tt></a>, for making use of idle | 619 | provides a function, <a class="reference internal" href="#mps_arena_step" title="mps_arena_step"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_step()</span></tt></a>, for making use of idle |
| @@ -620,7 +683,7 @@ state</em></a>, it remains there.</p> | |||
| 620 | 683 | ||
| 621 | </div> | 684 | </div> |
| 622 | <div class="section" id="arena-introspection"> | 685 | <div class="section" id="arena-introspection"> |
| 623 | <span id="index-11"></span><h2>3.7. Arena introspection<a class="headerlink" href="#arena-introspection" title="Permalink to this headline">¶</a></h2> | 686 | <span id="index-11"></span><h2>4.7. Arena introspection<a class="headerlink" href="#arena-introspection" title="Permalink to this headline">¶</a></h2> |
| 624 | <div class="admonition-note admonition"> | 687 | <div class="admonition-note admonition"> |
| 625 | <p class="first admonition-title">Note</p> | 688 | <p class="first admonition-title">Note</p> |
| 626 | <p>Introspection functions covered in other chapters are:</p> | 689 | <p>Introspection functions covered in other chapters are:</p> |
| @@ -664,7 +727,7 @@ in the <a class="reference internal" href="../glossary/p.html#term-parked-state" | |||
| 664 | 727 | ||
| 665 | </div> | 728 | </div> |
| 666 | <div class="section" id="protection-interface"> | 729 | <div class="section" id="protection-interface"> |
| 667 | <span id="index-12"></span><h2>3.8. Protection interface<a class="headerlink" href="#protection-interface" title="Permalink to this headline">¶</a></h2> | 730 | <span id="index-12"></span><h2>4.8. Protection interface<a class="headerlink" href="#protection-interface" title="Permalink to this headline">¶</a></h2> |
| 668 | <dl class="function"> | 731 | <dl class="function"> |
| 669 | <dt id="mps_arena_expose"> | 732 | <dt id="mps_arena_expose"> |
| 670 | void <tt class="descname">mps_arena_expose</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em><big>)</big><a class="headerlink" href="#mps_arena_expose" title="Permalink to this definition">¶</a></dt> | 733 | void <tt class="descname">mps_arena_expose</tt><big>(</big><a class="reference internal" href="#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em><big>)</big><a class="headerlink" href="#mps_arena_expose" title="Permalink to this definition">¶</a></dt> |
| @@ -776,25 +839,25 @@ cannot be restored more than once.</p> | |||
| 776 | </a></p> | 839 | </a></p> |
| 777 | <h3><a href="../index.html">Table Of Contents</a></h3> | 840 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 778 | <ul> | 841 | <ul> |
| 779 | <li><a class="reference internal" href="#">3. Arenas</a><ul> | 842 | <li><a class="reference internal" href="#">4. Arenas</a><ul> |
| 780 | <li><a class="reference internal" href="#client-arenas">3.1. Client arenas</a></li> | 843 | <li><a class="reference internal" href="#client-arenas">4.1. Client arenas</a></li> |
| 781 | <li><a class="reference internal" href="#virtual-memory-arenas">3.2. Virtual memory arenas</a></li> | 844 | <li><a class="reference internal" href="#virtual-memory-arenas">4.2. Virtual memory arenas</a></li> |
| 782 | <li><a class="reference internal" href="#arena-properties">3.3. Arena properties</a></li> | 845 | <li><a class="reference internal" href="#arena-properties">4.3. Arena properties</a></li> |
| 783 | <li><a class="reference internal" href="#arena-states">3.4. Arena states</a></li> | 846 | <li><a class="reference internal" href="#arena-states">4.4. Arena states</a></li> |
| 784 | <li><a class="reference internal" href="#running-garbage-collections">3.5. Running garbage collections</a></li> | 847 | <li><a class="reference internal" href="#running-garbage-collections">4.5. Running garbage collections</a></li> |
| 785 | <li><a class="reference internal" href="#using-idle-time-for-collection">3.6. Using idle time for collection</a></li> | 848 | <li><a class="reference internal" href="#using-idle-time-for-collection">4.6. Using idle time for collection</a></li> |
| 786 | <li><a class="reference internal" href="#arena-introspection">3.7. Arena introspection</a></li> | 849 | <li><a class="reference internal" href="#arena-introspection">4.7. Arena introspection</a></li> |
| 787 | <li><a class="reference internal" href="#protection-interface">3.8. Protection interface</a></li> | 850 | <li><a class="reference internal" href="#protection-interface">4.8. Protection interface</a></li> |
| 788 | </ul> | 851 | </ul> |
| 789 | </li> | 852 | </li> |
| 790 | </ul> | 853 | </ul> |
| 791 | 854 | ||
| 792 | <h4>Previous topic</h4> | 855 | <h4>Previous topic</h4> |
| 793 | <p class="topless"><a href="error.html" | 856 | <p class="topless"><a href="error.html" |
| 794 | title="previous chapter">2. Error handing</a></p> | 857 | title="previous chapter">3. Error handing</a></p> |
| 795 | <h4>Next topic</h4> | 858 | <h4>Next topic</h4> |
| 796 | <p class="topless"><a href="pool.html" | 859 | <p class="topless"><a href="pool.html" |
| 797 | title="next chapter">4. Pools</a></p><h4>Downloads</h4> | 860 | title="next chapter">5. Pools</a></p><h4>Downloads</h4> |
| 798 | 861 | ||
| 799 | <p class="topless"> | 862 | <p class="topless"> |
| 800 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 863 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -820,10 +883,10 @@ cannot be restored more than once.</p> | |||
| 820 | <a href="../genindex.html" title="General Index" | 883 | <a href="../genindex.html" title="General Index" |
| 821 | >index</a></li> | 884 | >index</a></li> |
| 822 | <li class="right" > | 885 | <li class="right" > |
| 823 | <a href="pool.html" title="4. Pools" | 886 | <a href="pool.html" title="5. Pools" |
| 824 | >next</a> |</li> | 887 | >next</a> |</li> |
| 825 | <li class="right" > | 888 | <li class="right" > |
| 826 | <a href="error.html" title="2. Error handing" | 889 | <a href="error.html" title="3. Error handing" |
| 827 | >previous</a> |</li> | 890 | >previous</a> |</li> |
| 828 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 891 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 829 | <li><a href="index.html" >Reference</a> »</li> | 892 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/cache.html b/mps/manual/html/topic/cache.html index 6ae1ee1f59d..950113af945 100644 --- a/mps/manual/html/topic/cache.html +++ b/mps/manual/html/topic/cache.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>14. Segregated allocation caches — Memory Pool System 1.111.0 documentation</title> | 11 | <title>15. Segregated allocation caches — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="15. Allocation patterns" href="pattern.html" /> | 31 | <link rel="next" title="16. Allocation patterns" href="pattern.html" /> |
| 32 | <link rel="prev" title="13. Location dependency" href="location.html" /> | 32 | <link rel="prev" title="14. Location dependency" href="location.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="pattern.html" title="15. Allocation patterns" | 42 | <a href="pattern.html" title="16. Allocation patterns" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="location.html" title="13. Location dependency" | 45 | <a href="location.html" title="14. Location dependency" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="segregated-allocation-caches"> | 57 | <div class="section" id="segregated-allocation-caches"> |
| 58 | <span id="topic-cache"></span><span id="index-0"></span><h1>14. Segregated allocation caches<a class="headerlink" href="#segregated-allocation-caches" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-cache"></span><span id="index-0"></span><h1>15. Segregated allocation caches<a class="headerlink" href="#segregated-allocation-caches" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>A <em class="dfn">segregated allocation cache</em> is a data structure that can be | 59 | <p>A <em class="dfn">segregated allocation cache</em> is a data structure that can be |
| 60 | attached to any <a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manually managed</em></a> | 60 | attached to any <a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manually managed</em></a> |
| 61 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>, that maintains a <a class="reference internal" href="../glossary/s.html#term-segregated-free-list"><em class="xref std std-term">segregated free list</em></a>, that is, | 61 | <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a>, that maintains a <a class="reference internal" href="../glossary/s.html#term-segregated-free-list"><em class="xref std std-term">segregated free list</em></a>, that is, |
| @@ -70,7 +70,7 @@ small number of relatively long-lived 128-byte objects, and a large | |||
| 70 | number of relatively short-lived 8-byte objects, we might create a | 70 | number of relatively short-lived 8-byte objects, we might create a |
| 71 | cache as follows:</p> | 71 | cache as follows:</p> |
| 72 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_sac_class_s</span> <span class="n">classes</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{{</span><span class="mi">8</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">10</span><span class="p">},</span> <span class="p">{</span><span class="mi">128</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">1</span><span class="p">}};</span> | 72 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_sac_class_s</span> <span class="n">classes</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">{{</span><span class="mi">8</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">10</span><span class="p">},</span> <span class="p">{</span><span class="mi">128</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">1</span><span class="p">}};</span> |
| 73 | <span class="kt">mps_sac_t</span> <span class="n">sac</span><span class="p">;</span> | 73 | <span class="n">mps_sac_t</span> <span class="n">sac</span><span class="p">;</span> |
| 74 | 74 | ||
| 75 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_sac_create</span><span class="p">(</span><span class="o">&</span><span class="n">sac</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span> <span class="n">classes</span> <span class="o">/</span> <span class="k">sizeof</span> <span class="n">classes</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">classes</span><span class="p">);</span> | 75 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_sac_create</span><span class="p">(</span><span class="o">&</span><span class="n">sac</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span> <span class="n">classes</span> <span class="o">/</span> <span class="k">sizeof</span> <span class="n">classes</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">classes</span><span class="p">);</span> |
| 76 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> | 76 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> |
| @@ -83,8 +83,8 @@ otherwise from the pool. Similarly, deallocations through the cache | |||
| 83 | (using <a class="reference internal" href="#mps_sac_free" title="mps_sac_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_sac_free()</span></tt></a> or <a class="reference internal" href="#MPS_SAC_FREE_FAST" title="MPS_SAC_FREE_FAST"><tt class="xref c c-func docutils literal"><span class="pre">MPS_SAC_FREE_FAST()</span></tt></a>) return | 83 | (using <a class="reference internal" href="#mps_sac_free" title="mps_sac_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_sac_free()</span></tt></a> or <a class="reference internal" href="#MPS_SAC_FREE_FAST" title="MPS_SAC_FREE_FAST"><tt class="xref c c-func docutils literal"><span class="pre">MPS_SAC_FREE_FAST()</span></tt></a>) return |
| 84 | the block to the appopriate free list for its size. For example:</p> | 84 | the block to the appopriate free list for its size. For example:</p> |
| 85 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Foo</span> <span class="o">*</span><span class="n">foo</span><span class="p">;</span> | 85 | <div class="highlight-c"><div class="highlight"><pre><span class="n">Foo</span> <span class="o">*</span><span class="n">foo</span><span class="p">;</span> |
| 86 | <span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 86 | <span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 87 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 87 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 88 | 88 | ||
| 89 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_sac_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">sac</span><span class="p">,</span> <span class="k">sizeof</span> <span class="o">*</span><span class="n">foo</span><span class="p">,</span> <span class="nb">false</span><span class="p">);</span> | 89 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_sac_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">sac</span><span class="p">,</span> <span class="k">sizeof</span> <span class="o">*</span><span class="n">foo</span><span class="p">,</span> <span class="nb">false</span><span class="p">);</span> |
| 90 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> | 90 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> |
| @@ -121,7 +121,7 @@ classes: the debugging checks only happen when blocks are moved | |||
| 121 | between the cache and the pool.</p> | 121 | between the cache and the pool.</p> |
| 122 | </div> | 122 | </div> |
| 123 | <div class="section" id="cache-interface"> | 123 | <div class="section" id="cache-interface"> |
| 124 | <span id="index-1"></span><h2>14.1. Cache interface<a class="headerlink" href="#cache-interface" title="Permalink to this headline">¶</a></h2> | 124 | <span id="index-1"></span><h2>15.1. Cache interface<a class="headerlink" href="#cache-interface" title="Permalink to this headline">¶</a></h2> |
| 125 | <dl class="type"> | 125 | <dl class="type"> |
| 126 | <dt id="mps_sac_t"> | 126 | <dt id="mps_sac_t"> |
| 127 | <tt class="descname">mps_sac_t</tt><a class="headerlink" href="#mps_sac_t" title="Permalink to this definition">¶</a></dt> | 127 | <tt class="descname">mps_sac_t</tt><a class="headerlink" href="#mps_sac_t" title="Permalink to this definition">¶</a></dt> |
| @@ -271,7 +271,7 @@ pool.</p> | |||
| 271 | 271 | ||
| 272 | </div> | 272 | </div> |
| 273 | <div class="section" id="allocation-interface"> | 273 | <div class="section" id="allocation-interface"> |
| 274 | <span id="index-2"></span><h2>14.2. Allocation interface<a class="headerlink" href="#allocation-interface" title="Permalink to this headline">¶</a></h2> | 274 | <span id="index-2"></span><h2>15.2. Allocation interface<a class="headerlink" href="#allocation-interface" title="Permalink to this headline">¶</a></h2> |
| 275 | <dl class="function"> | 275 | <dl class="function"> |
| 276 | <dt id="mps_sac_alloc"> | 276 | <dt id="mps_sac_alloc"> |
| 277 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_sac_alloc</tt><big>(</big><a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> *p_o</em>, <a class="reference internal" href="#mps_sac_t" title="mps_sac_t">mps_sac_t</a><em> sac</em>, size_t<em> size</em>, <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a><em> has_reservoir_permit</em><big>)</big><a class="headerlink" href="#mps_sac_alloc" title="Permalink to this definition">¶</a></dt> | 277 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_sac_alloc</tt><big>(</big><a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> *p_o</em>, <a class="reference internal" href="#mps_sac_t" title="mps_sac_t">mps_sac_t</a><em> sac</em>, size_t<em> size</em>, <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a><em> has_reservoir_permit</em><big>)</big><a class="headerlink" href="#mps_sac_alloc" title="Permalink to this definition">¶</a></dt> |
| @@ -400,19 +400,19 @@ the function.</p> | |||
| 400 | </a></p> | 400 | </a></p> |
| 401 | <h3><a href="../index.html">Table Of Contents</a></h3> | 401 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 402 | <ul> | 402 | <ul> |
| 403 | <li><a class="reference internal" href="#">14. Segregated allocation caches</a><ul> | 403 | <li><a class="reference internal" href="#">15. Segregated allocation caches</a><ul> |
| 404 | <li><a class="reference internal" href="#cache-interface">14.1. Cache interface</a></li> | 404 | <li><a class="reference internal" href="#cache-interface">15.1. Cache interface</a></li> |
| 405 | <li><a class="reference internal" href="#allocation-interface">14.2. Allocation interface</a></li> | 405 | <li><a class="reference internal" href="#allocation-interface">15.2. Allocation interface</a></li> |
| 406 | </ul> | 406 | </ul> |
| 407 | </li> | 407 | </li> |
| 408 | </ul> | 408 | </ul> |
| 409 | 409 | ||
| 410 | <h4>Previous topic</h4> | 410 | <h4>Previous topic</h4> |
| 411 | <p class="topless"><a href="location.html" | 411 | <p class="topless"><a href="location.html" |
| 412 | title="previous chapter">13. Location dependency</a></p> | 412 | title="previous chapter">14. Location dependency</a></p> |
| 413 | <h4>Next topic</h4> | 413 | <h4>Next topic</h4> |
| 414 | <p class="topless"><a href="pattern.html" | 414 | <p class="topless"><a href="pattern.html" |
| 415 | title="next chapter">15. Allocation patterns</a></p><h4>Downloads</h4> | 415 | title="next chapter">16. Allocation patterns</a></p><h4>Downloads</h4> |
| 416 | 416 | ||
| 417 | <p class="topless"> | 417 | <p class="topless"> |
| 418 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 418 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -438,10 +438,10 @@ the function.</p> | |||
| 438 | <a href="../genindex.html" title="General Index" | 438 | <a href="../genindex.html" title="General Index" |
| 439 | >index</a></li> | 439 | >index</a></li> |
| 440 | <li class="right" > | 440 | <li class="right" > |
| 441 | <a href="pattern.html" title="15. Allocation patterns" | 441 | <a href="pattern.html" title="16. Allocation patterns" |
| 442 | >next</a> |</li> | 442 | >next</a> |</li> |
| 443 | <li class="right" > | 443 | <li class="right" > |
| 444 | <a href="location.html" title="13. Location dependency" | 444 | <a href="location.html" title="14. Location dependency" |
| 445 | >previous</a> |</li> | 445 | >previous</a> |</li> |
| 446 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 446 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 447 | <li><a href="index.html" >Reference</a> »</li> | 447 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/collection.html b/mps/manual/html/topic/collection.html index a2f7d9d3a02..202c1cfc462 100644 --- a/mps/manual/html/topic/collection.html +++ b/mps/manual/html/topic/collection.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>10. Garbage collection — Memory Pool System 1.111.0 documentation</title> | 11 | <title>11. Garbage collection — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="11. Messages" href="message.html" /> | 31 | <link rel="next" title="12. Messages" href="message.html" /> |
| 32 | <link rel="prev" title="9. Roots" href="root.html" /> | 32 | <link rel="prev" title="10. Roots" href="root.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="message.html" title="11. Messages" | 42 | <a href="message.html" title="12. Messages" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="root.html" title="9. Roots" | 45 | <a href="root.html" title="10. Roots" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,9 +55,9 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="garbage-collection"> | 57 | <div class="section" id="garbage-collection"> |
| 58 | <span id="topic-collection"></span><span id="index-0"></span><h1>10. Garbage collection<a class="headerlink" href="#garbage-collection" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-collection"></span><span id="index-0"></span><h1>11. Garbage collection<a class="headerlink" href="#garbage-collection" title="Permalink to this headline">¶</a></h1> |
| 59 | <div class="section" id="generation-chains"> | 59 | <div class="section" id="generation-chains"> |
| 60 | <span id="index-1"></span><h2>10.1. Generation chains<a class="headerlink" href="#generation-chains" title="Permalink to this headline">¶</a></h2> | 60 | <span id="index-1"></span><h2>11.1. Generation chains<a class="headerlink" href="#generation-chains" title="Permalink to this headline">¶</a></h2> |
| 61 | <p>A <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> describes the structure of the | 61 | <p>A <a class="reference internal" href="../glossary/g.html#term-generation-chain"><em class="xref std std-term">generation chain</em></a> describes the structure of the |
| 62 | <a class="reference internal" href="../glossary/g.html#term-generation"><em class="xref std std-term">generations</em></a> in a set of <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically managed</em></a> <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pools</em></a>. The same generation | 62 | <a class="reference internal" href="../glossary/g.html#term-generation"><em class="xref std std-term">generations</em></a> in a set of <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically managed</em></a> <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pools</em></a>. The same generation |
| 63 | chain should be used for all pools whose blocks live and die together.</p> | 63 | chain should be used for all pools whose blocks live and die together.</p> |
| @@ -74,8 +74,8 @@ prepared to start collecting the generation. See | |||
| 74 | <span class="p">{</span> <span class="mi">2048</span><span class="p">,</span> <span class="mf">0.4</span> <span class="p">},</span> | 74 | <span class="p">{</span> <span class="mi">2048</span><span class="p">,</span> <span class="mf">0.4</span> <span class="p">},</span> |
| 75 | <span class="p">};</span> | 75 | <span class="p">};</span> |
| 76 | 76 | ||
| 77 | <span class="kt">mps_chain_t</span> <span class="n">chain</span><span class="p">;</span> | 77 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">;</span> |
| 78 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 78 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 79 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_chain_create</span><span class="p">(</span><span class="o">&</span><span class="n">chain</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> | 79 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_chain_create</span><span class="p">(</span><span class="o">&</span><span class="n">chain</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> |
| 80 | <span class="k">sizeof</span><span class="p">(</span><span class="n">gen_params</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">gen_params</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> | 80 | <span class="k">sizeof</span><span class="p">(</span><span class="n">gen_params</span><span class="p">)</span> <span class="o">/</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">gen_params</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> |
| 81 | <span class="n">gen_params</span><span class="p">);</span> | 81 | <span class="n">gen_params</span><span class="p">);</span> |
| @@ -139,7 +139,7 @@ void <tt class="descname">mps_chain_destroy</tt><big>(</big><a class="reference | |||
| 139 | 139 | ||
| 140 | </div> | 140 | </div> |
| 141 | <div class="section" id="scheduling-of-collections"> | 141 | <div class="section" id="scheduling-of-collections"> |
| 142 | <span id="topic-collection-schedule"></span><span id="index-2"></span><h2>10.2. Scheduling of collections<a class="headerlink" href="#scheduling-of-collections" title="Permalink to this headline">¶</a></h2> | 142 | <span id="topic-collection-schedule"></span><span id="index-2"></span><h2>11.2. Scheduling of collections<a class="headerlink" href="#scheduling-of-collections" title="Permalink to this headline">¶</a></h2> |
| 143 | <div class="admonition-note admonition"> | 143 | <div class="admonition-note admonition"> |
| 144 | <p class="first admonition-title">Note</p> | 144 | <p class="first admonition-title">Note</p> |
| 145 | <p class="last">It’s likely that the algorithm the MPS uses to schedule its | 145 | <p class="last">It’s likely that the algorithm the MPS uses to schedule its |
| @@ -193,7 +193,7 @@ predicted mortality is too low, the collector will take larger time | |||
| 193 | slices up front and then find that it is idle later on.</p> | 193 | slices up front and then find that it is idle later on.</p> |
| 194 | </div> | 194 | </div> |
| 195 | <div class="section" id="garbage-collection-start-messages"> | 195 | <div class="section" id="garbage-collection-start-messages"> |
| 196 | <span id="index-3"></span><h2>10.3. Garbage collection start messages<a class="headerlink" href="#garbage-collection-start-messages" title="Permalink to this headline">¶</a></h2> | 196 | <span id="index-3"></span><h2>11.3. Garbage collection start messages<a class="headerlink" href="#garbage-collection-start-messages" title="Permalink to this headline">¶</a></h2> |
| 197 | <dl class="function"> | 197 | <dl class="function"> |
| 198 | <dt id="mps_message_type_gc_start"> | 198 | <dt id="mps_message_type_gc_start"> |
| 199 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_gc_start</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_gc_start" title="Permalink to this definition">¶</a></dt> | 199 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_gc_start</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_gc_start" title="Permalink to this definition">¶</a></dt> |
| @@ -234,7 +234,7 @@ the message is discarded with <a class="reference internal" href="message.html#m | |||
| 234 | 234 | ||
| 235 | </div> | 235 | </div> |
| 236 | <div class="section" id="garbage-collection-messages"> | 236 | <div class="section" id="garbage-collection-messages"> |
| 237 | <span id="index-4"></span><h2>10.4. Garbage collection messages<a class="headerlink" href="#garbage-collection-messages" title="Permalink to this headline">¶</a></h2> | 237 | <span id="index-4"></span><h2>11.4. Garbage collection messages<a class="headerlink" href="#garbage-collection-messages" title="Permalink to this headline">¶</a></h2> |
| 238 | <dl class="function"> | 238 | <dl class="function"> |
| 239 | <dt id="mps_message_type_gc"> | 239 | <dt id="mps_message_type_gc"> |
| 240 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_gc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_gc" title="Permalink to this definition">¶</a></dt> | 240 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_gc</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_gc" title="Permalink to this definition">¶</a></dt> |
| @@ -329,21 +329,21 @@ collection</em></a> that generated the message.</p> | |||
| 329 | </a></p> | 329 | </a></p> |
| 330 | <h3><a href="../index.html">Table Of Contents</a></h3> | 330 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 331 | <ul> | 331 | <ul> |
| 332 | <li><a class="reference internal" href="#">10. Garbage collection</a><ul> | 332 | <li><a class="reference internal" href="#">11. Garbage collection</a><ul> |
| 333 | <li><a class="reference internal" href="#generation-chains">10.1. Generation chains</a></li> | 333 | <li><a class="reference internal" href="#generation-chains">11.1. Generation chains</a></li> |
| 334 | <li><a class="reference internal" href="#scheduling-of-collections">10.2. Scheduling of collections</a></li> | 334 | <li><a class="reference internal" href="#scheduling-of-collections">11.2. Scheduling of collections</a></li> |
| 335 | <li><a class="reference internal" href="#garbage-collection-start-messages">10.3. Garbage collection start messages</a></li> | 335 | <li><a class="reference internal" href="#garbage-collection-start-messages">11.3. Garbage collection start messages</a></li> |
| 336 | <li><a class="reference internal" href="#garbage-collection-messages">10.4. Garbage collection messages</a></li> | 336 | <li><a class="reference internal" href="#garbage-collection-messages">11.4. Garbage collection messages</a></li> |
| 337 | </ul> | 337 | </ul> |
| 338 | </li> | 338 | </li> |
| 339 | </ul> | 339 | </ul> |
| 340 | 340 | ||
| 341 | <h4>Previous topic</h4> | 341 | <h4>Previous topic</h4> |
| 342 | <p class="topless"><a href="root.html" | 342 | <p class="topless"><a href="root.html" |
| 343 | title="previous chapter">9. Roots</a></p> | 343 | title="previous chapter">10. Roots</a></p> |
| 344 | <h4>Next topic</h4> | 344 | <h4>Next topic</h4> |
| 345 | <p class="topless"><a href="message.html" | 345 | <p class="topless"><a href="message.html" |
| 346 | title="next chapter">11. Messages</a></p><h4>Downloads</h4> | 346 | title="next chapter">12. Messages</a></p><h4>Downloads</h4> |
| 347 | 347 | ||
| 348 | <p class="topless"> | 348 | <p class="topless"> |
| 349 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 349 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -369,10 +369,10 @@ collection</em></a> that generated the message.</p> | |||
| 369 | <a href="../genindex.html" title="General Index" | 369 | <a href="../genindex.html" title="General Index" |
| 370 | >index</a></li> | 370 | >index</a></li> |
| 371 | <li class="right" > | 371 | <li class="right" > |
| 372 | <a href="message.html" title="11. Messages" | 372 | <a href="message.html" title="12. Messages" |
| 373 | >next</a> |</li> | 373 | >next</a> |</li> |
| 374 | <li class="right" > | 374 | <li class="right" > |
| 375 | <a href="root.html" title="9. Roots" | 375 | <a href="root.html" title="10. Roots" |
| 376 | >previous</a> |</li> | 376 | >previous</a> |</li> |
| 377 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 377 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 378 | <li><a href="index.html" >Reference</a> »</li> | 378 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/critical.html b/mps/manual/html/topic/critical.html index a4eb0e900f0..90cd696e770 100644 --- a/mps/manual/html/topic/critical.html +++ b/mps/manual/html/topic/critical.html | |||
| @@ -164,18 +164,18 @@ a client function of type <a class="reference internal" href="format.html#mps_fm | |||
| 164 | of the format creation functions. (See <a class="reference internal" href="format.html#topic-format"><em>Object formats</em></a>.)</p> | 164 | of the format creation functions. (See <a class="reference internal" href="format.html#topic-format"><em>Object formats</em></a>.)</p> |
| 165 | <p>Here is an example of part of a format scanner for scanning contiguous | 165 | <p>Here is an example of part of a format scanner for scanning contiguous |
| 166 | runs of pointers, from <tt class="docutils literal"><span class="pre">fmtdy.c</span></tt>, the scanner for the <a class="reference external" href="http://opendylan.org/">Open Dylan</a> runtime:</p> | 166 | runs of pointers, from <tt class="docutils literal"><span class="pre">fmtdy.c</span></tt>, the scanner for the <a class="reference external" href="http://opendylan.org/">Open Dylan</a> runtime:</p> |
| 167 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">dylan_scan_contig</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">mps_ss</span><span class="p">,</span> | 167 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">dylan_scan_contig</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">mps_ss</span><span class="p">,</span> |
| 168 | <span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">limit</span><span class="p">)</span> | 168 | <span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">limit</span><span class="p">)</span> |
| 169 | <span class="p">{</span> | 169 | <span class="p">{</span> |
| 170 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 170 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 171 | <span class="kt">mps_addr_t</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> <span class="cm">/* reference cursor */</span> | 171 | <span class="n">mps_addr_t</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> <span class="cm">/* reference cursor */</span> |
| 172 | <span class="kt">mps_addr_t</span> <span class="n">r</span><span class="p">;</span> <span class="cm">/* reference to be fixed */</span> | 172 | <span class="n">mps_addr_t</span> <span class="n">r</span><span class="p">;</span> <span class="cm">/* reference to be fixed */</span> |
| 173 | 173 | ||
| 174 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">)</span> <span class="p">{</span> | 174 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">)</span> <span class="p">{</span> |
| 175 | <span class="n">p</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 175 | <span class="n">p</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 176 | <span class="nl">loop:</span> <span class="k">if</span><span class="p">(</span><span class="n">p</span> <span class="o">>=</span> <span class="n">limit</span><span class="p">)</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> | 176 | <span class="nl">loop:</span> <span class="k">if</span><span class="p">(</span><span class="n">p</span> <span class="o">>=</span> <span class="n">limit</span><span class="p">)</span> <span class="k">goto</span> <span class="n">out</span><span class="p">;</span> |
| 177 | <span class="n">r</span> <span class="o">=</span> <span class="o">*</span><span class="n">p</span><span class="o">++</span><span class="p">;</span> | 177 | <span class="n">r</span> <span class="o">=</span> <span class="o">*</span><span class="n">p</span><span class="o">++</span><span class="p">;</span> |
| 178 | <span class="k">if</span><span class="p">(((</span><span class="kt">mps_word_t</span><span class="p">)</span><span class="n">r</span><span class="o">&</span><span class="mi">3</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="cm">/* pointers tagged with 0 */</span> | 178 | <span class="k">if</span><span class="p">(((</span><span class="n">mps_word_t</span><span class="p">)</span><span class="n">r</span><span class="o">&</span><span class="mi">3</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="cm">/* pointers tagged with 0 */</span> |
| 179 | <span class="k">goto</span> <span class="n">loop</span><span class="p">;</span> <span class="cm">/* not a pointer */</span> | 179 | <span class="k">goto</span> <span class="n">loop</span><span class="p">;</span> <span class="cm">/* not a pointer */</span> |
| 180 | <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span> <span class="k">goto</span> <span class="n">loop</span><span class="p">;</span> | 180 | <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span> <span class="k">goto</span> <span class="n">loop</span><span class="p">;</span> |
| 181 | <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span> | 181 | <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">mps_ss</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">);</span> |
diff --git a/mps/manual/html/topic/debugging.html b/mps/manual/html/topic/debugging.html index 285fc192145..c3fdae2bde9 100644 --- a/mps/manual/html/topic/debugging.html +++ b/mps/manual/html/topic/debugging.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>17. Debugging pools — Memory Pool System 1.111.0 documentation</title> | 11 | <title>18. Debugging pools — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="18. Telemetry" href="telemetry.html" /> | 31 | <link rel="next" title="19. Telemetry" href="telemetry.html" /> |
| 32 | <link rel="prev" title="16. Allocation frames" href="frame.html" /> | 32 | <link rel="prev" title="17. Allocation frames" href="frame.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="telemetry.html" title="18. Telemetry" | 42 | <a href="telemetry.html" title="19. Telemetry" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="frame.html" title="16. Allocation frames" | 45 | <a href="frame.html" title="17. Allocation frames" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="debugging-pools"> | 57 | <div class="section" id="debugging-pools"> |
| 58 | <span id="topic-debugging"></span><span id="index-0"></span><h1>17. Debugging pools<a class="headerlink" href="#debugging-pools" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-debugging"></span><span id="index-0"></span><h1>18. Debugging pools<a class="headerlink" href="#debugging-pools" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>Several <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> have debugging counterparts:</p> | 59 | <p>Several <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> have debugging counterparts:</p> |
| 60 | <table border="1" class="docutils"> | 60 | <table border="1" class="docutils"> |
| 61 | <colgroup> | 61 | <colgroup> |
| @@ -115,18 +115,23 @@ signal an error or stop if wrongly interpreted as executable code.</li> | |||
| 115 | <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span><span class="s">"postpost"</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> | 115 | <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span><span class="s">"postpost"</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> |
| 116 | <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span><span class="s">"freefree"</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> | 116 | <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)</span><span class="s">"freefree"</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> |
| 117 | <span class="p">};</span> | 117 | <span class="p">};</span> |
| 118 | <span class="kt">mps_pool_t</span> <span class="n">pool</span><span class="p">;</span> | 118 | <span class="n">mps_pool_t</span> <span class="n">pool</span><span class="p">;</span> |
| 119 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 119 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 120 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_ams_debug</span><span class="p">(),</span> | 120 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">mps_class_ams_debug</span><span class="p">(),</span> |
| 121 | <span class="o">&</span><span class="n">debug_options</span><span class="p">,</span> <span class="o">&</span><span class="n">fmt</span><span class="p">,</span> <span class="o">&</span><span class="n">chain</span><span class="p">)</span> | 121 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_POOL_DEBUG_OPTIONS</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">pool_debug_options</span> <span class="o">=</span> <span class="o">&</span><span class="n">debug_options</span><span class="p">},</span> |
| 122 | <span class="p">{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="o">&</span><span class="n">fmt</span><span class="p">},</span> | ||
| 123 | <span class="p">{</span><span class="n">MPS_KEY_CHAIN</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">chain</span> <span class="o">=</span> <span class="o">&</span><span class="n">chain</span><span class="p">},</span> | ||
| 124 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 122 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"can't create debug pool"</span><span class="p">);</span> | 125 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"can't create debug pool"</span><span class="p">);</span> |
| 123 | </pre></div> | 126 | </pre></div> |
| 124 | </div> | 127 | </div> |
| 125 | <dl class="type"> | 128 | <dl class="type"> |
| 126 | <dt id="mps_pool_debug_option_s"> | 129 | <dt id="mps_pool_debug_option_s"> |
| 127 | <tt class="descname">mps_pool_debug_option_s</tt><a class="headerlink" href="#mps_pool_debug_option_s" title="Permalink to this definition">¶</a></dt> | 130 | <tt class="descname">mps_pool_debug_option_s</tt><a class="headerlink" href="#mps_pool_debug_option_s" title="Permalink to this definition">¶</a></dt> |
| 128 | <dd><p>The type of the structure used to pass options to | 131 | <dd><p>The type of the structure passed as the |
| 129 | <a class="reference internal" href="pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> for debugging <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a>.</p> | 132 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_POOL_DEBUG_OPTIONS</span></tt> keyword argument to |
| 133 | <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> when creating a debugging <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool | ||
| 134 | class</em></a>.</p> | ||
| 130 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_pool_debug_option_s</span> <span class="p">{</span> | 135 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_pool_debug_option_s</span> <span class="p">{</span> |
| 131 | <span class="kt">void</span> <span class="o">*</span><span class="n">fence_template</span><span class="p">;</span> | 136 | <span class="kt">void</span> <span class="o">*</span><span class="n">fence_template</span><span class="p">;</span> |
| 132 | <span class="kt">size_t</span> <span class="n">fence_size</span><span class="p">;</span> | 137 | <span class="kt">size_t</span> <span class="n">fence_size</span><span class="p">;</span> |
| @@ -189,10 +194,10 @@ non-debugging pools.</p> | |||
| 189 | </a></p> | 194 | </a></p> |
| 190 | <h4>Previous topic</h4> | 195 | <h4>Previous topic</h4> |
| 191 | <p class="topless"><a href="frame.html" | 196 | <p class="topless"><a href="frame.html" |
| 192 | title="previous chapter">16. Allocation frames</a></p> | 197 | title="previous chapter">17. Allocation frames</a></p> |
| 193 | <h4>Next topic</h4> | 198 | <h4>Next topic</h4> |
| 194 | <p class="topless"><a href="telemetry.html" | 199 | <p class="topless"><a href="telemetry.html" |
| 195 | title="next chapter">18. Telemetry</a></p><h4>Downloads</h4> | 200 | title="next chapter">19. Telemetry</a></p><h4>Downloads</h4> |
| 196 | 201 | ||
| 197 | <p class="topless"> | 202 | <p class="topless"> |
| 198 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 203 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -218,10 +223,10 @@ non-debugging pools.</p> | |||
| 218 | <a href="../genindex.html" title="General Index" | 223 | <a href="../genindex.html" title="General Index" |
| 219 | >index</a></li> | 224 | >index</a></li> |
| 220 | <li class="right" > | 225 | <li class="right" > |
| 221 | <a href="telemetry.html" title="18. Telemetry" | 226 | <a href="telemetry.html" title="19. Telemetry" |
| 222 | >next</a> |</li> | 227 | >next</a> |</li> |
| 223 | <li class="right" > | 228 | <li class="right" > |
| 224 | <a href="frame.html" title="16. Allocation frames" | 229 | <a href="frame.html" title="17. Allocation frames" |
| 225 | >previous</a> |</li> | 230 | >previous</a> |</li> |
| 226 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 231 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 227 | <li><a href="index.html" >Reference</a> »</li> | 232 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/error.html b/mps/manual/html/topic/error.html index d7b79b1afa1..f73877d68be 100644 --- a/mps/manual/html/topic/error.html +++ b/mps/manual/html/topic/error.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>2. Error handing — Memory Pool System 1.111.0 documentation</title> | 11 | <title>3. Error handing — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="3. Arenas" href="arena.html" /> | 31 | <link rel="next" title="4. Arenas" href="arena.html" /> |
| 32 | <link rel="prev" title="1. Interface conventions" href="interface.html" /> | 32 | <link rel="prev" title="2. Keyword arguments" href="keyword.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="arena.html" title="3. Arenas" | 42 | <a href="arena.html" title="4. Arenas" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="interface.html" title="1. Interface conventions" | 45 | <a href="keyword.html" title="2. Keyword arguments" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="error-handing"> | 57 | <div class="section" id="error-handing"> |
| 58 | <span id="topic-error"></span><span id="index-0"></span><h1>2. Error handing<a class="headerlink" href="#error-handing" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-error"></span><span id="index-0"></span><h1>3. Error handing<a class="headerlink" href="#error-handing" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>Operations in the Memory Pool System that might fail return a | 59 | <p>Operations in the Memory Pool System that might fail return a |
| 60 | <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> of type <a class="reference internal" href="#mps_res_t" title="mps_res_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_res_t</span></tt></a>, rather than a | 60 | <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> of type <a class="reference internal" href="#mps_res_t" title="mps_res_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_res_t</span></tt></a>, rather than a |
| 61 | “special value” of the return type.</p> | 61 | “special value” of the return type.</p> |
| @@ -99,7 +99,7 @@ limit</em></a> would be exceeded.</li> | |||
| 99 | </dd></dl> | 99 | </dd></dl> |
| 100 | 100 | ||
| 101 | <div class="section" id="result-codes"> | 101 | <div class="section" id="result-codes"> |
| 102 | <h2>2.1. Result codes<a class="headerlink" href="#result-codes" title="Permalink to this headline">¶</a></h2> | 102 | <h2>3.1. Result codes<a class="headerlink" href="#result-codes" title="Permalink to this headline">¶</a></h2> |
| 103 | <dl class="macro"> | 103 | <dl class="macro"> |
| 104 | <dt id="MPS_RES_COMMIT_LIMIT"> | 104 | <dt id="MPS_RES_COMMIT_LIMIT"> |
| 105 | <tt class="descname">MPS_RES_COMMIT_LIMIT</tt><a class="headerlink" href="#MPS_RES_COMMIT_LIMIT" title="Permalink to this definition">¶</a></dt> | 105 | <tt class="descname">MPS_RES_COMMIT_LIMIT</tt><a class="headerlink" href="#MPS_RES_COMMIT_LIMIT" title="Permalink to this definition">¶</a></dt> |
| @@ -204,7 +204,7 @@ yet supported.</p> | |||
| 204 | 204 | ||
| 205 | </div> | 205 | </div> |
| 206 | <div class="section" id="assertions"> | 206 | <div class="section" id="assertions"> |
| 207 | <span id="topic-error-assertion"></span><span id="index-1"></span><h2>2.2. Assertions<a class="headerlink" href="#assertions" title="Permalink to this headline">¶</a></h2> | 207 | <span id="topic-error-assertion"></span><span id="index-1"></span><h2>3.2. Assertions<a class="headerlink" href="#assertions" title="Permalink to this headline">¶</a></h2> |
| 208 | <p>Bugs in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> may violate the invariants that the | 208 | <p>Bugs in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> may violate the invariants that the |
| 209 | MPS relies on. Most functions in the MPS (in most <em>varieties</em>; see | 209 | MPS relies on. Most functions in the MPS (in most <em>varieties</em>; see |
| 210 | below) assert the correctness of their data structures, so these bugs | 210 | below) assert the correctness of their data structures, so these bugs |
| @@ -225,7 +225,7 @@ assertions automatically, by adding the following to your <tt class="docutils li | |||
| 225 | </div> | 225 | </div> |
| 226 | </div> | 226 | </div> |
| 227 | <div class="section" id="common-assertions-and-their-causes"> | 227 | <div class="section" id="common-assertions-and-their-causes"> |
| 228 | <span id="topic-error-cause"></span><span id="index-2"></span><h2>2.3. Common assertions and their causes<a class="headerlink" href="#common-assertions-and-their-causes" title="Permalink to this headline">¶</a></h2> | 228 | <span id="topic-error-cause"></span><span id="index-2"></span><h2>3.3. Common assertions and their causes<a class="headerlink" href="#common-assertions-and-their-causes" title="Permalink to this headline">¶</a></h2> |
| 229 | <p>This section lists some commonly encountered assertions and suggests | 229 | <p>This section lists some commonly encountered assertions and suggests |
| 230 | likely causes. If you encounter an assertion not listed here (or an | 230 | likely causes. If you encounter an assertion not listed here (or an |
| 231 | assertion that is listed here but for which you discovered a different | 231 | assertion that is listed here but for which you discovered a different |
| @@ -241,7 +241,7 @@ the beginning of an allocated block. See <a class="reference internal" href="deb | |||
| 241 | <a class="reference internal" href="debugging.html#topic-debugging"><em>Debugging pools</em></a>.</div></blockquote> | 241 | <a class="reference internal" href="debugging.html#topic-debugging"><em>Debugging pools</em></a>.</div></blockquote> |
| 242 | <p><tt class="docutils literal"><span class="pre">format.c:</span> <span class="pre">SigCheck</span> <span class="pre">Format:</span> <span class="pre">format</span></tt></p> | 242 | <p><tt class="docutils literal"><span class="pre">format.c:</span> <span class="pre">SigCheck</span> <span class="pre">Format:</span> <span class="pre">format</span></tt></p> |
| 243 | <blockquote> | 243 | <blockquote> |
| 244 | <div>The client program called <a class="reference internal" href="pool.html#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> for a | 244 | <div>The client program called <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> for a |
| 245 | <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> like <a class="reference internal" href="../pool/amc.html#pool-amc"><em>AMC (Automatic Mostly-Copying)</em></a> that requires a | 245 | <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> like <a class="reference internal" href="../pool/amc.html#pool-amc"><em>AMC (Automatic Mostly-Copying)</em></a> that requires a |
| 246 | <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>, but passed something other than a | 246 | <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>, but passed something other than a |
| 247 | <a class="reference internal" href="format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a> for this argument.</div></blockquote> | 247 | <a class="reference internal" href="format.html#mps_fmt_t" title="mps_fmt_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_t</span></tt></a> for this argument.</div></blockquote> |
| @@ -277,7 +277,7 @@ have kept the block alive failed to be scanned. Perhaps a | |||
| 277 | condition?</div></blockquote> | 277 | condition?</div></blockquote> |
| 278 | </div> | 278 | </div> |
| 279 | <div class="section" id="varieties"> | 279 | <div class="section" id="varieties"> |
| 280 | <span id="index-3"></span><h2>2.4. Varieties<a class="headerlink" href="#varieties" title="Permalink to this headline">¶</a></h2> | 280 | <span id="index-3"></span><h2>3.4. Varieties<a class="headerlink" href="#varieties" title="Permalink to this headline">¶</a></h2> |
| 281 | <p>The MPS has three behaviours with respect to internal checking and | 281 | <p>The MPS has three behaviours with respect to internal checking and |
| 282 | <a class="reference internal" href="telemetry.html#topic-telemetry"><em>telemetry</em></a>, which need to be selected at | 282 | <a class="reference internal" href="telemetry.html#topic-telemetry"><em>telemetry</em></a>, which need to be selected at |
| 283 | compile time, by defining one of the following preprocessor | 283 | compile time, by defining one of the following preprocessor |
| @@ -327,21 +327,21 @@ consequently there are no assertions.</p> | |||
| 327 | </a></p> | 327 | </a></p> |
| 328 | <h3><a href="../index.html">Table Of Contents</a></h3> | 328 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 329 | <ul> | 329 | <ul> |
| 330 | <li><a class="reference internal" href="#">2. Error handing</a><ul> | 330 | <li><a class="reference internal" href="#">3. Error handing</a><ul> |
| 331 | <li><a class="reference internal" href="#result-codes">2.1. Result codes</a></li> | 331 | <li><a class="reference internal" href="#result-codes">3.1. Result codes</a></li> |
| 332 | <li><a class="reference internal" href="#assertions">2.2. Assertions</a></li> | 332 | <li><a class="reference internal" href="#assertions">3.2. Assertions</a></li> |
| 333 | <li><a class="reference internal" href="#common-assertions-and-their-causes">2.3. Common assertions and their causes</a></li> | 333 | <li><a class="reference internal" href="#common-assertions-and-their-causes">3.3. Common assertions and their causes</a></li> |
| 334 | <li><a class="reference internal" href="#varieties">2.4. Varieties</a></li> | 334 | <li><a class="reference internal" href="#varieties">3.4. Varieties</a></li> |
| 335 | </ul> | 335 | </ul> |
| 336 | </li> | 336 | </li> |
| 337 | </ul> | 337 | </ul> |
| 338 | 338 | ||
| 339 | <h4>Previous topic</h4> | 339 | <h4>Previous topic</h4> |
| 340 | <p class="topless"><a href="interface.html" | 340 | <p class="topless"><a href="keyword.html" |
| 341 | title="previous chapter">1. Interface conventions</a></p> | 341 | title="previous chapter">2. Keyword arguments</a></p> |
| 342 | <h4>Next topic</h4> | 342 | <h4>Next topic</h4> |
| 343 | <p class="topless"><a href="arena.html" | 343 | <p class="topless"><a href="arena.html" |
| 344 | title="next chapter">3. Arenas</a></p><h4>Downloads</h4> | 344 | title="next chapter">4. Arenas</a></p><h4>Downloads</h4> |
| 345 | 345 | ||
| 346 | <p class="topless"> | 346 | <p class="topless"> |
| 347 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 347 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -367,10 +367,10 @@ consequently there are no assertions.</p> | |||
| 367 | <a href="../genindex.html" title="General Index" | 367 | <a href="../genindex.html" title="General Index" |
| 368 | >index</a></li> | 368 | >index</a></li> |
| 369 | <li class="right" > | 369 | <li class="right" > |
| 370 | <a href="arena.html" title="3. Arenas" | 370 | <a href="arena.html" title="4. Arenas" |
| 371 | >next</a> |</li> | 371 | >next</a> |</li> |
| 372 | <li class="right" > | 372 | <li class="right" > |
| 373 | <a href="interface.html" title="1. Interface conventions" | 373 | <a href="keyword.html" title="2. Keyword arguments" |
| 374 | >previous</a> |</li> | 374 | >previous</a> |</li> |
| 375 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 375 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 376 | <li><a href="index.html" >Reference</a> »</li> | 376 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/finalization.html b/mps/manual/html/topic/finalization.html index f55781aeddd..39588e3ffd2 100644 --- a/mps/manual/html/topic/finalization.html +++ b/mps/manual/html/topic/finalization.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>12. Finalization — Memory Pool System 1.111.0 documentation</title> | 11 | <title>13. Finalization — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="13. Location dependency" href="location.html" /> | 31 | <link rel="next" title="14. Location dependency" href="location.html" /> |
| 32 | <link rel="prev" title="11. Messages" href="message.html" /> | 32 | <link rel="prev" title="12. Messages" href="message.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="location.html" title="13. Location dependency" | 42 | <a href="location.html" title="14. Location dependency" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="message.html" title="11. Messages" | 45 | <a href="message.html" title="12. Messages" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,14 +55,14 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="finalization"> | 57 | <div class="section" id="finalization"> |
| 58 | <span id="topic-finalization"></span><span id="index-0"></span><h1>12. Finalization<a class="headerlink" href="#finalization" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-finalization"></span><span id="index-0"></span><h1>13. Finalization<a class="headerlink" href="#finalization" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>It is sometimes necessary to perform actions when a block of memory | 59 | <p>It is sometimes necessary to perform actions when a block of memory |
| 60 | <a class="reference internal" href="../glossary/d.html#term-dead"><em class="xref std std-term">dies</em></a>. For example, a block may represent the | 60 | <a class="reference internal" href="../glossary/d.html#term-dead"><em class="xref std std-term">dies</em></a>. For example, a block may represent the |
| 61 | acquisition of an external resource such as a file handle or a network | 61 | acquisition of an external resource such as a file handle or a network |
| 62 | connection. When the block dies, the corresponding resource must be | 62 | connection. When the block dies, the corresponding resource must be |
| 63 | released. This procedure is known as <a class="reference internal" href="../glossary/f.html#term-finalization"><em class="xref std std-term">finalization</em></a>.</p> | 63 | released. This procedure is known as <a class="reference internal" href="../glossary/f.html#term-finalization"><em class="xref std std-term">finalization</em></a>.</p> |
| 64 | <p>A block requiring finalization must be registered by calling <a class="reference internal" href="#mps_finalize" title="mps_finalize"><tt class="xref c c-func docutils literal"><span class="pre">mps_finalize()</span></tt></a>:</p> | 64 | <p>A block requiring finalization must be registered by calling <a class="reference internal" href="#mps_finalize" title="mps_finalize"><tt class="xref c c-func docutils literal"><span class="pre">mps_finalize()</span></tt></a>:</p> |
| 65 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_addr_t</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">block_requiring_finalization</span><span class="p">;</span> | 65 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_addr_t</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">block_requiring_finalization</span><span class="p">;</span> |
| 66 | <span class="n">mps_finalize</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">ref</span><span class="p">);</span> | 66 | <span class="n">mps_finalize</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">ref</span><span class="p">);</span> |
| 67 | </pre></div> | 67 | </pre></div> |
| 68 | </div> | 68 | </div> |
| @@ -126,7 +126,7 @@ disappear again.</p> | |||
| 126 | </div> | 126 | </div> |
| 127 | <p>See <a class="reference internal" href="message.html#topic-message"><em>Messages</em></a> for details of the message mechanism.</p> | 127 | <p>See <a class="reference internal" href="message.html#topic-message"><em>Messages</em></a> for details of the message mechanism.</p> |
| 128 | <div class="section" id="multiple-finalizations"> | 128 | <div class="section" id="multiple-finalizations"> |
| 129 | <span id="index-1"></span><h2>12.1. Multiple finalizations<a class="headerlink" href="#multiple-finalizations" title="Permalink to this headline">¶</a></h2> | 129 | <span id="index-1"></span><h2>13.1. Multiple finalizations<a class="headerlink" href="#multiple-finalizations" title="Permalink to this headline">¶</a></h2> |
| 130 | <p>A block may be registered for finalization multiple times. A block | 130 | <p>A block may be registered for finalization multiple times. A block |
| 131 | that has been registered for finalization <em>n</em> times will be finalized | 131 | that has been registered for finalization <em>n</em> times will be finalized |
| 132 | at most <em>n</em> times.</p> | 132 | at most <em>n</em> times.</p> |
| @@ -139,7 +139,7 @@ program that registers the same block multiple times must cope with | |||
| 139 | either behaviour.</p> | 139 | either behaviour.</p> |
| 140 | </div> | 140 | </div> |
| 141 | <div class="section" id="cautions"> | 141 | <div class="section" id="cautions"> |
| 142 | <span id="topic-finalization-cautions"></span><span id="index-2"></span><h2>12.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> | 142 | <span id="topic-finalization-cautions"></span><span id="index-2"></span><h2>13.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> |
| 143 | <ol class="arabic"> | 143 | <ol class="arabic"> |
| 144 | <li><p class="first">Don’t rely on finalization for your program to work. Treat it as an | 144 | <li><p class="first">Don’t rely on finalization for your program to work. Treat it as an |
| 145 | optimization that enables the freeing of resources that the | 145 | optimization that enables the freeing of resources that the |
| @@ -208,7 +208,7 @@ collection do so. See the <a class="reference internal" href="../pool/index.html | |||
| 208 | </ol> | 208 | </ol> |
| 209 | </div> | 209 | </div> |
| 210 | <div class="section" id="finalization-interface"> | 210 | <div class="section" id="finalization-interface"> |
| 211 | <span id="index-3"></span><h2>12.3. Finalization interface<a class="headerlink" href="#finalization-interface" title="Permalink to this headline">¶</a></h2> | 211 | <span id="index-3"></span><h2>13.3. Finalization interface<a class="headerlink" href="#finalization-interface" title="Permalink to this headline">¶</a></h2> |
| 212 | <dl class="function"> | 212 | <dl class="function"> |
| 213 | <dt id="mps_finalize"> | 213 | <dt id="mps_finalize"> |
| 214 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_finalize</tt><big>(</big><a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> *ref_p</em><big>)</big><a class="headerlink" href="#mps_finalize" title="Permalink to this definition">¶</a></dt> | 214 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_finalize</tt><big>(</big><a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> *ref_p</em><big>)</big><a class="headerlink" href="#mps_finalize" title="Permalink to this definition">¶</a></dt> |
| @@ -251,7 +251,7 @@ that the C call stack be a <a class="reference internal" href="../glossary/r.htm | |||
| 251 | 251 | ||
| 252 | </div> | 252 | </div> |
| 253 | <div class="section" id="finalization-messages"> | 253 | <div class="section" id="finalization-messages"> |
| 254 | <span id="index-4"></span><h2>12.4. Finalization messages<a class="headerlink" href="#finalization-messages" title="Permalink to this headline">¶</a></h2> | 254 | <span id="index-4"></span><h2>13.4. Finalization messages<a class="headerlink" href="#finalization-messages" title="Permalink to this headline">¶</a></h2> |
| 255 | <dl class="function"> | 255 | <dl class="function"> |
| 256 | <dt id="mps_message_type_finalization"> | 256 | <dt id="mps_message_type_finalization"> |
| 257 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_finalization</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_finalization" title="Permalink to this definition">¶</a></dt> | 257 | <a class="reference internal" href="message.html#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a> <tt class="descname">mps_message_type_finalization</tt><big>(</big>void<big>)</big><a class="headerlink" href="#mps_message_type_finalization" title="Permalink to this definition">¶</a></dt> |
| @@ -320,21 +320,21 @@ prevent its reclamation.</p> | |||
| 320 | </a></p> | 320 | </a></p> |
| 321 | <h3><a href="../index.html">Table Of Contents</a></h3> | 321 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 322 | <ul> | 322 | <ul> |
| 323 | <li><a class="reference internal" href="#">12. Finalization</a><ul> | 323 | <li><a class="reference internal" href="#">13. Finalization</a><ul> |
| 324 | <li><a class="reference internal" href="#multiple-finalizations">12.1. Multiple finalizations</a></li> | 324 | <li><a class="reference internal" href="#multiple-finalizations">13.1. Multiple finalizations</a></li> |
| 325 | <li><a class="reference internal" href="#cautions">12.2. Cautions</a></li> | 325 | <li><a class="reference internal" href="#cautions">13.2. Cautions</a></li> |
| 326 | <li><a class="reference internal" href="#finalization-interface">12.3. Finalization interface</a></li> | 326 | <li><a class="reference internal" href="#finalization-interface">13.3. Finalization interface</a></li> |
| 327 | <li><a class="reference internal" href="#finalization-messages">12.4. Finalization messages</a></li> | 327 | <li><a class="reference internal" href="#finalization-messages">13.4. Finalization messages</a></li> |
| 328 | </ul> | 328 | </ul> |
| 329 | </li> | 329 | </li> |
| 330 | </ul> | 330 | </ul> |
| 331 | 331 | ||
| 332 | <h4>Previous topic</h4> | 332 | <h4>Previous topic</h4> |
| 333 | <p class="topless"><a href="message.html" | 333 | <p class="topless"><a href="message.html" |
| 334 | title="previous chapter">11. Messages</a></p> | 334 | title="previous chapter">12. Messages</a></p> |
| 335 | <h4>Next topic</h4> | 335 | <h4>Next topic</h4> |
| 336 | <p class="topless"><a href="location.html" | 336 | <p class="topless"><a href="location.html" |
| 337 | title="next chapter">13. Location dependency</a></p><h4>Downloads</h4> | 337 | title="next chapter">14. Location dependency</a></p><h4>Downloads</h4> |
| 338 | 338 | ||
| 339 | <p class="topless"> | 339 | <p class="topless"> |
| 340 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 340 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -360,10 +360,10 @@ prevent its reclamation.</p> | |||
| 360 | <a href="../genindex.html" title="General Index" | 360 | <a href="../genindex.html" title="General Index" |
| 361 | >index</a></li> | 361 | >index</a></li> |
| 362 | <li class="right" > | 362 | <li class="right" > |
| 363 | <a href="location.html" title="13. Location dependency" | 363 | <a href="location.html" title="14. Location dependency" |
| 364 | >next</a> |</li> | 364 | >next</a> |</li> |
| 365 | <li class="right" > | 365 | <li class="right" > |
| 366 | <a href="message.html" title="11. Messages" | 366 | <a href="message.html" title="12. Messages" |
| 367 | >previous</a> |</li> | 367 | >previous</a> |</li> |
| 368 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 368 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 369 | <li><a href="index.html" >Reference</a> »</li> | 369 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/format.html b/mps/manual/html/topic/format.html index 2c5b0d145d5..e150c744687 100644 --- a/mps/manual/html/topic/format.html +++ b/mps/manual/html/topic/format.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>6. Object formats — Memory Pool System 1.111.0 documentation</title> | 11 | <title>7. Object formats — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="7. Scanning" href="scanning.html" /> | 31 | <link rel="next" title="8. Scanning" href="scanning.html" /> |
| 32 | <link rel="prev" title="5. Allocation" href="allocation.html" /> | 32 | <link rel="prev" title="6. Allocation" href="allocation.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="scanning.html" title="7. Scanning" | 42 | <a href="scanning.html" title="8. Scanning" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="allocation.html" title="5. Allocation" | 45 | <a href="allocation.html" title="6. Allocation" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="object-formats"> | 57 | <div class="section" id="object-formats"> |
| 58 | <span id="topic-format"></span><span id="index-0"></span><h1>6. Object formats<a class="headerlink" href="#object-formats" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-format"></span><span id="index-0"></span><h1>7. Object formats<a class="headerlink" href="#object-formats" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>The need for some means of describing objects in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client | 59 | <p>The need for some means of describing objects in the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client |
| 60 | program</em></a> comes from <a class="reference internal" href="../glossary/t.html#term-trace"><em class="xref std std-term">tracing</em></a> and <a class="reference internal" href="../glossary/m.html#term-moving-memory-manager"><em class="xref std std-term">moving</em></a>. During tracing, when an object is <a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">scanned</em></a>, all the <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a> in the object must be | 60 | program</em></a> comes from <a class="reference internal" href="../glossary/t.html#term-trace"><em class="xref std std-term">tracing</em></a> and <a class="reference internal" href="../glossary/m.html#term-moving-memory-manager"><em class="xref std std-term">moving</em></a>. During tracing, when an object is <a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">scanned</em></a>, all the <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a> in the object must be |
| 61 | identified so that the objects they point to can be scanned in their | 61 | identified so that the objects they point to can be scanned in their |
| @@ -82,7 +82,7 @@ has moved with a <a class="reference internal" href="../glossary/f.html#term-for | |||
| 82 | </dd></dl> | 82 | </dd></dl> |
| 83 | 83 | ||
| 84 | <div class="section" id="creating-an-object-format"> | 84 | <div class="section" id="creating-an-object-format"> |
| 85 | <span id="index-1"></span><h2>6.1. Creating an object format<a class="headerlink" href="#creating-an-object-format" title="Permalink to this headline">¶</a></h2> | 85 | <span id="index-1"></span><h2>7.1. Creating an object format<a class="headerlink" href="#creating-an-object-format" title="Permalink to this headline">¶</a></h2> |
| 86 | <p>Different <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> use different sets of format methods | 86 | <p>Different <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> use different sets of format methods |
| 87 | and values (for example, a non-moving pool does not need forwarding | 87 | and values (for example, a non-moving pool does not need forwarding |
| 88 | objects, so its object formats do not need to contain a forward | 88 | objects, so its object formats do not need to contain a forward |
| @@ -114,15 +114,17 @@ of.</p> | |||
| 114 | <span class="n">obj_pad</span> | 114 | <span class="n">obj_pad</span> |
| 115 | <span class="p">};</span> | 115 | <span class="p">};</span> |
| 116 | 116 | ||
| 117 | <span class="kt">mps_pool_t</span> <span class="n">obj_pool</span><span class="p">;</span> | 117 | <span class="n">mps_pool_t</span> <span class="n">obj_pool</span><span class="p">;</span> |
| 118 | <span class="kt">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> | 118 | <span class="n">mps_fmt_t</span> <span class="n">obj_fmt</span><span class="p">;</span> |
| 119 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 119 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 120 | 120 | ||
| 121 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> | 121 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_fmt_create_A</span><span class="p">(</span><span class="o">&</span><span class="n">obj_fmt</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="o">&</span><span class="n">obj_fmt_s</span><span class="p">);</span> |
| 122 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> | 122 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj format"</span><span class="p">);</span> |
| 123 | <span class="cm">/* obj_fmt created successfully */</span> | 123 | <span class="cm">/* obj_fmt created successfully */</span> |
| 124 | 124 | ||
| 125 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create</span><span class="p">(</span><span class="o">&</span><span class="n">obj_pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">pool_class</span><span class="p">,</span> <span class="n">obj_fmt</span><span class="p">);</span> | 125 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_pool_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">obj_pool</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">pool_class</span><span class="p">,</span> |
| 126 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_FORMAT</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">format</span> <span class="o">=</span> <span class="n">obj_fmt</span><span class="p">},</span> | ||
| 127 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 126 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj pool"</span><span class="p">);</span> | 128 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">error</span><span class="p">(</span><span class="s">"Couldn't create obj pool"</span><span class="p">);</span> |
| 127 | </pre></div> | 129 | </pre></div> |
| 128 | </div> | 130 | </div> |
| @@ -132,13 +134,13 @@ of.</p> | |||
| 132 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> | 134 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> |
| 133 | of variant A.</p> | 135 | of variant A.</p> |
| 134 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_A_s</span> <span class="p">{</span> | 136 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_A_s</span> <span class="p">{</span> |
| 135 | <span class="kt">mps_align_t</span> <span class="n">align</span><span class="p">;</span> | 137 | <span class="n">mps_align_t</span> <span class="n">align</span><span class="p">;</span> |
| 136 | <span class="kt">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> | 138 | <span class="n">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> |
| 137 | <span class="kt">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> | 139 | <span class="n">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> |
| 138 | <span class="kt">mps_fmt_copy_t</span> <span class="n">copy</span><span class="p">;</span> | 140 | <span class="n">mps_fmt_copy_t</span> <span class="n">copy</span><span class="p">;</span> |
| 139 | <span class="kt">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> | 141 | <span class="n">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> |
| 140 | <span class="kt">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> | 142 | <span class="n">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> |
| 141 | <span class="kt">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> | 143 | <span class="n">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> |
| 142 | <span class="p">}</span> <span class="n">mps_fmt_A_s</span><span class="p">;</span> | 144 | <span class="p">}</span> <span class="n">mps_fmt_A_s</span><span class="p">;</span> |
| 143 | </pre></div> | 145 | </pre></div> |
| 144 | </div> | 146 | </div> |
| @@ -189,14 +191,14 @@ calling <a class="reference internal" href="#mps_fmt_destroy" title="mps_fmt_des | |||
| 189 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> | 191 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> |
| 190 | of variant B.</p> | 192 | of variant B.</p> |
| 191 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_B_s</span> <span class="p">{</span> | 193 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_B_s</span> <span class="p">{</span> |
| 192 | <span class="kt">mps_align_t</span> <span class="n">align</span><span class="p">;</span> | 194 | <span class="n">mps_align_t</span> <span class="n">align</span><span class="p">;</span> |
| 193 | <span class="kt">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> | 195 | <span class="n">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> |
| 194 | <span class="kt">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> | 196 | <span class="n">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> |
| 195 | <span class="kt">mps_fmt_copy_t</span> <span class="n">copy</span><span class="p">;</span> | 197 | <span class="n">mps_fmt_copy_t</span> <span class="n">copy</span><span class="p">;</span> |
| 196 | <span class="kt">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> | 198 | <span class="n">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> |
| 197 | <span class="kt">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> | 199 | <span class="n">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> |
| 198 | <span class="kt">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> | 200 | <span class="n">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> |
| 199 | <span class="kt">mps_fmt_class_t</span> <span class="n">mps_class</span><span class="p">;</span> | 201 | <span class="n">mps_fmt_class_t</span> <span class="n">mps_class</span><span class="p">;</span> |
| 200 | <span class="p">}</span> <span class="n">mps_fmt_B_s</span><span class="p">;</span> | 202 | <span class="p">}</span> <span class="n">mps_fmt_B_s</span><span class="p">;</span> |
| 201 | </pre></div> | 203 | </pre></div> |
| 202 | </div> | 204 | </div> |
| @@ -223,12 +225,12 @@ return an appropriate <a class="reference internal" href="../glossary/r.html#ter | |||
| 223 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> | 225 | <dd><p>The type of the structure used to create an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> |
| 224 | of variant auto-header.</p> | 226 | of variant auto-header.</p> |
| 225 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_auto_header_s</span> <span class="p">{</span> | 227 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_fmt_auto_header_s</span> <span class="p">{</span> |
| 226 | <span class="kt">mps_align_t</span> <span class="n">align</span><span class="p">;</span> | 228 | <span class="n">mps_align_t</span> <span class="n">align</span><span class="p">;</span> |
| 227 | <span class="kt">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> | 229 | <span class="n">mps_fmt_scan_t</span> <span class="n">scan</span><span class="p">;</span> |
| 228 | <span class="kt">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> | 230 | <span class="n">mps_fmt_skip_t</span> <span class="n">skip</span><span class="p">;</span> |
| 229 | <span class="kt">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> | 231 | <span class="n">mps_fmt_fwd_t</span> <span class="n">fwd</span><span class="p">;</span> |
| 230 | <span class="kt">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> | 232 | <span class="n">mps_fmt_isfwd_t</span> <span class="n">isfwd</span><span class="p">;</span> |
| 231 | <span class="kt">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> | 233 | <span class="n">mps_fmt_pad_t</span> <span class="n">pad</span><span class="p">;</span> |
| 232 | <span class="kt">size_t</span> <span class="n">mps_headerSize</span><span class="p">;</span> | 234 | <span class="kt">size_t</span> <span class="n">mps_headerSize</span><span class="p">;</span> |
| 233 | <span class="p">}</span> <span class="n">mps_fmt_auto_header_s</span><span class="p">;</span> | 235 | <span class="p">}</span> <span class="n">mps_fmt_auto_header_s</span><span class="p">;</span> |
| 234 | </pre></div> | 236 | </pre></div> |
| @@ -301,7 +303,7 @@ void <tt class="descname">mps_fmt_destroy</tt><big>(</big><a class="reference in | |||
| 301 | 303 | ||
| 302 | </div> | 304 | </div> |
| 303 | <div class="section" id="cautions"> | 305 | <div class="section" id="cautions"> |
| 304 | <span id="topic-format-cautions"></span><span id="index-2"></span><h2>6.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> | 306 | <span id="topic-format-cautions"></span><span id="index-2"></span><h2>7.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> |
| 305 | <ol class="arabic"> | 307 | <ol class="arabic"> |
| 306 | <li><p class="first">The MPS guarantees that format methods have exclusive access to the | 308 | <li><p class="first">The MPS guarantees that format methods have exclusive access to the |
| 307 | object for the duration of the call. This guarantee may entail | 309 | object for the duration of the call. This guarantee may entail |
| @@ -353,7 +355,7 @@ their contents;</li> | |||
| 353 | </ol> | 355 | </ol> |
| 354 | </div> | 356 | </div> |
| 355 | <div class="section" id="format-methods"> | 357 | <div class="section" id="format-methods"> |
| 356 | <span id="index-3"></span><h2>6.3. Format methods<a class="headerlink" href="#format-methods" title="Permalink to this headline">¶</a></h2> | 358 | <span id="index-3"></span><h2>7.3. Format methods<a class="headerlink" href="#format-methods" title="Permalink to this headline">¶</a></h2> |
| 357 | <dl class="type"> | 359 | <dl class="type"> |
| 358 | <dt id="mps_fmt_class_t"> | 360 | <dt id="mps_fmt_class_t"> |
| 359 | <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a> <tt class="descname">(*mps_fmt_class_t)</tt><big>(</big><a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_fmt_class_t" title="Permalink to this definition">¶</a></dt> | 361 | <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a> <tt class="descname">(*mps_fmt_class_t)</tt><big>(</big><a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_fmt_class_t" title="Permalink to this definition">¶</a></dt> |
| @@ -495,7 +497,7 @@ them.</p> | |||
| 495 | 497 | ||
| 496 | </div> | 498 | </div> |
| 497 | <div class="section" id="object-format-introspection"> | 499 | <div class="section" id="object-format-introspection"> |
| 498 | <span id="index-4"></span><h2>6.4. Object format introspection<a class="headerlink" href="#object-format-introspection" title="Permalink to this headline">¶</a></h2> | 500 | <span id="index-4"></span><h2>7.4. Object format introspection<a class="headerlink" href="#object-format-introspection" title="Permalink to this headline">¶</a></h2> |
| 499 | <dl class="function"> | 501 | <dl class="function"> |
| 500 | <dt id="mps_addr_fmt"> | 502 | <dt id="mps_addr_fmt"> |
| 501 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_addr_fmt</tt><big>(</big><a class="reference internal" href="#mps_fmt_t" title="mps_fmt_t">mps_fmt_t</a><em> *fmt_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_addr_fmt" title="Permalink to this definition">¶</a></dt> | 503 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_addr_fmt</tt><big>(</big><a class="reference internal" href="#mps_fmt_t" title="mps_fmt_t">mps_fmt_t</a><em> *fmt_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_addr_fmt" title="Permalink to this definition">¶</a></dt> |
| @@ -598,21 +600,21 @@ their contents;</li> | |||
| 598 | </a></p> | 600 | </a></p> |
| 599 | <h3><a href="../index.html">Table Of Contents</a></h3> | 601 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 600 | <ul> | 602 | <ul> |
| 601 | <li><a class="reference internal" href="#">6. Object formats</a><ul> | 603 | <li><a class="reference internal" href="#">7. Object formats</a><ul> |
| 602 | <li><a class="reference internal" href="#creating-an-object-format">6.1. Creating an object format</a></li> | 604 | <li><a class="reference internal" href="#creating-an-object-format">7.1. Creating an object format</a></li> |
| 603 | <li><a class="reference internal" href="#cautions">6.2. Cautions</a></li> | 605 | <li><a class="reference internal" href="#cautions">7.2. Cautions</a></li> |
| 604 | <li><a class="reference internal" href="#format-methods">6.3. Format methods</a></li> | 606 | <li><a class="reference internal" href="#format-methods">7.3. Format methods</a></li> |
| 605 | <li><a class="reference internal" href="#object-format-introspection">6.4. Object format introspection</a></li> | 607 | <li><a class="reference internal" href="#object-format-introspection">7.4. Object format introspection</a></li> |
| 606 | </ul> | 608 | </ul> |
| 607 | </li> | 609 | </li> |
| 608 | </ul> | 610 | </ul> |
| 609 | 611 | ||
| 610 | <h4>Previous topic</h4> | 612 | <h4>Previous topic</h4> |
| 611 | <p class="topless"><a href="allocation.html" | 613 | <p class="topless"><a href="allocation.html" |
| 612 | title="previous chapter">5. Allocation</a></p> | 614 | title="previous chapter">6. Allocation</a></p> |
| 613 | <h4>Next topic</h4> | 615 | <h4>Next topic</h4> |
| 614 | <p class="topless"><a href="scanning.html" | 616 | <p class="topless"><a href="scanning.html" |
| 615 | title="next chapter">7. Scanning</a></p><h4>Downloads</h4> | 617 | title="next chapter">8. Scanning</a></p><h4>Downloads</h4> |
| 616 | 618 | ||
| 617 | <p class="topless"> | 619 | <p class="topless"> |
| 618 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 620 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -638,10 +640,10 @@ their contents;</li> | |||
| 638 | <a href="../genindex.html" title="General Index" | 640 | <a href="../genindex.html" title="General Index" |
| 639 | >index</a></li> | 641 | >index</a></li> |
| 640 | <li class="right" > | 642 | <li class="right" > |
| 641 | <a href="scanning.html" title="7. Scanning" | 643 | <a href="scanning.html" title="8. Scanning" |
| 642 | >next</a> |</li> | 644 | >next</a> |</li> |
| 643 | <li class="right" > | 645 | <li class="right" > |
| 644 | <a href="allocation.html" title="5. Allocation" | 646 | <a href="allocation.html" title="6. Allocation" |
| 645 | >previous</a> |</li> | 647 | >previous</a> |</li> |
| 646 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 648 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 647 | <li><a href="index.html" >Reference</a> »</li> | 649 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/frame.html b/mps/manual/html/topic/frame.html index e8f6f7fa400..bde14288cb0 100644 --- a/mps/manual/html/topic/frame.html +++ b/mps/manual/html/topic/frame.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>16. Allocation frames — Memory Pool System 1.111.0 documentation</title> | 11 | <title>17. Allocation frames — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="17. Debugging pools" href="debugging.html" /> | 31 | <link rel="next" title="18. Debugging pools" href="debugging.html" /> |
| 32 | <link rel="prev" title="15. Allocation patterns" href="pattern.html" /> | 32 | <link rel="prev" title="16. Allocation patterns" href="pattern.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="debugging.html" title="17. Debugging pools" | 42 | <a href="debugging.html" title="18. Debugging pools" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="pattern.html" title="15. Allocation patterns" | 45 | <a href="pattern.html" title="16. Allocation patterns" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="allocation-frames"> | 57 | <div class="section" id="allocation-frames"> |
| 58 | <span id="topic-frame"></span><span id="index-0"></span><h1>16. Allocation frames<a class="headerlink" href="#allocation-frames" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-frame"></span><span id="index-0"></span><h1>17. Allocation frames<a class="headerlink" href="#allocation-frames" title="Permalink to this headline">¶</a></h1> |
| 59 | <div class="admonition-deprecated admonition"> | 59 | <div class="admonition-deprecated admonition"> |
| 60 | <p class="first admonition-title">Deprecated</p> | 60 | <p class="first admonition-title">Deprecated</p> |
| 61 | <p>starting with version 1.111.</p> | 61 | <p>starting with version 1.111.</p> |
| @@ -145,10 +145,10 @@ twice (so the sequence “A = push, pop A, pop A” is illegal).</p> | |||
| 145 | </a></p> | 145 | </a></p> |
| 146 | <h4>Previous topic</h4> | 146 | <h4>Previous topic</h4> |
| 147 | <p class="topless"><a href="pattern.html" | 147 | <p class="topless"><a href="pattern.html" |
| 148 | title="previous chapter">15. Allocation patterns</a></p> | 148 | title="previous chapter">16. Allocation patterns</a></p> |
| 149 | <h4>Next topic</h4> | 149 | <h4>Next topic</h4> |
| 150 | <p class="topless"><a href="debugging.html" | 150 | <p class="topless"><a href="debugging.html" |
| 151 | title="next chapter">17. Debugging pools</a></p><h4>Downloads</h4> | 151 | title="next chapter">18. Debugging pools</a></p><h4>Downloads</h4> |
| 152 | 152 | ||
| 153 | <p class="topless"> | 153 | <p class="topless"> |
| 154 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 154 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -174,10 +174,10 @@ twice (so the sequence “A = push, pop A, pop A” is illegal).</p> | |||
| 174 | <a href="../genindex.html" title="General Index" | 174 | <a href="../genindex.html" title="General Index" |
| 175 | >index</a></li> | 175 | >index</a></li> |
| 176 | <li class="right" > | 176 | <li class="right" > |
| 177 | <a href="debugging.html" title="17. Debugging pools" | 177 | <a href="debugging.html" title="18. Debugging pools" |
| 178 | >next</a> |</li> | 178 | >next</a> |</li> |
| 179 | <li class="right" > | 179 | <li class="right" > |
| 180 | <a href="pattern.html" title="15. Allocation patterns" | 180 | <a href="pattern.html" title="16. Allocation patterns" |
| 181 | >previous</a> |</li> | 181 | >previous</a> |</li> |
| 182 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 182 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 183 | <li><a href="index.html" >Reference</a> »</li> | 183 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/index.html b/mps/manual/html/topic/index.html index c2058d5f2d6..048d6183240 100644 --- a/mps/manual/html/topic/index.html +++ b/mps/manual/html/topic/index.html | |||
| @@ -68,129 +68,130 @@ | |||
| 68 | <li class="toctree-l2"><a class="reference internal" href="interface.html#general-types">1.9. General types</a></li> | 68 | <li class="toctree-l2"><a class="reference internal" href="interface.html#general-types">1.9. General types</a></li> |
| 69 | </ul> | 69 | </ul> |
| 70 | </li> | 70 | </li> |
| 71 | <li class="toctree-l1"><a class="reference internal" href="error.html">2. Error handing</a><ul> | 71 | <li class="toctree-l1"><a class="reference internal" href="keyword.html">2. Keyword arguments</a></li> |
| 72 | <li class="toctree-l2"><a class="reference internal" href="error.html#result-codes">2.1. Result codes</a></li> | 72 | <li class="toctree-l1"><a class="reference internal" href="error.html">3. Error handing</a><ul> |
| 73 | <li class="toctree-l2"><a class="reference internal" href="error.html#assertions">2.2. Assertions</a></li> | 73 | <li class="toctree-l2"><a class="reference internal" href="error.html#result-codes">3.1. Result codes</a></li> |
| 74 | <li class="toctree-l2"><a class="reference internal" href="error.html#common-assertions-and-their-causes">2.3. Common assertions and their causes</a></li> | 74 | <li class="toctree-l2"><a class="reference internal" href="error.html#assertions">3.2. Assertions</a></li> |
| 75 | <li class="toctree-l2"><a class="reference internal" href="error.html#varieties">2.4. Varieties</a></li> | 75 | <li class="toctree-l2"><a class="reference internal" href="error.html#common-assertions-and-their-causes">3.3. Common assertions and their causes</a></li> |
| 76 | <li class="toctree-l2"><a class="reference internal" href="error.html#varieties">3.4. Varieties</a></li> | ||
| 76 | </ul> | 77 | </ul> |
| 77 | </li> | 78 | </li> |
| 78 | <li class="toctree-l1"><a class="reference internal" href="arena.html">3. Arenas</a><ul> | 79 | <li class="toctree-l1"><a class="reference internal" href="arena.html">4. Arenas</a><ul> |
| 79 | <li class="toctree-l2"><a class="reference internal" href="arena.html#client-arenas">3.1. Client arenas</a></li> | 80 | <li class="toctree-l2"><a class="reference internal" href="arena.html#client-arenas">4.1. Client arenas</a></li> |
| 80 | <li class="toctree-l2"><a class="reference internal" href="arena.html#virtual-memory-arenas">3.2. Virtual memory arenas</a></li> | 81 | <li class="toctree-l2"><a class="reference internal" href="arena.html#virtual-memory-arenas">4.2. Virtual memory arenas</a></li> |
| 81 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-properties">3.3. Arena properties</a></li> | 82 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-properties">4.3. Arena properties</a></li> |
| 82 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-states">3.4. Arena states</a></li> | 83 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-states">4.4. Arena states</a></li> |
| 83 | <li class="toctree-l2"><a class="reference internal" href="arena.html#running-garbage-collections">3.5. Running garbage collections</a></li> | 84 | <li class="toctree-l2"><a class="reference internal" href="arena.html#running-garbage-collections">4.5. Running garbage collections</a></li> |
| 84 | <li class="toctree-l2"><a class="reference internal" href="arena.html#using-idle-time-for-collection">3.6. Using idle time for collection</a></li> | 85 | <li class="toctree-l2"><a class="reference internal" href="arena.html#using-idle-time-for-collection">4.6. Using idle time for collection</a></li> |
| 85 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-introspection">3.7. Arena introspection</a></li> | 86 | <li class="toctree-l2"><a class="reference internal" href="arena.html#arena-introspection">4.7. Arena introspection</a></li> |
| 86 | <li class="toctree-l2"><a class="reference internal" href="arena.html#protection-interface">3.8. Protection interface</a></li> | 87 | <li class="toctree-l2"><a class="reference internal" href="arena.html#protection-interface">4.8. Protection interface</a></li> |
| 87 | </ul> | 88 | </ul> |
| 88 | </li> | 89 | </li> |
| 89 | <li class="toctree-l1"><a class="reference internal" href="pool.html">4. Pools</a><ul> | 90 | <li class="toctree-l1"><a class="reference internal" href="pool.html">5. Pools</a><ul> |
| 90 | <li class="toctree-l2"><a class="reference internal" href="pool.html#pool-classes">4.1. Pool classes</a></li> | 91 | <li class="toctree-l2"><a class="reference internal" href="pool.html#pool-classes">5.1. Pool classes</a></li> |
| 91 | <li class="toctree-l2"><a class="reference internal" href="pool.html#pool-introspection">4.2. Pool introspection</a></li> | 92 | <li class="toctree-l2"><a class="reference internal" href="pool.html#pool-introspection">5.2. Pool introspection</a></li> |
| 92 | </ul> | 93 | </ul> |
| 93 | </li> | 94 | </li> |
| 94 | <li class="toctree-l1"><a class="reference internal" href="allocation.html">5. Allocation</a><ul> | 95 | <li class="toctree-l1"><a class="reference internal" href="allocation.html">6. Allocation</a><ul> |
| 95 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#manual-allocation">5.1. Manual allocation</a></li> | 96 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#manual-allocation">6.1. Manual allocation</a></li> |
| 96 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-points">5.2. Allocation points</a></li> | 97 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-points">6.2. Allocation points</a></li> |
| 97 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-point-protocol">5.3. Allocation point protocol</a></li> | 98 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-point-protocol">6.3. Allocation point protocol</a></li> |
| 98 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#example-allocating-a-symbol">5.4. Example: allocating a symbol</a></li> | 99 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#example-allocating-a-symbol">6.4. Example: allocating a symbol</a></li> |
| 99 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#cautions">5.5. Cautions</a></li> | 100 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#cautions">6.5. Cautions</a></li> |
| 100 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#example-inserting-into-a-doubly-linked-list">5.6. Example: inserting into a doubly linked list</a></li> | 101 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#example-inserting-into-a-doubly-linked-list">6.6. Example: inserting into a doubly linked list</a></li> |
| 101 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-point-implementation">5.7. Allocation point implementation</a></li> | 102 | <li class="toctree-l2"><a class="reference internal" href="allocation.html#allocation-point-implementation">6.7. Allocation point implementation</a></li> |
| 102 | </ul> | 103 | </ul> |
| 103 | </li> | 104 | </li> |
| 104 | <li class="toctree-l1"><a class="reference internal" href="format.html">6. Object formats</a><ul> | 105 | <li class="toctree-l1"><a class="reference internal" href="format.html">7. Object formats</a><ul> |
| 105 | <li class="toctree-l2"><a class="reference internal" href="format.html#creating-an-object-format">6.1. Creating an object format</a></li> | 106 | <li class="toctree-l2"><a class="reference internal" href="format.html#creating-an-object-format">7.1. Creating an object format</a></li> |
| 106 | <li class="toctree-l2"><a class="reference internal" href="format.html#cautions">6.2. Cautions</a></li> | 107 | <li class="toctree-l2"><a class="reference internal" href="format.html#cautions">7.2. Cautions</a></li> |
| 107 | <li class="toctree-l2"><a class="reference internal" href="format.html#format-methods">6.3. Format methods</a></li> | 108 | <li class="toctree-l2"><a class="reference internal" href="format.html#format-methods">7.3. Format methods</a></li> |
| 108 | <li class="toctree-l2"><a class="reference internal" href="format.html#object-format-introspection">6.4. Object format introspection</a></li> | 109 | <li class="toctree-l2"><a class="reference internal" href="format.html#object-format-introspection">7.4. Object format introspection</a></li> |
| 109 | </ul> | 110 | </ul> |
| 110 | </li> | 111 | </li> |
| 111 | <li class="toctree-l1"><a class="reference internal" href="scanning.html">7. Scanning</a><ul> | 112 | <li class="toctree-l1"><a class="reference internal" href="scanning.html">8. Scanning</a><ul> |
| 112 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#scanning-protocol">7.1. Scanning protocol</a></li> | 113 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#scanning-protocol">8.1. Scanning protocol</a></li> |
| 113 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#tagged-references">7.2. Tagged references</a></li> | 114 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#tagged-references">8.2. Tagged references</a></li> |
| 114 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#critical-path">7.3. Critical path</a></li> | 115 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#critical-path">8.3. Critical path</a></li> |
| 115 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#ambiguous-references">7.4. Ambiguous references</a></li> | 116 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#ambiguous-references">8.4. Ambiguous references</a></li> |
| 116 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#unfixed-references">7.5. Unfixed references</a></li> | 117 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#unfixed-references">8.5. Unfixed references</a></li> |
| 117 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#example-scheme-objects">7.6. Example: Scheme objects</a></li> | 118 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#example-scheme-objects">8.6. Example: Scheme objects</a></li> |
| 118 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#scanning-interface">7.7. Scanning interface</a></li> | 119 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#scanning-interface">8.7. Scanning interface</a></li> |
| 119 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#fixing-interface">7.8. Fixing interface</a></li> | 120 | <li class="toctree-l2"><a class="reference internal" href="scanning.html#fixing-interface">8.8. Fixing interface</a></li> |
| 120 | </ul> | 121 | </ul> |
| 121 | </li> | 122 | </li> |
| 122 | <li class="toctree-l1"><a class="reference internal" href="thread.html">8. Threads</a><ul> | 123 | <li class="toctree-l1"><a class="reference internal" href="thread.html">9. Threads</a><ul> |
| 123 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-safety">8.1. Thread safety</a></li> | 124 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-safety">9.1. Thread safety</a></li> |
| 124 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-registration">8.2. Thread registration</a></li> | 125 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-registration">9.2. Thread registration</a></li> |
| 125 | <li class="toctree-l2"><a class="reference internal" href="thread.html#signal-handling-issues">8.3. Signal handling issues</a></li> | 126 | <li class="toctree-l2"><a class="reference internal" href="thread.html#signal-handling-issues">9.3. Signal handling issues</a></li> |
| 126 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-interface">8.4. Thread interface</a></li> | 127 | <li class="toctree-l2"><a class="reference internal" href="thread.html#thread-interface">9.4. Thread interface</a></li> |
| 127 | </ul> | 128 | </ul> |
| 128 | </li> | 129 | </li> |
| 129 | <li class="toctree-l1"><a class="reference internal" href="root.html">9. Roots</a><ul> | 130 | <li class="toctree-l1"><a class="reference internal" href="root.html">10. Roots</a><ul> |
| 130 | <li class="toctree-l2"><a class="reference internal" href="root.html#registering-roots">9.1. Registering roots</a></li> | 131 | <li class="toctree-l2"><a class="reference internal" href="root.html#registering-roots">10.1. Registering roots</a></li> |
| 131 | <li class="toctree-l2"><a class="reference internal" href="root.html#cautions">9.2. Cautions</a></li> | 132 | <li class="toctree-l2"><a class="reference internal" href="root.html#cautions">10.2. Cautions</a></li> |
| 132 | <li class="toctree-l2"><a class="reference internal" href="root.html#thread-roots">9.3. Thread roots</a></li> | 133 | <li class="toctree-l2"><a class="reference internal" href="root.html#thread-roots">10.3. Thread roots</a></li> |
| 133 | <li class="toctree-l2"><a class="reference internal" href="root.html#ranks">9.4. Ranks</a></li> | 134 | <li class="toctree-l2"><a class="reference internal" href="root.html#ranks">10.4. Ranks</a></li> |
| 134 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-modes">9.5. Root modes</a></li> | 135 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-modes">10.5. Root modes</a></li> |
| 135 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-interface">9.6. Root interface</a></li> | 136 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-interface">10.6. Root interface</a></li> |
| 136 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-introspection">9.7. Root introspection</a></li> | 137 | <li class="toctree-l2"><a class="reference internal" href="root.html#root-introspection">10.7. Root introspection</a></li> |
| 137 | </ul> | 138 | </ul> |
| 138 | </li> | 139 | </li> |
| 139 | <li class="toctree-l1"><a class="reference internal" href="collection.html">10. Garbage collection</a><ul> | 140 | <li class="toctree-l1"><a class="reference internal" href="collection.html">11. Garbage collection</a><ul> |
| 140 | <li class="toctree-l2"><a class="reference internal" href="collection.html#generation-chains">10.1. Generation chains</a></li> | 141 | <li class="toctree-l2"><a class="reference internal" href="collection.html#generation-chains">11.1. Generation chains</a></li> |
| 141 | <li class="toctree-l2"><a class="reference internal" href="collection.html#scheduling-of-collections">10.2. Scheduling of collections</a></li> | 142 | <li class="toctree-l2"><a class="reference internal" href="collection.html#scheduling-of-collections">11.2. Scheduling of collections</a></li> |
| 142 | <li class="toctree-l2"><a class="reference internal" href="collection.html#garbage-collection-start-messages">10.3. Garbage collection start messages</a></li> | 143 | <li class="toctree-l2"><a class="reference internal" href="collection.html#garbage-collection-start-messages">11.3. Garbage collection start messages</a></li> |
| 143 | <li class="toctree-l2"><a class="reference internal" href="collection.html#garbage-collection-messages">10.4. Garbage collection messages</a></li> | 144 | <li class="toctree-l2"><a class="reference internal" href="collection.html#garbage-collection-messages">11.4. Garbage collection messages</a></li> |
| 144 | </ul> | 145 | </ul> |
| 145 | </li> | 146 | </li> |
| 146 | <li class="toctree-l1"><a class="reference internal" href="message.html">11. Messages</a><ul> | 147 | <li class="toctree-l1"><a class="reference internal" href="message.html">12. Messages</a><ul> |
| 147 | <li class="toctree-l2"><a class="reference internal" href="message.html#finalization-messages">11.1. Finalization messages</a></li> | 148 | <li class="toctree-l2"><a class="reference internal" href="message.html#finalization-messages">12.1. Finalization messages</a></li> |
| 148 | <li class="toctree-l2"><a class="reference internal" href="message.html#example-interactive-chatter">11.2. Example: interactive chatter</a></li> | 149 | <li class="toctree-l2"><a class="reference internal" href="message.html#example-interactive-chatter">12.2. Example: interactive chatter</a></li> |
| 149 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-types">11.3. Message types</a></li> | 150 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-types">12.3. Message types</a></li> |
| 150 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-interface">11.4. Message interface</a></li> | 151 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-interface">12.4. Message interface</a></li> |
| 151 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-queue-interface">11.5. Message queue interface</a></li> | 152 | <li class="toctree-l2"><a class="reference internal" href="message.html#message-queue-interface">12.5. Message queue interface</a></li> |
| 152 | </ul> | 153 | </ul> |
| 153 | </li> | 154 | </li> |
| 154 | <li class="toctree-l1"><a class="reference internal" href="finalization.html">12. Finalization</a><ul> | 155 | <li class="toctree-l1"><a class="reference internal" href="finalization.html">13. Finalization</a><ul> |
| 155 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#multiple-finalizations">12.1. Multiple finalizations</a></li> | 156 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#multiple-finalizations">13.1. Multiple finalizations</a></li> |
| 156 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#cautions">12.2. Cautions</a></li> | 157 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#cautions">13.2. Cautions</a></li> |
| 157 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#finalization-interface">12.3. Finalization interface</a></li> | 158 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#finalization-interface">13.3. Finalization interface</a></li> |
| 158 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#finalization-messages">12.4. Finalization messages</a></li> | 159 | <li class="toctree-l2"><a class="reference internal" href="finalization.html#finalization-messages">13.4. Finalization messages</a></li> |
| 159 | </ul> | 160 | </ul> |
| 160 | </li> | 161 | </li> |
| 161 | <li class="toctree-l1"><a class="reference internal" href="location.html">13. Location dependency</a><ul> | 162 | <li class="toctree-l1"><a class="reference internal" href="location.html">14. Location dependency</a><ul> |
| 162 | <li class="toctree-l2"><a class="reference internal" href="location.html#terminology">13.1. Terminology</a></li> | 163 | <li class="toctree-l2"><a class="reference internal" href="location.html#terminology">14.1. Terminology</a></li> |
| 163 | <li class="toctree-l2"><a class="reference internal" href="location.html#creating-dependencies">13.2. Creating dependencies</a></li> | 164 | <li class="toctree-l2"><a class="reference internal" href="location.html#creating-dependencies">14.2. Creating dependencies</a></li> |
| 164 | <li class="toctree-l2"><a class="reference internal" href="location.html#adding-dependencies">13.3. Adding dependencies</a></li> | 165 | <li class="toctree-l2"><a class="reference internal" href="location.html#adding-dependencies">14.3. Adding dependencies</a></li> |
| 165 | <li class="toctree-l2"><a class="reference internal" href="location.html#testing-dependencies-for-staleness">13.4. Testing dependencies for staleness</a></li> | 166 | <li class="toctree-l2"><a class="reference internal" href="location.html#testing-dependencies-for-staleness">14.4. Testing dependencies for staleness</a></li> |
| 166 | <li class="toctree-l2"><a class="reference internal" href="location.html#thread-safety">13.5. Thread safety</a></li> | 167 | <li class="toctree-l2"><a class="reference internal" href="location.html#thread-safety">14.5. Thread safety</a></li> |
| 167 | <li class="toctree-l2"><a class="reference internal" href="location.html#location-dependency-interface">13.6. Location dependency interface</a></li> | 168 | <li class="toctree-l2"><a class="reference internal" href="location.html#location-dependency-interface">14.6. Location dependency interface</a></li> |
| 168 | </ul> | 169 | </ul> |
| 169 | </li> | 170 | </li> |
| 170 | <li class="toctree-l1"><a class="reference internal" href="cache.html">14. Segregated allocation caches</a><ul> | 171 | <li class="toctree-l1"><a class="reference internal" href="cache.html">15. Segregated allocation caches</a><ul> |
| 171 | <li class="toctree-l2"><a class="reference internal" href="cache.html#cache-interface">14.1. Cache interface</a></li> | 172 | <li class="toctree-l2"><a class="reference internal" href="cache.html#cache-interface">15.1. Cache interface</a></li> |
| 172 | <li class="toctree-l2"><a class="reference internal" href="cache.html#allocation-interface">14.2. Allocation interface</a></li> | 173 | <li class="toctree-l2"><a class="reference internal" href="cache.html#allocation-interface">15.2. Allocation interface</a></li> |
| 173 | </ul> | 174 | </ul> |
| 174 | </li> | 175 | </li> |
| 175 | <li class="toctree-l1"><a class="reference internal" href="pattern.html">15. Allocation patterns</a><ul> | 176 | <li class="toctree-l1"><a class="reference internal" href="pattern.html">16. Allocation patterns</a><ul> |
| 176 | <li class="toctree-l2"><a class="reference internal" href="pattern.html#ramp-allocation">15.1. Ramp allocation</a></li> | 177 | <li class="toctree-l2"><a class="reference internal" href="pattern.html#ramp-allocation">16.1. Ramp allocation</a></li> |
| 177 | </ul> | 178 | </ul> |
| 178 | </li> | 179 | </li> |
| 179 | <li class="toctree-l1"><a class="reference internal" href="frame.html">16. Allocation frames</a></li> | 180 | <li class="toctree-l1"><a class="reference internal" href="frame.html">17. Allocation frames</a></li> |
| 180 | <li class="toctree-l1"><a class="reference internal" href="debugging.html">17. Debugging pools</a></li> | 181 | <li class="toctree-l1"><a class="reference internal" href="debugging.html">18. Debugging pools</a></li> |
| 181 | <li class="toctree-l1"><a class="reference internal" href="telemetry.html">18. Telemetry</a><ul> | 182 | <li class="toctree-l1"><a class="reference internal" href="telemetry.html">19. Telemetry</a><ul> |
| 182 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-utilities">18.1. Telemetry utilities</a></li> | 183 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-utilities">19.1. Telemetry utilities</a></li> |
| 183 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#example">18.2. Example</a></li> | 184 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#example">19.2. Example</a></li> |
| 184 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#event-categories">18.3. Event categories</a></li> | 185 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#event-categories">19.3. Event categories</a></li> |
| 185 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#environment-variables">18.4. Environment variables</a></li> | 186 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#environment-variables">19.4. Environment variables</a></li> |
| 186 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#decoding-the-telemetry-stream">18.5. Decoding the telemetry stream</a></li> | 187 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#decoding-the-telemetry-stream">19.5. Decoding the telemetry stream</a></li> |
| 187 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#making-the-telemetry-stream-readable">18.6. Making the telemetry stream readable</a></li> | 188 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#making-the-telemetry-stream-readable">19.6. Making the telemetry stream readable</a></li> |
| 188 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#loading-the-telemetry-stream-into-sqlite">18.7. Loading the telemetry stream into SQLite</a></li> | 189 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#loading-the-telemetry-stream-into-sqlite">19.7. Loading the telemetry stream into SQLite</a></li> |
| 189 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-interface">18.8. Telemetry interface</a></li> | 190 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-interface">19.8. Telemetry interface</a></li> |
| 190 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-labels">18.9. Telemetry labels</a></li> | 191 | <li class="toctree-l2"><a class="reference internal" href="telemetry.html#telemetry-labels">19.9. Telemetry labels</a></li> |
| 191 | </ul> | 192 | </ul> |
| 192 | </li> | 193 | </li> |
| 193 | <li class="toctree-l1"><a class="reference internal" href="weak.html">19. Weak references</a></li> | 194 | <li class="toctree-l1"><a class="reference internal" href="weak.html">20. Weak references</a></li> |
| 194 | </ul> | 195 | </ul> |
| 195 | </div> | 196 | </div> |
| 196 | </div> | 197 | </div> |
diff --git a/mps/manual/html/topic/interface.html b/mps/manual/html/topic/interface.html index d3514e18445..5adcd3e94c0 100644 --- a/mps/manual/html/topic/interface.html +++ b/mps/manual/html/topic/interface.html | |||
| @@ -28,7 +28,7 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="2. Error handing" href="error.html" /> | 31 | <link rel="next" title="2. Keyword arguments" href="keyword.html" /> |
| 32 | <link rel="prev" title="Reference" href="index.html" /> | 32 | <link rel="prev" title="Reference" href="index.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| @@ -39,7 +39,7 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="error.html" title="2. Error handing" | 42 | <a href="keyword.html" title="2. Keyword arguments" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="index.html" title="Reference" | 45 | <a href="index.html" title="Reference" |
| @@ -89,8 +89,8 @@ notice in future releases.</p> | |||
| 89 | <div class="section" id="language"> | 89 | <div class="section" id="language"> |
| 90 | <span id="index-2"></span><h2>1.2. Language<a class="headerlink" href="#language" title="Permalink to this headline">¶</a></h2> | 90 | <span id="index-2"></span><h2>1.2. Language<a class="headerlink" href="#language" title="Permalink to this headline">¶</a></h2> |
| 91 | <ol class="arabic simple"> | 91 | <ol class="arabic simple"> |
| 92 | <li>The MPS public interface conforms to ANSI/ISO Standard C (IEC | 92 | <li>The MPS public interface conforms to <a class="reference internal" href="../mmref/bib.html#c1990"><em>ANSI/ISO Standard C (IEC |
| 93 | 9899:1990).</li> | 93 | 9899:1990)</em></a>.</li> |
| 94 | </ol> | 94 | </ol> |
| 95 | </div> | 95 | </div> |
| 96 | <div class="section" id="headers"> | 96 | <div class="section" id="headers"> |
| @@ -177,6 +177,9 @@ update the value does so via an <a class="reference internal" href="../glossary/ | |||
| 177 | the same as an out parameter except that the location it points to | 177 | the same as an out parameter except that the location it points to |
| 178 | is read by the function. See for example <a class="reference internal" href="scanning.html#MPS_FIX12" title="MPS_FIX12"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX12()</span></tt></a>.</li> | 178 | is read by the function. See for example <a class="reference internal" href="scanning.html#MPS_FIX12" title="MPS_FIX12"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX12()</span></tt></a>.</li> |
| 179 | <li>In/out parameters have names ending with <tt class="docutils literal"><span class="pre">_io</span></tt>.</li> | 179 | <li>In/out parameters have names ending with <tt class="docutils literal"><span class="pre">_io</span></tt>.</li> |
| 180 | <li>A function that takes optional arguments does so in the form of an | ||
| 181 | array of keyword argument structures. These functions have names | ||
| 182 | ending with <tt class="docutils literal"><span class="pre">_k</span></tt>. See <a class="reference internal" href="keyword.html#topic-keyword"><em>Keyword arguments</em></a>.</li> | ||
| 180 | </ol> | 183 | </ol> |
| 181 | </div> | 184 | </div> |
| 182 | <div class="section" id="type-punning"> | 185 | <div class="section" id="type-punning"> |
| @@ -185,7 +188,7 @@ is read by the function. See for example <a class="reference internal" href="sca | |||
| 185 | out parameter, like this:</p> | 188 | out parameter, like this:</p> |
| 186 | <div class="highlight-c"><div class="highlight"><pre><span class="cm">/* allocate a struct foo */</span> | 189 | <div class="highlight-c"><div class="highlight"><pre><span class="cm">/* allocate a struct foo */</span> |
| 187 | <span class="k">struct</span> <span class="n">foo</span> <span class="o">*</span><span class="n">fp</span><span class="p">;</span> | 190 | <span class="k">struct</span> <span class="n">foo</span> <span class="o">*</span><span class="n">fp</span><span class="p">;</span> |
| 188 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">((</span><span class="kt">mps_addr_t</span> <span class="o">*</span><span class="p">)</span><span class="o">&</span><span class="n">fp</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="n">foo</span><span class="p">));</span> | 191 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">((</span><span class="n">mps_addr_t</span> <span class="o">*</span><span class="p">)</span><span class="o">&</span><span class="n">fp</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="n">foo</span><span class="p">));</span> |
| 189 | </pre></div> | 192 | </pre></div> |
| 190 | </div> | 193 | </div> |
| 191 | <p>This is known as <a class="reference internal" href="../glossary/t.html#term-type-punning"><em class="xref std std-term">type punning</em></a>, and its behaviour is not | 194 | <p>This is known as <a class="reference internal" href="../glossary/t.html#term-type-punning"><em class="xref std std-term">type punning</em></a>, and its behaviour is not |
| @@ -194,7 +197,7 @@ defined in ANSI/ISO Standard C. See <a class="reference internal" href="../mmref | |||
| 194 | another: the behaviour of this cast is not covered by any of the cases | 197 | another: the behaviour of this cast is not covered by any of the cases |
| 195 | in the standard.</p> | 198 | in the standard.</p> |
| 196 | <p>Instead, we recommend this approach:</p> | 199 | <p>Instead, we recommend this approach:</p> |
| 197 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> | 200 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_addr_t</span> <span class="n">p</span><span class="p">;</span> |
| 198 | <span class="k">struct</span> <span class="n">foo</span> <span class="o">*</span><span class="n">fp</span><span class="p">;</span> | 201 | <span class="k">struct</span> <span class="n">foo</span> <span class="o">*</span><span class="n">fp</span><span class="p">;</span> |
| 199 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="n">foo</span><span class="p">));</span> | 202 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_alloc</span><span class="p">(</span><span class="o">&</span><span class="n">p</span><span class="p">,</span> <span class="n">pool</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="k">struct</span> <span class="n">foo</span><span class="p">));</span> |
| 200 | <span class="k">if</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="cm">/* handle error case */</span><span class="p">;</span> | 203 | <span class="k">if</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="cm">/* handle error case */</span><span class="p">;</span> |
| @@ -352,8 +355,8 @@ or function return from the MPS, 0 means “false”, and 1 means | |||
| 352 | <p class="topless"><a href="index.html" | 355 | <p class="topless"><a href="index.html" |
| 353 | title="previous chapter">Reference</a></p> | 356 | title="previous chapter">Reference</a></p> |
| 354 | <h4>Next topic</h4> | 357 | <h4>Next topic</h4> |
| 355 | <p class="topless"><a href="error.html" | 358 | <p class="topless"><a href="keyword.html" |
| 356 | title="next chapter">2. Error handing</a></p><h4>Downloads</h4> | 359 | title="next chapter">2. Keyword arguments</a></p><h4>Downloads</h4> |
| 357 | 360 | ||
| 358 | <p class="topless"> | 361 | <p class="topless"> |
| 359 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 362 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -379,7 +382,7 @@ or function return from the MPS, 0 means “false”, and 1 means | |||
| 379 | <a href="../genindex.html" title="General Index" | 382 | <a href="../genindex.html" title="General Index" |
| 380 | >index</a></li> | 383 | >index</a></li> |
| 381 | <li class="right" > | 384 | <li class="right" > |
| 382 | <a href="error.html" title="2. Error handing" | 385 | <a href="keyword.html" title="2. Keyword arguments" |
| 383 | >next</a> |</li> | 386 | >next</a> |</li> |
| 384 | <li class="right" > | 387 | <li class="right" > |
| 385 | <a href="index.html" title="Reference" | 388 | <a href="index.html" title="Reference" |
diff --git a/mps/manual/html/topic/keyword.html b/mps/manual/html/topic/keyword.html new file mode 100644 index 00000000000..ca6167951bd --- /dev/null +++ b/mps/manual/html/topic/keyword.html | |||
| @@ -0,0 +1,369 @@ | |||
| 1 | |||
| 2 | |||
| 3 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | ||
| 4 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | ||
| 5 | |||
| 6 | |||
| 7 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
| 8 | <head> | ||
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||
| 10 | |||
| 11 | <title>2. Keyword arguments — Memory Pool System 1.111.0 documentation</title> | ||
| 12 | |||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | ||
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | ||
| 15 | |||
| 16 | <script type="text/javascript"> | ||
| 17 | var DOCUMENTATION_OPTIONS = { | ||
| 18 | URL_ROOT: '../', | ||
| 19 | VERSION: '1.111.0', | ||
| 20 | COLLAPSE_INDEX: false, | ||
| 21 | FILE_SUFFIX: '.html', | ||
| 22 | HAS_SOURCE: true | ||
| 23 | }; | ||
| 24 | </script> | ||
| 25 | <script type="text/javascript" src="../_static/jquery.js"></script> | ||
| 26 | <script type="text/javascript" src="../_static/underscore.js"></script> | ||
| 27 | <script type="text/javascript" src="../_static/doctools.js"></script> | ||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | ||
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | ||
| 30 | <link rel="up" title="Reference" href="index.html" /> | ||
| 31 | <link rel="next" title="3. Error handing" href="error.html" /> | ||
| 32 | <link rel="prev" title="1. Interface conventions" href="interface.html" /> | ||
| 33 | </head> | ||
| 34 | <body> | ||
| 35 | <div class="related"> | ||
| 36 | <h3>Navigation</h3> | ||
| 37 | <ul> | ||
| 38 | <li class="right" style="margin-right: 10px"> | ||
| 39 | <a href="../genindex.html" title="General Index" | ||
| 40 | accesskey="I">index</a></li> | ||
| 41 | <li class="right" > | ||
| 42 | <a href="error.html" title="3. Error handing" | ||
| 43 | accesskey="N">next</a> |</li> | ||
| 44 | <li class="right" > | ||
| 45 | <a href="interface.html" title="1. Interface conventions" | ||
| 46 | accesskey="P">previous</a> |</li> | ||
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | ||
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | ||
| 49 | </ul> | ||
| 50 | </div> | ||
| 51 | |||
| 52 | <div class="document"> | ||
| 53 | <div class="documentwrapper"> | ||
| 54 | <div class="bodywrapper"> | ||
| 55 | <div class="body"> | ||
| 56 | |||
| 57 | <div class="section" id="keyword-arguments"> | ||
| 58 | <span id="topic-keyword"></span><span id="index-0"></span><h1>2. Keyword arguments<a class="headerlink" href="#keyword-arguments" title="Permalink to this headline">¶</a></h1> | ||
| 59 | <p>Some functions in the MPS interface take <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a> in | ||
| 60 | order to pass values that might be optional, or are only required in | ||
| 61 | some circumstances. For example, the function | ||
| 62 | <a class="reference internal" href="arena.html#mps_arena_create_k" title="mps_arena_create_k"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_create_k()</span></tt></a> creates any class of <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>, but | ||
| 63 | <a class="reference internal" href="../glossary/c.html#term-client-arena"><em class="xref std std-term">client arenas</em></a> require you to specify a base address. These | ||
| 64 | arguments are passed in a keyword argument array, like this:</p> | ||
| 65 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | ||
| 66 | <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">;</span> | ||
| 67 | <span class="n">mps_arg_s</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> | ||
| 68 | <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="n">key</span> <span class="o">=</span> <span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">;</span> | ||
| 69 | <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">6553600</span><span class="p">;</span> | ||
| 70 | <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="n">key</span> <span class="o">=</span> <span class="n">MPS_KEY_ARENA_CL_ADDR</span><span class="p">;</span> | ||
| 71 | <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="n">val</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">base_address</span><span class="p">;</span> | ||
| 72 | <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">].</span><span class="n">key</span> <span class="o">=</span> <span class="n">MPS_KEY_ARGS_END</span><span class="p">;</span> | ||
| 73 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> <span class="n">args</span><span class="p">);</span> | ||
| 74 | </pre></div> | ||
| 75 | </div> | ||
| 76 | <p>Each keyword argument in the array is a structure of type | ||
| 77 | <a class="reference internal" href="#mps_arg_s" title="mps_arg_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_arg_s</span></tt></a>.</p> | ||
| 78 | <p>For convenience and robustness, the MPS interface includes macros to | ||
| 79 | help with forming keyword argument lists:</p> | ||
| 80 | <div class="highlight-c"><div class="highlight"><pre><span class="n">MPS_ARGS_BEGIN</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="p">{</span> | ||
| 81 | <span class="n">MPS_ARGS_ADD</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="mi">6553600</span><span class="p">);</span> | ||
| 82 | <span class="n">MPS_ARGS_ADD</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">MPS_KEY_ARENA_CL_ADDR</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">base_address</span><span class="p">);</span> | ||
| 83 | <span class="n">MPS_ARGS_DONE</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> | ||
| 84 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> <span class="n">args</span><span class="p">);</span> | ||
| 85 | <span class="p">}</span> <span class="n">MPS_ARGS_END</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> | ||
| 86 | </pre></div> | ||
| 87 | </div> | ||
| 88 | <p>But if you are writing <a class="reference internal" href="../glossary/c.html#term-c99"><em class="xref std std-term">C99</em></a>, you can write this more concisely as:</p> | ||
| 89 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | ||
| 90 | <span class="n">mps_arena_t</span> <span class="n">arena</span><span class="p">;</span> | ||
| 91 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> | ||
| 92 | <span class="p">(</span><span class="n">mps_arg_s</span><span class="p">[]){{</span><span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">size</span> <span class="o">=</span> <span class="mi">6553600</span><span class="p">},</span> | ||
| 93 | <span class="p">{</span><span class="n">MPS_KEY_ARENA_CL_ADDR</span><span class="p">,</span> <span class="p">.</span><span class="n">val</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">base_address</span><span class="p">},</span> | ||
| 94 | <span class="p">{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}});</span> | ||
| 95 | </pre></div> | ||
| 96 | </div> | ||
| 97 | <p>The argument array must not be <tt class="docutils literal"><span class="pre">NULL</span></tt>, and must end with | ||
| 98 | <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARGS_END</span></tt>. If you don’t want to pass any arguments, you can | ||
| 99 | either call the equivalent function that does not take keyword arguments | ||
| 100 | (named without the <tt class="docutils literal"><span class="pre">_k</span></tt>) or pass <a class="reference internal" href="#mps_args_none" title="mps_args_none"><tt class="xref c c-macro docutils literal"><span class="pre">mps_args_none</span></tt></a>.</p> | ||
| 101 | <p>When a function that takes keyword arguments returns, the keyword | ||
| 102 | argument array has been <em>modified</em> to remove any arguments that have | ||
| 103 | been used. If all arguments have been used, the first element key is | ||
| 104 | now <tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARGS_END</span></tt>.</p> | ||
| 105 | <dl class="type"> | ||
| 106 | <dt id="mps_arg_s"> | ||
| 107 | <tt class="descname">mps_arg_s</tt><a class="headerlink" href="#mps_arg_s" title="Permalink to this definition">¶</a></dt> | ||
| 108 | <dd><p>The type of the structure used to represent a single | ||
| 109 | <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a> to a function.</p> | ||
| 110 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_arg_s</span> <span class="p">{</span> | ||
| 111 | <span class="n">mps_key_t</span> <span class="n">key</span><span class="p">;</span> | ||
| 112 | <span class="k">union</span> <span class="p">{</span> | ||
| 113 | <span class="n">mps_bool_t</span> <span class="n">b</span><span class="p">;</span> | ||
| 114 | <span class="kt">char</span> <span class="n">c</span><span class="p">;</span> | ||
| 115 | <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">string</span><span class="p">;</span> | ||
| 116 | <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> | ||
| 117 | <span class="kt">unsigned</span> <span class="n">u</span><span class="p">;</span> | ||
| 118 | <span class="kt">long</span> <span class="n">l</span><span class="p">;</span> | ||
| 119 | <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">ul</span><span class="p">;</span> | ||
| 120 | <span class="kt">size_t</span> <span class="n">size</span><span class="p">;</span> | ||
| 121 | <span class="n">mps_addr_t</span> <span class="n">addr</span><span class="p">;</span> | ||
| 122 | <span class="n">mps_fmt_t</span> <span class="n">format</span><span class="p">;</span> | ||
| 123 | <span class="n">mps_chain_t</span> <span class="n">chain</span><span class="p">;</span> | ||
| 124 | <span class="k">struct</span> <span class="n">mps_pool_debug_option_s</span> <span class="o">*</span><span class="n">pool_debug_options</span><span class="p">;</span> | ||
| 125 | <span class="n">mps_addr_t</span> <span class="p">(</span><span class="o">*</span><span class="n">addr_method</span><span class="p">)(</span><span class="n">mps_addr_t</span><span class="p">);</span> | ||
| 126 | <span class="n">mps_align_t</span> <span class="n">align</span><span class="p">;</span> | ||
| 127 | <span class="n">mps_word_t</span> <span class="n">count</span><span class="p">;</span> | ||
| 128 | <span class="kt">void</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> | ||
| 129 | <span class="n">mps_rank_t</span> <span class="n">rank</span><span class="p">;</span> | ||
| 130 | <span class="p">}</span> <span class="n">val</span><span class="p">;</span> | ||
| 131 | <span class="p">}</span> <span class="n">mps_arg_s</span><span class="p">;</span> | ||
| 132 | </pre></div> | ||
| 133 | </div> | ||
| 134 | <p><tt class="docutils literal"><span class="pre">key</span></tt> identifies the key. It must be one of the legal values | ||
| 135 | of <a class="reference internal" href="#mps_key_t" title="mps_key_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_key_t</span></tt></a> listed in the documentation for that type.</p> | ||
| 136 | <p><tt class="docutils literal"><span class="pre">val</span></tt> is the corresponding value. The documentation for each | ||
| 137 | value of the type <a class="reference internal" href="#mps_key_t" title="mps_key_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_key_t</span></tt></a> explains which structure | ||
| 138 | member is used by that keyword.</p> | ||
| 139 | </dd></dl> | ||
| 140 | |||
| 141 | <dl class="macro"> | ||
| 142 | <dt id="mps_args_none"> | ||
| 143 | <tt class="descname">mps_args_none</tt><a class="headerlink" href="#mps_args_none" title="Permalink to this definition">¶</a></dt> | ||
| 144 | <dd><p>An array of <a class="reference internal" href="#mps_arg_s" title="mps_arg_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_arg_s</span></tt></a> representing the empty list of | ||
| 145 | keyword arguments. Equivalent to:</p> | ||
| 146 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_arg_s</span> <span class="n">mps_args_none</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{{</span><span class="n">MPS_KEY_ARGS_END</span><span class="p">}};</span> | ||
| 147 | </pre></div> | ||
| 148 | </div> | ||
| 149 | </dd></dl> | ||
| 150 | |||
| 151 | <dl class="type"> | ||
| 152 | <dt id="mps_key_t"> | ||
| 153 | <tt class="descname">mps_key_t</tt><a class="headerlink" href="#mps_key_t" title="Permalink to this definition">¶</a></dt> | ||
| 154 | <dd><p>The type of <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword argument</em></a> keys. Must take one of the | ||
| 155 | following values:</p> | ||
| 156 | <table border="1" class="docutils"> | ||
| 157 | <colgroup> | ||
| 158 | <col width="19%" /> | ||
| 159 | <col width="10%" /> | ||
| 160 | <col width="71%" /> | ||
| 161 | </colgroup> | ||
| 162 | <thead valign="bottom"> | ||
| 163 | <tr class="row-odd"><th class="head">Keyword</th> | ||
| 164 | <th class="head">Value slot</th> | ||
| 165 | <th class="head">See</th> | ||
| 166 | </tr> | ||
| 167 | </thead> | ||
| 168 | <tbody valign="top"> | ||
| 169 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARGS_END</span></tt></td> | ||
| 170 | <td><em>none</em></td> | ||
| 171 | <td><em>see above</em></td> | ||
| 172 | </tr> | ||
| 173 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ALIGN</span></tt></td> | ||
| 174 | <td><tt class="docutils literal"><span class="pre">align</span></tt></td> | ||
| 175 | <td><a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 176 | </tr> | ||
| 177 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_AMS_SUPPORT_AMBIGUOUS</span></tt></td> | ||
| 178 | <td><tt class="docutils literal"><span class="pre">b</span></tt></td> | ||
| 179 | <td><a class="reference internal" href="../pool/ams.html#mps_class_ams" title="mps_class_ams"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_ams()</span></tt></a></td> | ||
| 180 | </tr> | ||
| 181 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_CL_ADDR</span></tt></td> | ||
| 182 | <td><tt class="docutils literal"><span class="pre">addr</span></tt></td> | ||
| 183 | <td><a class="reference internal" href="arena.html#mps_arena_class_cl" title="mps_arena_class_cl"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_class_cl()</span></tt></a></td> | ||
| 184 | </tr> | ||
| 185 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_ARENA_SIZE</span></tt></td> | ||
| 186 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 187 | <td><a class="reference internal" href="arena.html#mps_arena_class_vm" title="mps_arena_class_vm"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_class_vm()</span></tt></a>, <a class="reference internal" href="arena.html#mps_arena_class_cl" title="mps_arena_class_cl"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_class_cl()</span></tt></a></td> | ||
| 188 | </tr> | ||
| 189 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_AWL_FIND_DEPENDENT</span></tt></td> | ||
| 190 | <td><tt class="docutils literal"><span class="pre">addr_method</span></tt></td> | ||
| 191 | <td><a class="reference internal" href="../pool/awl.html#mps_class_awl" title="mps_class_awl"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_awl()</span></tt></a></td> | ||
| 192 | </tr> | ||
| 193 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_CHAIN</span></tt></td> | ||
| 194 | <td><tt class="docutils literal"><span class="pre">chain</span></tt></td> | ||
| 195 | <td><a class="reference internal" href="../pool/amc.html#mps_class_amc" title="mps_class_amc"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_amc()</span></tt></a>, <a class="reference internal" href="../pool/amcz.html#mps_class_amcz" title="mps_class_amcz"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_amcz()</span></tt></a>, <a class="reference internal" href="../pool/ams.html#mps_class_ams" title="mps_class_ams"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_ams()</span></tt></a></td> | ||
| 196 | </tr> | ||
| 197 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_EXTEND_BY</span></tt></td> | ||
| 198 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 199 | <td><a class="reference internal" href="../pool/mfs.html#mps_class_mfs" title="mps_class_mfs"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mfs()</span></tt></a>, <a class="reference internal" href="../pool/mv.html#mps_class_mv" title="mps_class_mv"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mv()</span></tt></a>, <a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 200 | </tr> | ||
| 201 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_FORMAT</span></tt></td> | ||
| 202 | <td><tt class="docutils literal"><span class="pre">format</span></tt></td> | ||
| 203 | <td><a class="reference internal" href="../pool/amc.html#mps_class_amc" title="mps_class_amc"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_amc()</span></tt></a>, <a class="reference internal" href="../pool/amcz.html#mps_class_amcz" title="mps_class_amcz"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_amcz()</span></tt></a>, <a class="reference internal" href="../pool/ams.html#mps_class_ams" title="mps_class_ams"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_ams()</span></tt></a>, <a class="reference internal" href="../pool/awl.html#mps_class_awl" title="mps_class_awl"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_awl()</span></tt></a>, <a class="reference internal" href="../pool/lo.html#mps_class_lo" title="mps_class_lo"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_lo()</span></tt></a> , <a class="reference internal" href="../pool/snc.html#mps_class_snc" title="mps_class_snc"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_snc()</span></tt></a></td> | ||
| 204 | </tr> | ||
| 205 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MAX_SIZE</span></tt></td> | ||
| 206 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 207 | <td><a class="reference internal" href="../pool/mv.html#mps_class_mv" title="mps_class_mv"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mv()</span></tt></a></td> | ||
| 208 | </tr> | ||
| 209 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MEAN_SIZE</span></tt></td> | ||
| 210 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 211 | <td><a class="reference internal" href="../pool/mv.html#mps_class_mv" title="mps_class_mv"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mv()</span></tt></a>, <a class="reference internal" href="../pool/mvt.html#mps_class_mvt" title="mps_class_mvt"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvt()</span></tt></a>, <a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 212 | </tr> | ||
| 213 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MFS_UNIT_SIZE</span></tt></td> | ||
| 214 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 215 | <td><a class="reference internal" href="../pool/mfs.html#mps_class_mfs" title="mps_class_mfs"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mfs()</span></tt></a></td> | ||
| 216 | </tr> | ||
| 217 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MIN_SIZE</span></tt></td> | ||
| 218 | <td><tt class="docutils literal"><span class="pre">size</span></tt></td> | ||
| 219 | <td><a class="reference internal" href="../pool/mvt.html#mps_class_mvt" title="mps_class_mvt"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvt()</span></tt></a></td> | ||
| 220 | </tr> | ||
| 221 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_ARENA_HIGH</span></tt></td> | ||
| 222 | <td><tt class="docutils literal"><span class="pre">b</span></tt></td> | ||
| 223 | <td><a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 224 | </tr> | ||
| 225 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_FIRST_FIT</span></tt></td> | ||
| 226 | <td><tt class="docutils literal"><span class="pre">b</span></tt></td> | ||
| 227 | <td><a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 228 | </tr> | ||
| 229 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVFF_SLOT_HIGH</span></tt></td> | ||
| 230 | <td><tt class="docutils literal"><span class="pre">b</span></tt></td> | ||
| 231 | <td><a class="reference internal" href="../pool/mvff.html#mps_class_mvff" title="mps_class_mvff"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff()</span></tt></a></td> | ||
| 232 | </tr> | ||
| 233 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVT_FRAG_LIMIT</span></tt></td> | ||
| 234 | <td><tt class="docutils literal"><span class="pre">count</span></tt></td> | ||
| 235 | <td><a class="reference internal" href="../pool/mvt.html#mps_class_mvt" title="mps_class_mvt"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvt()</span></tt></a></td> | ||
| 236 | </tr> | ||
| 237 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_MVT_RESERVE_DEPTH</span></tt></td> | ||
| 238 | <td><tt class="docutils literal"><span class="pre">count</span></tt></td> | ||
| 239 | <td><a class="reference internal" href="../pool/mvt.html#mps_class_mvt" title="mps_class_mvt"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvt()</span></tt></a></td> | ||
| 240 | </tr> | ||
| 241 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_POOL_DEBUG_OPTIONS</span></tt></td> | ||
| 242 | <td><tt class="docutils literal"><span class="pre">pool_debug_options</span></tt></td> | ||
| 243 | <td><a class="reference internal" href="../pool/ams.html#mps_class_ams_debug" title="mps_class_ams_debug"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_ams_debug()</span></tt></a>, <a class="reference internal" href="../pool/mv.html#mps_class_mv_debug" title="mps_class_mv_debug"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mv_debug()</span></tt></a>, <a class="reference internal" href="../pool/mvff.html#mps_class_mvff_debug" title="mps_class_mvff_debug"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_mvff_debug()</span></tt></a></td> | ||
| 244 | </tr> | ||
| 245 | <tr class="row-odd"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_RANK</span></tt></td> | ||
| 246 | <td><tt class="docutils literal"><span class="pre">rank</span></tt></td> | ||
| 247 | <td><a class="reference internal" href="../pool/awl.html#mps_class_awl" title="mps_class_awl"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_awl()</span></tt></a>, <a class="reference internal" href="../pool/snc.html#mps_class_snc" title="mps_class_snc"><tt class="xref c c-func docutils literal"><span class="pre">mps_class_snc()</span></tt></a></td> | ||
| 248 | </tr> | ||
| 249 | <tr class="row-even"><td><tt class="xref c c-macro docutils literal"><span class="pre">MPS_KEY_VMW3_TOP_DOWN</span></tt></td> | ||
| 250 | <td><tt class="docutils literal"><span class="pre">b</span></tt></td> | ||
| 251 | <td><a class="reference internal" href="arena.html#mps_arena_class_vm" title="mps_arena_class_vm"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_class_vm()</span></tt></a></td> | ||
| 252 | </tr> | ||
| 253 | </tbody> | ||
| 254 | </table> | ||
| 255 | </dd></dl> | ||
| 256 | |||
| 257 | <dl class="function"> | ||
| 258 | <dt id="MPS_ARGS_BEGIN"> | ||
| 259 | <tt class="descname">MPS_ARGS_BEGIN</tt><big>(</big>args<big>)</big><a class="headerlink" href="#MPS_ARGS_BEGIN" title="Permalink to this definition">¶</a></dt> | ||
| 260 | <dd><p>Start construction of a list of keyword arguments. This macro must | ||
| 261 | be used like this:</p> | ||
| 262 | <div class="highlight-c"><div class="highlight"><pre><span class="n">MPS_ARGS_BEGIN</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="p">{</span> | ||
| 263 | <span class="n">MPS_ARGS_ADD</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">MPS_KEY_ARENA_SIZE</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="mi">6553600</span><span class="p">);</span> | ||
| 264 | <span class="n">MPS_ARGS_ADD</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">MPS_KEY_ARENA_CL_ADDR</span><span class="p">,</span> <span class="n">addr</span><span class="p">,</span> <span class="n">base_address</span><span class="p">);</span> | ||
| 265 | <span class="n">MPS_ARGS_DONE</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> | ||
| 266 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_arena_create_k</span><span class="p">(</span><span class="o">&</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_arena_class_cl</span><span class="p">(),</span> <span class="n">args</span><span class="p">);</span> | ||
| 267 | <span class="p">}</span> <span class="n">MPS_ARGS_END</span><span class="p">(</span><span class="n">args</span><span class="p">);</span> | ||
| 268 | </pre></div> | ||
| 269 | </div> | ||
| 270 | <p>That is, you must call <a class="reference internal" href="#MPS_ARGS_ADD" title="MPS_ARGS_ADD"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_ADD()</span></tt></a> zero or more times, | ||
| 271 | and then call <a class="reference internal" href="#MPS_ARGS_DONE" title="MPS_ARGS_DONE"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_DONE()</span></tt></a> before passing the arguments | ||
| 272 | to a function.</p> | ||
| 273 | <p><tt class="docutils literal"><span class="pre">args</span></tt> is the name of the array that contains the keyword | ||
| 274 | arguments. The array is stack-allocated, and exists between | ||
| 275 | <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_BEGIN</span></tt></a> and <a class="reference internal" href="#MPS_ARGS_END" title="MPS_ARGS_END"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_END</span></tt></a>.</p> | ||
| 276 | <p>It is safe to nest blocks created by <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_BEGIN</span></tt></a> and | ||
| 277 | <a class="reference internal" href="#MPS_ARGS_END" title="MPS_ARGS_END"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_END</span></tt></a>.</p> | ||
| 278 | </dd></dl> | ||
| 279 | |||
| 280 | <dl class="function"> | ||
| 281 | <dt id="MPS_ARGS_ADD"> | ||
| 282 | <tt class="descname">MPS_ARGS_ADD</tt><big>(</big><a class="reference internal" href="#mps_arg_s" title="mps_arg_s">mps_arg_s</a><em> args[]</em>, <a class="reference internal" href="#mps_key_t" title="mps_key_t">mps_key_t</a><em> key</em>, value<big>)</big><a class="headerlink" href="#MPS_ARGS_ADD" title="Permalink to this definition">¶</a></dt> | ||
| 283 | <dd><p>Add an argument to a list of keyword arguments. This macro must be | ||
| 284 | used only between <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_BEGIN</span></tt></a> and | ||
| 285 | <a class="reference internal" href="#MPS_ARGS_END" title="MPS_ARGS_END"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_END</span></tt></a>.</p> | ||
| 286 | <p><tt class="docutils literal"><span class="pre">args</span></tt> is the name of array that contains the keyword arguments. | ||
| 287 | It must match the argument to the preceding call to | ||
| 288 | <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_BEGIN()</span></tt></a>.</p> | ||
| 289 | </dd></dl> | ||
| 290 | |||
| 291 | <dl class="function"> | ||
| 292 | <dt id="MPS_ARGS_DONE"> | ||
| 293 | <tt class="descname">MPS_ARGS_DONE</tt><big>(</big>args<big>)</big><a class="headerlink" href="#MPS_ARGS_DONE" title="Permalink to this definition">¶</a></dt> | ||
| 294 | <dd><p>Finalize a list of keyword arguments. This macro must be used only | ||
| 295 | between <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_BEGIN</span></tt></a> and <a class="reference internal" href="#MPS_ARGS_END" title="MPS_ARGS_END"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_ARGS_END</span></tt></a>.</p> | ||
| 296 | <p><tt class="docutils literal"><span class="pre">args</span></tt> is the name of array that contains the keyword arguments. | ||
| 297 | It must match the argument to the preceding call to | ||
| 298 | <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_BEGIN()</span></tt></a>.</p> | ||
| 299 | <p>After calling this macro, the array <tt class="docutils literal"><span class="pre">args</span></tt> is ready to pass to a | ||
| 300 | function.</p> | ||
| 301 | </dd></dl> | ||
| 302 | |||
| 303 | <dl class="function"> | ||
| 304 | <dt id="MPS_ARGS_END"> | ||
| 305 | <tt class="descname">MPS_ARGS_END</tt><big>(</big>args<big>)</big><a class="headerlink" href="#MPS_ARGS_END" title="Permalink to this definition">¶</a></dt> | ||
| 306 | <dd><p>Finish using a list of keyword arguments whose construction was | ||
| 307 | started by <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_BEGIN()</span></tt></a>.</p> | ||
| 308 | <p><tt class="docutils literal"><span class="pre">args</span></tt> is the name of array that contains the keyword arguments. | ||
| 309 | It must match the argument to the preceding call to | ||
| 310 | <a class="reference internal" href="#MPS_ARGS_BEGIN" title="MPS_ARGS_BEGIN"><tt class="xref c c-func docutils literal"><span class="pre">MPS_ARGS_BEGIN()</span></tt></a>.</p> | ||
| 311 | </dd></dl> | ||
| 312 | |||
| 313 | </div> | ||
| 314 | |||
| 315 | |||
| 316 | </div> | ||
| 317 | </div> | ||
| 318 | </div> | ||
| 319 | <div class="sphinxsidebar"> | ||
| 320 | <div class="sphinxsidebarwrapper"> | ||
| 321 | <p class="logo"><a href="../index.html"> | ||
| 322 | <img class="logo" src="../_static/logo.png" alt="Logo"/> | ||
| 323 | </a></p> | ||
| 324 | <h4>Previous topic</h4> | ||
| 325 | <p class="topless"><a href="interface.html" | ||
| 326 | title="previous chapter">1. Interface conventions</a></p> | ||
| 327 | <h4>Next topic</h4> | ||
| 328 | <p class="topless"><a href="error.html" | ||
| 329 | title="next chapter">3. Error handing</a></p><h4>Downloads</h4> | ||
| 330 | |||
| 331 | <p class="topless"> | ||
| 332 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | ||
| 333 | <a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a> | ||
| 334 | </p> | ||
| 335 | |||
| 336 | <h4>Issues</h4> | ||
| 337 | |||
| 338 | <p class="topless"> | ||
| 339 | <a href="http://www.ravenbrook.com/project/mps/issue/?action=list&view=status%3dopen&display=Job:Priority:Title&sort=Priority">Known issues</a><br> | ||
| 340 | <a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a> | ||
| 341 | </p><h4>Contact us</h4> | ||
| 342 | |||
| 343 | <p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p> | ||
| 344 | </div> | ||
| 345 | </div> | ||
| 346 | <div class="clearer"></div> | ||
| 347 | </div> | ||
| 348 | <div class="related"> | ||
| 349 | <h3>Navigation</h3> | ||
| 350 | <ul> | ||
| 351 | <li class="right" style="margin-right: 10px"> | ||
| 352 | <a href="../genindex.html" title="General Index" | ||
| 353 | >index</a></li> | ||
| 354 | <li class="right" > | ||
| 355 | <a href="error.html" title="3. Error handing" | ||
| 356 | >next</a> |</li> | ||
| 357 | <li class="right" > | ||
| 358 | <a href="interface.html" title="1. Interface conventions" | ||
| 359 | >previous</a> |</li> | ||
| 360 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | ||
| 361 | <li><a href="index.html" >Reference</a> »</li> | ||
| 362 | </ul> | ||
| 363 | </div> | ||
| 364 | <div class="footer"> | ||
| 365 | © <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited. | ||
| 366 | Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. | ||
| 367 | </div> | ||
| 368 | </body> | ||
| 369 | </html> \ No newline at end of file | ||
diff --git a/mps/manual/html/topic/location.html b/mps/manual/html/topic/location.html index 4e7f1151098..466d21f4b29 100644 --- a/mps/manual/html/topic/location.html +++ b/mps/manual/html/topic/location.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>13. Location dependency — Memory Pool System 1.111.0 documentation</title> | 11 | <title>14. Location dependency — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="14. Segregated allocation caches" href="cache.html" /> | 31 | <link rel="next" title="15. Segregated allocation caches" href="cache.html" /> |
| 32 | <link rel="prev" title="12. Finalization" href="finalization.html" /> | 32 | <link rel="prev" title="13. Finalization" href="finalization.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="cache.html" title="14. Segregated allocation caches" | 42 | <a href="cache.html" title="15. Segregated allocation caches" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="finalization.html" title="12. Finalization" | 45 | <a href="finalization.html" title="13. Finalization" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="location-dependency"> | 57 | <div class="section" id="location-dependency"> |
| 58 | <span id="topic-location"></span><span id="index-0"></span><h1>13. Location dependency<a class="headerlink" href="#location-dependency" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-location"></span><span id="index-0"></span><h1>14. Location dependency<a class="headerlink" href="#location-dependency" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>Location dependencies provide a means by which the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client | 59 | <p>Location dependencies provide a means by which the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client |
| 60 | program</em></a> can depend on the <em class="dfn">location</em> of blocks (that is, on the | 60 | program</em></a> can depend on the <em class="dfn">location</em> of blocks (that is, on the |
| 61 | bits in pointers to the blocks) in the presence of a <a class="reference internal" href="../glossary/m.html#term-moving-memory-manager"><em class="xref std std-term">moving | 61 | bits in pointers to the blocks) in the presence of a <a class="reference internal" href="../glossary/m.html#term-moving-memory-manager"><em class="xref std std-term">moving |
| @@ -66,7 +66,7 @@ address-based hash tables and that will be used as a running example. | |||
| 66 | See the section <a class="reference internal" href="../guide/advanced.html#guide-advanced-location"><em>Location dependency</em></a> in the Guide for a more | 66 | See the section <a class="reference internal" href="../guide/advanced.html#guide-advanced-location"><em>Location dependency</em></a> in the Guide for a more |
| 67 | detailed look at this example.</p> | 67 | detailed look at this example.</p> |
| 68 | <div class="section" id="terminology"> | 68 | <div class="section" id="terminology"> |
| 69 | <h2>13.1. Terminology<a class="headerlink" href="#terminology" title="Permalink to this headline">¶</a></h2> | 69 | <h2>14.1. Terminology<a class="headerlink" href="#terminology" title="Permalink to this headline">¶</a></h2> |
| 70 | <p>A <em class="dfn">location dependency</em> is represented by an structure of type | 70 | <p>A <em class="dfn">location dependency</em> is represented by an structure of type |
| 71 | <a class="reference internal" href="#mps_ld_s" title="mps_ld_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ld_s</span></tt></a>. It encapsulates a set of dependencies on the | 71 | <a class="reference internal" href="#mps_ld_s" title="mps_ld_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ld_s</span></tt></a>. It encapsulates a set of dependencies on the |
| 72 | locations of blocks. It can be used to determine whether any of the | 72 | locations of blocks. It can be used to determine whether any of the |
| @@ -85,7 +85,7 @@ if any of the blocks whose location has been depended on might have | |||
| 85 | moved since the respective dependency was made.</p> | 85 | moved since the respective dependency was made.</p> |
| 86 | </div> | 86 | </div> |
| 87 | <div class="section" id="creating-dependencies"> | 87 | <div class="section" id="creating-dependencies"> |
| 88 | <span id="index-1"></span><h2>13.2. Creating dependencies<a class="headerlink" href="#creating-dependencies" title="Permalink to this headline">¶</a></h2> | 88 | <span id="index-1"></span><h2>14.2. Creating dependencies<a class="headerlink" href="#creating-dependencies" title="Permalink to this headline">¶</a></h2> |
| 89 | <p>The <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> must provide space for the | 89 | <p>The <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> must provide space for the |
| 90 | <a class="reference internal" href="#mps_ld_s" title="mps_ld_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ld_s</span></tt></a> structure. Typically, this will be inlined in some | 90 | <a class="reference internal" href="#mps_ld_s" title="mps_ld_s"><tt class="xref c c-type docutils literal"><span class="pre">mps_ld_s</span></tt></a> structure. Typically, this will be inlined in some |
| 91 | larger structure. This structure can be in memory managed by the MPS | 91 | larger structure. This structure can be in memory managed by the MPS |
| @@ -93,11 +93,11 @@ or elsewhere; that doesn’t matter.</p> | |||
| 93 | <p>For example, the toy Scheme interpreter inlines the location | 93 | <p>For example, the toy Scheme interpreter inlines the location |
| 94 | dependency in its hash table structure:</p> | 94 | dependency in its hash table structure:</p> |
| 95 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">table_s</span> <span class="p">{</span> | 95 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">table_s</span> <span class="p">{</span> |
| 96 | <span class="kt">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_TABLE */</span> | 96 | <span class="n">type_t</span> <span class="n">type</span><span class="p">;</span> <span class="cm">/* TYPE_TABLE */</span> |
| 97 | <span class="kt">hash_t</span> <span class="n">hash</span><span class="p">;</span> <span class="cm">/* hash function */</span> | 97 | <span class="n">hash_t</span> <span class="n">hash</span><span class="p">;</span> <span class="cm">/* hash function */</span> |
| 98 | <span class="kt">cmp_t</span> <span class="n">cmp</span><span class="p">;</span> <span class="cm">/* comparison function */</span> | 98 | <span class="n">cmp_t</span> <span class="n">cmp</span><span class="p">;</span> <span class="cm">/* comparison function */</span> |
| 99 | <span class="hll"> <span class="n">mps_ld_s</span> <span class="n">ld</span><span class="p">;</span> <span class="cm">/* location dependency */</span> | 99 | <span class="hll"> <span class="n">mps_ld_s</span> <span class="n">ld</span><span class="p">;</span> <span class="cm">/* location dependency */</span> |
| 100 | </span> <span class="kt">obj_t</span> <span class="n">buckets</span><span class="p">;</span> <span class="cm">/* hash buckets */</span> | 100 | </span> <span class="n">obj_t</span> <span class="n">buckets</span><span class="p">;</span> <span class="cm">/* hash buckets */</span> |
| 101 | <span class="p">}</span> <span class="n">table_s</span><span class="p">;</span> | 101 | <span class="p">}</span> <span class="n">table_s</span><span class="p">;</span> |
| 102 | </pre></div> | 102 | </pre></div> |
| 103 | </div> | 103 | </div> |
| @@ -113,7 +113,7 @@ dependencies from the structure. For example, this is normally done | |||
| 113 | whenever <a class="reference internal" href="#mps_ld_isstale" title="mps_ld_isstale"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_isstale()</span></tt></a> returns true.</p> | 113 | whenever <a class="reference internal" href="#mps_ld_isstale" title="mps_ld_isstale"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_isstale()</span></tt></a> returns true.</p> |
| 114 | </div> | 114 | </div> |
| 115 | <div class="section" id="adding-dependencies"> | 115 | <div class="section" id="adding-dependencies"> |
| 116 | <span id="index-2"></span><h2>13.3. Adding dependencies<a class="headerlink" href="#adding-dependencies" title="Permalink to this headline">¶</a></h2> | 116 | <span id="index-2"></span><h2>14.3. Adding dependencies<a class="headerlink" href="#adding-dependencies" title="Permalink to this headline">¶</a></h2> |
| 117 | <p><em>Before</em> the location of a block is depended on (for example, | 117 | <p><em>Before</em> the location of a block is depended on (for example, |
| 118 | hashed) a reference to the block may be added to a location | 118 | hashed) a reference to the block may be added to a location |
| 119 | dependency by calling <a class="reference internal" href="#mps_ld_add" title="mps_ld_add"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_add()</span></tt></a>. Dependencies on many | 119 | dependency by calling <a class="reference internal" href="#mps_ld_add" title="mps_ld_add"><tt class="xref c c-func docutils literal"><span class="pre">mps_ld_add()</span></tt></a>. Dependencies on many |
| @@ -125,18 +125,18 @@ references from one dependency to another.</p> | |||
| 125 | that is added to the table must be added to the dependency before its | 125 | that is added to the table must be added to the dependency before its |
| 126 | address is hashed. In the toy Scheme interpreter this is most easily | 126 | address is hashed. In the toy Scheme interpreter this is most easily |
| 127 | done in the function that hashes an address:</p> | 127 | done in the function that hashes an address:</p> |
| 128 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eq_hash</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="kt">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> | 128 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="nf">eq_hash</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">obj</span><span class="p">,</span> <span class="n">mps_ld_t</span> <span class="n">ld</span><span class="p">)</span> |
| 129 | <span class="p">{</span> | 129 | <span class="p">{</span> |
| 130 | <span class="k">union</span> <span class="p">{</span><span class="kt">char</span> <span class="n">s</span><span class="p">[</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">obj_t</span><span class="p">)];</span> <span class="kt">obj_t</span> <span class="n">addr</span><span class="p">;}</span> <span class="n">u</span><span class="p">;</span> | 130 | <span class="k">union</span> <span class="p">{</span><span class="kt">char</span> <span class="n">s</span><span class="p">[</span><span class="k">sizeof</span><span class="p">(</span><span class="n">obj_t</span><span class="p">)];</span> <span class="n">obj_t</span> <span class="n">addr</span><span class="p">;}</span> <span class="n">u</span><span class="p">;</span> |
| 131 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">ld</span><span class="p">)</span> <span class="n">mps_ld_add</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> | 131 | <span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">ld</span><span class="p">)</span> <span class="n">mps_ld_add</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">obj</span><span class="p">);</span> |
| 132 | </span> <span class="n">u</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">obj</span><span class="p">;</span> | 132 | </span> <span class="n">u</span><span class="p">.</span><span class="n">addr</span> <span class="o">=</span> <span class="n">obj</span><span class="p">;</span> |
| 133 | <span class="k">return</span> <span class="n">hash</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">s</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">obj_t</span><span class="p">));</span> | 133 | <span class="k">return</span> <span class="n">hash</span><span class="p">(</span><span class="n">u</span><span class="p">.</span><span class="n">s</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">obj_t</span><span class="p">));</span> |
| 134 | <span class="p">}</span> | 134 | <span class="p">}</span> |
| 135 | </pre></div> | 135 | </pre></div> |
| 136 | </div> | 136 | </div> |
| 137 | </div> | 137 | </div> |
| 138 | <div class="section" id="testing-dependencies-for-staleness"> | 138 | <div class="section" id="testing-dependencies-for-staleness"> |
| 139 | <span id="index-3"></span><h2>13.4. Testing dependencies for staleness<a class="headerlink" href="#testing-dependencies-for-staleness" title="Permalink to this headline">¶</a></h2> | 139 | <span id="index-3"></span><h2>14.4. Testing dependencies for staleness<a class="headerlink" href="#testing-dependencies-for-staleness" title="Permalink to this headline">¶</a></h2> |
| 140 | <p>When the locations of blocks are used (during a hash table lookup for | 140 | <p>When the locations of blocks are used (during a hash table lookup for |
| 141 | example), the computation should be carried out and the result used in | 141 | example), the computation should be carried out and the result used in |
| 142 | the usual way (for example, the pointer is hashed and the has used to | 142 | the usual way (for example, the pointer is hashed and the has used to |
| @@ -168,7 +168,7 @@ old locations of the blocks; and</li> | |||
| 168 | </ol> | 168 | </ol> |
| 169 | <p>For example, in the case of a hash table you should rehash based on | 169 | <p>For example, in the case of a hash table you should rehash based on |
| 170 | the new locations of the blocks.</p> | 170 | the new locations of the blocks.</p> |
| 171 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">obj_t</span> <span class="nf">table_ref</span><span class="p">(</span><span class="kt">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="kt">obj_t</span> <span class="n">key</span><span class="p">)</span> | 171 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">obj_t</span> <span class="nf">table_ref</span><span class="p">(</span><span class="n">obj_t</span> <span class="n">tbl</span><span class="p">,</span> <span class="n">obj_t</span> <span class="n">key</span><span class="p">)</span> |
| 172 | <span class="p">{</span> | 172 | <span class="p">{</span> |
| 173 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span> <span class="o">=</span> <span class="n">buckets_find</span><span class="p">(</span><span class="n">tbl</span><span class="p">,</span> <span class="n">tbl</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">buckets</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> | 173 | <span class="k">struct</span> <span class="n">bucket_s</span> <span class="o">*</span><span class="n">b</span> <span class="o">=</span> <span class="n">buckets_find</span><span class="p">(</span><span class="n">tbl</span><span class="p">,</span> <span class="n">tbl</span><span class="o">-></span><span class="n">table</span><span class="p">.</span><span class="n">buckets</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| 174 | <span class="k">if</span> <span class="p">(</span><span class="n">b</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="n">obj_deleted</span><span class="p">)</span> | 174 | <span class="k">if</span> <span class="p">(</span><span class="n">b</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="nb">NULL</span> <span class="o">&&</span> <span class="n">b</span><span class="o">-></span><span class="n">key</span> <span class="o">!=</span> <span class="n">obj_deleted</span><span class="p">)</span> |
| @@ -195,7 +195,7 @@ it might as well find the bucket containing <tt class="docutils literal"><span c | |||
| 195 | and return it.</p> | 195 | and return it.</p> |
| 196 | </div> | 196 | </div> |
| 197 | <div class="section" id="thread-safety"> | 197 | <div class="section" id="thread-safety"> |
| 198 | <span id="index-4"></span><h2>13.5. Thread safety<a class="headerlink" href="#thread-safety" title="Permalink to this headline">¶</a></h2> | 198 | <span id="index-4"></span><h2>14.5. Thread safety<a class="headerlink" href="#thread-safety" title="Permalink to this headline">¶</a></h2> |
| 199 | <p>The functions are all thread-safe with respect to operations on | 199 | <p>The functions are all thread-safe with respect to operations on |
| 200 | different location dependencies. That means that it is not necessary | 200 | different location dependencies. That means that it is not necessary |
| 201 | for threads to interlock if they are performing operations on | 201 | for threads to interlock if they are performing operations on |
| @@ -204,7 +204,7 @@ functions detail their thread-safety attributes if multiple threads | |||
| 204 | need to access the same location dependency.</p> | 204 | need to access the same location dependency.</p> |
| 205 | </div> | 205 | </div> |
| 206 | <div class="section" id="location-dependency-interface"> | 206 | <div class="section" id="location-dependency-interface"> |
| 207 | <span id="index-5"></span><h2>13.6. Location dependency interface<a class="headerlink" href="#location-dependency-interface" title="Permalink to this headline">¶</a></h2> | 207 | <span id="index-5"></span><h2>14.6. Location dependency interface<a class="headerlink" href="#location-dependency-interface" title="Permalink to this headline">¶</a></h2> |
| 208 | <dl class="type"> | 208 | <dl class="type"> |
| 209 | <dt id="mps_ld_t"> | 209 | <dt id="mps_ld_t"> |
| 210 | <tt class="descname">mps_ld_t</tt><a class="headerlink" href="#mps_ld_t" title="Permalink to this definition">¶</a></dt> | 210 | <tt class="descname">mps_ld_t</tt><a class="headerlink" href="#mps_ld_t" title="Permalink to this definition">¶</a></dt> |
| @@ -229,7 +229,7 @@ found in the table.</p> | |||
| 229 | <dd><p>The type of the structure used to represent a <a class="reference internal" href="../glossary/l.html#term-location-dependency"><em class="xref std std-term">location | 229 | <dd><p>The type of the structure used to represent a <a class="reference internal" href="../glossary/l.html#term-location-dependency"><em class="xref std std-term">location |
| 230 | dependency</em></a>.</p> | 230 | dependency</em></a>.</p> |
| 231 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_ld_s</span> <span class="p">{</span> | 231 | <div class="highlight-c"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">struct</span> <span class="n">mps_ld_s</span> <span class="p">{</span> |
| 232 | <span class="kt">mps_word_t</span> <span class="n">w0</span><span class="p">,</span> <span class="n">w1</span><span class="p">;</span> | 232 | <span class="n">mps_word_t</span> <span class="n">w0</span><span class="p">,</span> <span class="n">w1</span><span class="p">;</span> |
| 233 | <span class="p">}</span> <span class="n">mps_ld_s</span><span class="p">;</span> | 233 | <span class="p">}</span> <span class="n">mps_ld_s</span><span class="p">;</span> |
| 234 | </pre></div> | 234 | </pre></div> |
| 235 | </div> | 235 | </div> |
| @@ -353,23 +353,23 @@ other location dependency function.</p> | |||
| 353 | </a></p> | 353 | </a></p> |
| 354 | <h3><a href="../index.html">Table Of Contents</a></h3> | 354 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 355 | <ul> | 355 | <ul> |
| 356 | <li><a class="reference internal" href="#">13. Location dependency</a><ul> | 356 | <li><a class="reference internal" href="#">14. Location dependency</a><ul> |
| 357 | <li><a class="reference internal" href="#terminology">13.1. Terminology</a></li> | 357 | <li><a class="reference internal" href="#terminology">14.1. Terminology</a></li> |
| 358 | <li><a class="reference internal" href="#creating-dependencies">13.2. Creating dependencies</a></li> | 358 | <li><a class="reference internal" href="#creating-dependencies">14.2. Creating dependencies</a></li> |
| 359 | <li><a class="reference internal" href="#adding-dependencies">13.3. Adding dependencies</a></li> | 359 | <li><a class="reference internal" href="#adding-dependencies">14.3. Adding dependencies</a></li> |
| 360 | <li><a class="reference internal" href="#testing-dependencies-for-staleness">13.4. Testing dependencies for staleness</a></li> | 360 | <li><a class="reference internal" href="#testing-dependencies-for-staleness">14.4. Testing dependencies for staleness</a></li> |
| 361 | <li><a class="reference internal" href="#thread-safety">13.5. Thread safety</a></li> | 361 | <li><a class="reference internal" href="#thread-safety">14.5. Thread safety</a></li> |
| 362 | <li><a class="reference internal" href="#location-dependency-interface">13.6. Location dependency interface</a></li> | 362 | <li><a class="reference internal" href="#location-dependency-interface">14.6. Location dependency interface</a></li> |
| 363 | </ul> | 363 | </ul> |
| 364 | </li> | 364 | </li> |
| 365 | </ul> | 365 | </ul> |
| 366 | 366 | ||
| 367 | <h4>Previous topic</h4> | 367 | <h4>Previous topic</h4> |
| 368 | <p class="topless"><a href="finalization.html" | 368 | <p class="topless"><a href="finalization.html" |
| 369 | title="previous chapter">12. Finalization</a></p> | 369 | title="previous chapter">13. Finalization</a></p> |
| 370 | <h4>Next topic</h4> | 370 | <h4>Next topic</h4> |
| 371 | <p class="topless"><a href="cache.html" | 371 | <p class="topless"><a href="cache.html" |
| 372 | title="next chapter">14. Segregated allocation caches</a></p><h4>Downloads</h4> | 372 | title="next chapter">15. Segregated allocation caches</a></p><h4>Downloads</h4> |
| 373 | 373 | ||
| 374 | <p class="topless"> | 374 | <p class="topless"> |
| 375 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 375 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -395,10 +395,10 @@ other location dependency function.</p> | |||
| 395 | <a href="../genindex.html" title="General Index" | 395 | <a href="../genindex.html" title="General Index" |
| 396 | >index</a></li> | 396 | >index</a></li> |
| 397 | <li class="right" > | 397 | <li class="right" > |
| 398 | <a href="cache.html" title="14. Segregated allocation caches" | 398 | <a href="cache.html" title="15. Segregated allocation caches" |
| 399 | >next</a> |</li> | 399 | >next</a> |</li> |
| 400 | <li class="right" > | 400 | <li class="right" > |
| 401 | <a href="finalization.html" title="12. Finalization" | 401 | <a href="finalization.html" title="13. Finalization" |
| 402 | >previous</a> |</li> | 402 | >previous</a> |</li> |
| 403 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 403 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 404 | <li><a href="index.html" >Reference</a> »</li> | 404 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/message.html b/mps/manual/html/topic/message.html index 82d6dd19e33..68f46940050 100644 --- a/mps/manual/html/topic/message.html +++ b/mps/manual/html/topic/message.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>11. Messages — Memory Pool System 1.111.0 documentation</title> | 11 | <title>12. Messages — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="12. Finalization" href="finalization.html" /> | 31 | <link rel="next" title="13. Finalization" href="finalization.html" /> |
| 32 | <link rel="prev" title="10. Garbage collection" href="collection.html" /> | 32 | <link rel="prev" title="11. Garbage collection" href="collection.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="finalization.html" title="12. Finalization" | 42 | <a href="finalization.html" title="13. Finalization" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="collection.html" title="10. Garbage collection" | 45 | <a href="collection.html" title="11. Garbage collection" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="messages"> | 57 | <div class="section" id="messages"> |
| 58 | <span id="topic-message"></span><span id="index-0"></span><h1>11. Messages<a class="headerlink" href="#messages" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-message"></span><span id="index-0"></span><h1>12. Messages<a class="headerlink" href="#messages" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>The MPS sometimes needs to communicate with the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> | 59 | <p>The MPS sometimes needs to communicate with the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> |
| 60 | about events which occur <a class="reference internal" href="../glossary/a.html#term-asynchronous-garbage-collector"><em class="xref std std-term">asynchronously</em></a>, and so information cannot be returned as function call | 60 | about events which occur <a class="reference internal" href="../glossary/a.html#term-asynchronous-garbage-collector"><em class="xref std std-term">asynchronously</em></a>, and so information cannot be returned as function call |
| 61 | results.</p> | 61 | results.</p> |
| @@ -79,7 +79,7 @@ message queue to grow without limit will eventually find that new | |||
| 79 | garbage collections no longer start until some of these messages are | 79 | garbage collections no longer start until some of these messages are |
| 80 | retrieved and discarded.</p> | 80 | retrieved and discarded.</p> |
| 81 | <div class="section" id="finalization-messages"> | 81 | <div class="section" id="finalization-messages"> |
| 82 | <span id="index-1"></span><h2>11.1. Finalization messages<a class="headerlink" href="#finalization-messages" title="Permalink to this headline">¶</a></h2> | 82 | <span id="index-1"></span><h2>12.1. Finalization messages<a class="headerlink" href="#finalization-messages" title="Permalink to this headline">¶</a></h2> |
| 83 | <p><a class="reference internal" href="../glossary/f.html#term-finalization"><em class="xref std std-term">Finalization</em></a> is implemented by posting a finalization message | 83 | <p><a class="reference internal" href="../glossary/f.html#term-finalization"><em class="xref std std-term">Finalization</em></a> is implemented by posting a finalization message |
| 84 | (of type <a class="reference internal" href="finalization.html#mps_message_type_finalization" title="mps_message_type_finalization"><tt class="xref c c-func docutils literal"><span class="pre">mps_message_type_finalization()</span></tt></a>) to the arena’s | 84 | (of type <a class="reference internal" href="finalization.html#mps_message_type_finalization" title="mps_message_type_finalization"><tt class="xref c c-func docutils literal"><span class="pre">mps_message_type_finalization()</span></tt></a>) to the arena’s |
| 85 | message queue. This allows the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> to perform the | 85 | message queue. This allows the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> to perform the |
| @@ -91,7 +91,7 @@ removed from the message queue and discarded, by calling | |||
| 91 | <p>See <a class="reference internal" href="finalization.html#topic-finalization"><em>Finalization</em></a>.</p> | 91 | <p>See <a class="reference internal" href="finalization.html#topic-finalization"><em>Finalization</em></a>.</p> |
| 92 | </div> | 92 | </div> |
| 93 | <div class="section" id="example-interactive-chatter"> | 93 | <div class="section" id="example-interactive-chatter"> |
| 94 | <span id="index-2"></span><h2>11.2. Example: interactive chatter<a class="headerlink" href="#example-interactive-chatter" title="Permalink to this headline">¶</a></h2> | 94 | <span id="index-2"></span><h2>12.2. Example: interactive chatter<a class="headerlink" href="#example-interactive-chatter" title="Permalink to this headline">¶</a></h2> |
| 95 | <p>The toy Scheme interpreter enables garbage collection messages when | 95 | <p>The toy Scheme interpreter enables garbage collection messages when |
| 96 | started in interactive mode:</p> | 96 | started in interactive mode:</p> |
| 97 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_message_type_enable</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_message_type_gc</span><span class="p">());</span> | 97 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_message_type_enable</span><span class="p">(</span><span class="n">arena</span><span class="p">,</span> <span class="n">mps_message_type_gc</span><span class="p">());</span> |
| @@ -103,11 +103,11 @@ messages from the message queue and prints a description of the | |||
| 103 | contents of each one:</p> | 103 | contents of each one:</p> |
| 104 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">mps_chat</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> | 104 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">mps_chat</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> |
| 105 | <span class="p">{</span> | 105 | <span class="p">{</span> |
| 106 | <span class="kt">mps_message_type_t</span> <span class="n">type</span><span class="p">;</span> | 106 | <span class="n">mps_message_type_t</span> <span class="n">type</span><span class="p">;</span> |
| 107 | 107 | ||
| 108 | <span class="k">while</span> <span class="p">(</span><span class="n">mps_message_queue_type</span><span class="p">(</span><span class="o">&</span><span class="n">type</span><span class="p">,</span> <span class="n">arena</span><span class="p">))</span> <span class="p">{</span> | 108 | <span class="k">while</span> <span class="p">(</span><span class="n">mps_message_queue_type</span><span class="p">(</span><span class="o">&</span><span class="n">type</span><span class="p">,</span> <span class="n">arena</span><span class="p">))</span> <span class="p">{</span> |
| 109 | <span class="kt">mps_message_t</span> <span class="n">message</span><span class="p">;</span> | 109 | <span class="n">mps_message_t</span> <span class="n">message</span><span class="p">;</span> |
| 110 | <span class="kt">mps_bool_t</span> <span class="n">b</span><span class="p">;</span> | 110 | <span class="n">mps_bool_t</span> <span class="n">b</span><span class="p">;</span> |
| 111 | <span class="n">b</span> <span class="o">=</span> <span class="n">mps_message_get</span><span class="p">(</span><span class="o">&</span><span class="n">message</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">type</span><span class="p">);</span> | 111 | <span class="n">b</span> <span class="o">=</span> <span class="n">mps_message_get</span><span class="p">(</span><span class="o">&</span><span class="n">message</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> <span class="n">type</span><span class="p">);</span> |
| 112 | <span class="n">assert</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> <span class="cm">/* we just checked there was one */</span> | 112 | <span class="n">assert</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> <span class="cm">/* we just checked there was one */</span> |
| 113 | 113 | ||
| @@ -165,7 +165,7 @@ slowing Emacs down and tell them that it had been sped up.</div></blockquote> | |||
| 165 | </div> | 165 | </div> |
| 166 | </div> | 166 | </div> |
| 167 | <div class="section" id="message-types"> | 167 | <div class="section" id="message-types"> |
| 168 | <span id="index-3"></span><h2>11.3. Message types<a class="headerlink" href="#message-types" title="Permalink to this headline">¶</a></h2> | 168 | <span id="index-3"></span><h2>12.3. Message types<a class="headerlink" href="#message-types" title="Permalink to this headline">¶</a></h2> |
| 169 | <dl class="type"> | 169 | <dl class="type"> |
| 170 | <dt id="mps_message_type_t"> | 170 | <dt id="mps_message_type_t"> |
| 171 | <tt class="descname">mps_message_type_t</tt><a class="headerlink" href="#mps_message_type_t" title="Permalink to this definition">¶</a></dt> | 171 | <tt class="descname">mps_message_type_t</tt><a class="headerlink" href="#mps_message_type_t" title="Permalink to this definition">¶</a></dt> |
| @@ -221,7 +221,7 @@ already enabled, in which case it has no effect.</p> | |||
| 221 | 221 | ||
| 222 | </div> | 222 | </div> |
| 223 | <div class="section" id="message-interface"> | 223 | <div class="section" id="message-interface"> |
| 224 | <span id="index-4"></span><h2>11.4. Message interface<a class="headerlink" href="#message-interface" title="Permalink to this headline">¶</a></h2> | 224 | <span id="index-4"></span><h2>12.4. Message interface<a class="headerlink" href="#message-interface" title="Permalink to this headline">¶</a></h2> |
| 225 | <dl class="type"> | 225 | <dl class="type"> |
| 226 | <dt id="mps_message_t"> | 226 | <dt id="mps_message_t"> |
| 227 | <tt class="descname">mps_message_t</tt><a class="headerlink" href="#mps_message_t" title="Permalink to this definition">¶</a></dt> | 227 | <tt class="descname">mps_message_t</tt><a class="headerlink" href="#mps_message_t" title="Permalink to this definition">¶</a></dt> |
| @@ -297,7 +297,7 @@ not yet discarded.</p> | |||
| 297 | 297 | ||
| 298 | </div> | 298 | </div> |
| 299 | <div class="section" id="message-queue-interface"> | 299 | <div class="section" id="message-queue-interface"> |
| 300 | <span id="index-5"></span><h2>11.5. Message queue interface<a class="headerlink" href="#message-queue-interface" title="Permalink to this headline">¶</a></h2> | 300 | <span id="index-5"></span><h2>12.5. Message queue interface<a class="headerlink" href="#message-queue-interface" title="Permalink to this headline">¶</a></h2> |
| 301 | <dl class="function"> | 301 | <dl class="function"> |
| 302 | <dt id="mps_message_get"> | 302 | <dt id="mps_message_get"> |
| 303 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_message_get</tt><big>(</big><a class="reference internal" href="#mps_message_t" title="mps_message_t">mps_message_t</a><em> *message_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a><em> message_type</em><big>)</big><a class="headerlink" href="#mps_message_get" title="Permalink to this definition">¶</a></dt> | 303 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_message_get</tt><big>(</big><a class="reference internal" href="#mps_message_t" title="mps_message_t">mps_message_t</a><em> *message_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_message_type_t" title="mps_message_type_t">mps_message_type_t</a><em> message_type</em><big>)</big><a class="headerlink" href="#mps_message_get" title="Permalink to this definition">¶</a></dt> |
| @@ -362,22 +362,22 @@ usually simpler to call <a class="reference internal" href="#mps_message_get" ti | |||
| 362 | </a></p> | 362 | </a></p> |
| 363 | <h3><a href="../index.html">Table Of Contents</a></h3> | 363 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 364 | <ul> | 364 | <ul> |
| 365 | <li><a class="reference internal" href="#">11. Messages</a><ul> | 365 | <li><a class="reference internal" href="#">12. Messages</a><ul> |
| 366 | <li><a class="reference internal" href="#finalization-messages">11.1. Finalization messages</a></li> | 366 | <li><a class="reference internal" href="#finalization-messages">12.1. Finalization messages</a></li> |
| 367 | <li><a class="reference internal" href="#example-interactive-chatter">11.2. Example: interactive chatter</a></li> | 367 | <li><a class="reference internal" href="#example-interactive-chatter">12.2. Example: interactive chatter</a></li> |
| 368 | <li><a class="reference internal" href="#message-types">11.3. Message types</a></li> | 368 | <li><a class="reference internal" href="#message-types">12.3. Message types</a></li> |
| 369 | <li><a class="reference internal" href="#message-interface">11.4. Message interface</a></li> | 369 | <li><a class="reference internal" href="#message-interface">12.4. Message interface</a></li> |
| 370 | <li><a class="reference internal" href="#message-queue-interface">11.5. Message queue interface</a></li> | 370 | <li><a class="reference internal" href="#message-queue-interface">12.5. Message queue interface</a></li> |
| 371 | </ul> | 371 | </ul> |
| 372 | </li> | 372 | </li> |
| 373 | </ul> | 373 | </ul> |
| 374 | 374 | ||
| 375 | <h4>Previous topic</h4> | 375 | <h4>Previous topic</h4> |
| 376 | <p class="topless"><a href="collection.html" | 376 | <p class="topless"><a href="collection.html" |
| 377 | title="previous chapter">10. Garbage collection</a></p> | 377 | title="previous chapter">11. Garbage collection</a></p> |
| 378 | <h4>Next topic</h4> | 378 | <h4>Next topic</h4> |
| 379 | <p class="topless"><a href="finalization.html" | 379 | <p class="topless"><a href="finalization.html" |
| 380 | title="next chapter">12. Finalization</a></p><h4>Downloads</h4> | 380 | title="next chapter">13. Finalization</a></p><h4>Downloads</h4> |
| 381 | 381 | ||
| 382 | <p class="topless"> | 382 | <p class="topless"> |
| 383 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 383 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -403,10 +403,10 @@ usually simpler to call <a class="reference internal" href="#mps_message_get" ti | |||
| 403 | <a href="../genindex.html" title="General Index" | 403 | <a href="../genindex.html" title="General Index" |
| 404 | >index</a></li> | 404 | >index</a></li> |
| 405 | <li class="right" > | 405 | <li class="right" > |
| 406 | <a href="finalization.html" title="12. Finalization" | 406 | <a href="finalization.html" title="13. Finalization" |
| 407 | >next</a> |</li> | 407 | >next</a> |</li> |
| 408 | <li class="right" > | 408 | <li class="right" > |
| 409 | <a href="collection.html" title="10. Garbage collection" | 409 | <a href="collection.html" title="11. Garbage collection" |
| 410 | >previous</a> |</li> | 410 | >previous</a> |</li> |
| 411 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 411 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 412 | <li><a href="index.html" >Reference</a> »</li> | 412 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/pattern.html b/mps/manual/html/topic/pattern.html index 2e677d70a96..abd9ef06d87 100644 --- a/mps/manual/html/topic/pattern.html +++ b/mps/manual/html/topic/pattern.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>15. Allocation patterns — Memory Pool System 1.111.0 documentation</title> | 11 | <title>16. Allocation patterns — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="16. Allocation frames" href="frame.html" /> | 31 | <link rel="next" title="17. Allocation frames" href="frame.html" /> |
| 32 | <link rel="prev" title="14. Segregated allocation caches" href="cache.html" /> | 32 | <link rel="prev" title="15. Segregated allocation caches" href="cache.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="frame.html" title="16. Allocation frames" | 42 | <a href="frame.html" title="17. Allocation frames" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="cache.html" title="14. Segregated allocation caches" | 45 | <a href="cache.html" title="15. Segregated allocation caches" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="allocation-patterns"> | 57 | <div class="section" id="allocation-patterns"> |
| 58 | <span id="topic-pattern"></span><span id="index-0"></span><h1>15. Allocation patterns<a class="headerlink" href="#allocation-patterns" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-pattern"></span><span id="index-0"></span><h1>16. Allocation patterns<a class="headerlink" href="#allocation-patterns" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>An <em class="dfn">allocation pattern</em> is a hint to the MPS to expect a | 59 | <p>An <em class="dfn">allocation pattern</em> is a hint to the MPS to expect a |
| 60 | particular pattern of allocation on an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>. The | 60 | particular pattern of allocation on an <a class="reference internal" href="../glossary/a.html#term-allocation-point"><em class="xref std std-term">allocation point</em></a>. The |
| 61 | MPS may use this hint to schedule more effective garbage collection.</p> | 61 | MPS may use this hint to schedule more effective garbage collection.</p> |
| @@ -129,7 +129,7 @@ that point in time.</p> | |||
| 129 | </dd></dl> | 129 | </dd></dl> |
| 130 | 130 | ||
| 131 | <div class="section" id="ramp-allocation"> | 131 | <div class="section" id="ramp-allocation"> |
| 132 | <span id="topic-pattern-ramp"></span><span id="index-1"></span><h2>15.1. Ramp allocation<a class="headerlink" href="#ramp-allocation" title="Permalink to this headline">¶</a></h2> | 132 | <span id="topic-pattern-ramp"></span><span id="index-1"></span><h2>16.1. Ramp allocation<a class="headerlink" href="#ramp-allocation" title="Permalink to this headline">¶</a></h2> |
| 133 | <p><em class="dfn">Ramp allocation</em> a pattern of allocation whereby the | 133 | <p><em class="dfn">Ramp allocation</em> a pattern of allocation whereby the |
| 134 | <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> builds up an increasingly large data structure, | 134 | <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> builds up an increasingly large data structure, |
| 135 | the live size of which increases until a particular time, at which | 135 | the live size of which increases until a particular time, at which |
| @@ -187,18 +187,18 @@ ended.</p> | |||
| 187 | </a></p> | 187 | </a></p> |
| 188 | <h3><a href="../index.html">Table Of Contents</a></h3> | 188 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 189 | <ul> | 189 | <ul> |
| 190 | <li><a class="reference internal" href="#">15. Allocation patterns</a><ul> | 190 | <li><a class="reference internal" href="#">16. Allocation patterns</a><ul> |
| 191 | <li><a class="reference internal" href="#ramp-allocation">15.1. Ramp allocation</a></li> | 191 | <li><a class="reference internal" href="#ramp-allocation">16.1. Ramp allocation</a></li> |
| 192 | </ul> | 192 | </ul> |
| 193 | </li> | 193 | </li> |
| 194 | </ul> | 194 | </ul> |
| 195 | 195 | ||
| 196 | <h4>Previous topic</h4> | 196 | <h4>Previous topic</h4> |
| 197 | <p class="topless"><a href="cache.html" | 197 | <p class="topless"><a href="cache.html" |
| 198 | title="previous chapter">14. Segregated allocation caches</a></p> | 198 | title="previous chapter">15. Segregated allocation caches</a></p> |
| 199 | <h4>Next topic</h4> | 199 | <h4>Next topic</h4> |
| 200 | <p class="topless"><a href="frame.html" | 200 | <p class="topless"><a href="frame.html" |
| 201 | title="next chapter">16. Allocation frames</a></p><h4>Downloads</h4> | 201 | title="next chapter">17. Allocation frames</a></p><h4>Downloads</h4> |
| 202 | 202 | ||
| 203 | <p class="topless"> | 203 | <p class="topless"> |
| 204 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 204 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -224,10 +224,10 @@ ended.</p> | |||
| 224 | <a href="../genindex.html" title="General Index" | 224 | <a href="../genindex.html" title="General Index" |
| 225 | >index</a></li> | 225 | >index</a></li> |
| 226 | <li class="right" > | 226 | <li class="right" > |
| 227 | <a href="frame.html" title="16. Allocation frames" | 227 | <a href="frame.html" title="17. Allocation frames" |
| 228 | >next</a> |</li> | 228 | >next</a> |</li> |
| 229 | <li class="right" > | 229 | <li class="right" > |
| 230 | <a href="cache.html" title="14. Segregated allocation caches" | 230 | <a href="cache.html" title="15. Segregated allocation caches" |
| 231 | >previous</a> |</li> | 231 | >previous</a> |</li> |
| 232 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 232 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 233 | <li><a href="index.html" >Reference</a> »</li> | 233 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/plinth.html b/mps/manual/html/topic/plinth.html index cb9a212e302..ef82a373bc7 100644 --- a/mps/manual/html/topic/plinth.html +++ b/mps/manual/html/topic/plinth.html | |||
| @@ -218,13 +218,13 @@ scheduling decisions and the quality of telemetry output. For | |||
| 218 | instance, with <tt class="docutils literal"><span class="pre">getrusage()</span></tt>:</p> | 218 | instance, with <tt class="docutils literal"><span class="pre">getrusage()</span></tt>:</p> |
| 219 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include <sys/resource.h></span> | 219 | <div class="highlight-c"><div class="highlight"><pre><span class="cp">#include <sys/resource.h></span> |
| 220 | 220 | ||
| 221 | <span class="kt">mps_clock_t</span> <span class="nf">mps_clock</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> | 221 | <span class="n">mps_clock_t</span> <span class="nf">mps_clock</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> |
| 222 | <span class="k">struct</span> <span class="n">rusage</span> <span class="n">s</span><span class="p">;</span> | 222 | <span class="k">struct</span> <span class="n">rusage</span> <span class="n">s</span><span class="p">;</span> |
| 223 | <span class="kt">int</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getrusage</span><span class="p">(</span><span class="n">RUSAGE_SELF</span><span class="p">,</span> <span class="o">&</span><span class="n">s</span><span class="p">);</span> | 223 | <span class="kt">int</span> <span class="n">res</span> <span class="o">=</span> <span class="n">getrusage</span><span class="p">(</span><span class="n">RUSAGE_SELF</span><span class="p">,</span> <span class="o">&</span><span class="n">s</span><span class="p">);</span> |
| 224 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> | 224 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> |
| 225 | <span class="cm">/* handle error */</span> | 225 | <span class="cm">/* handle error */</span> |
| 226 | <span class="p">}</span> | 226 | <span class="p">}</span> |
| 227 | <span class="k">return</span> <span class="p">((</span><span class="kt">mps_clock_t</span><span class="p">)</span><span class="n">s</span><span class="p">.</span><span class="n">ru_utime</span><span class="p">.</span><span class="n">tv_sec</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000000</span> <span class="o">+</span> <span class="n">s</span><span class="p">.</span><span class="n">ru_utime</span><span class="p">.</span><span class="n">tv_usec</span><span class="p">;</span> | 227 | <span class="k">return</span> <span class="p">((</span><span class="n">mps_clock_t</span><span class="p">)</span><span class="n">s</span><span class="p">.</span><span class="n">ru_utime</span><span class="p">.</span><span class="n">tv_sec</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000000</span> <span class="o">+</span> <span class="n">s</span><span class="p">.</span><span class="n">ru_utime</span><span class="p">.</span><span class="n">tv_usec</span><span class="p">;</span> |
| 228 | <span class="p">}</span> | 228 | <span class="p">}</span> |
| 229 | </pre></div> | 229 | </pre></div> |
| 230 | </div> | 230 | </div> |
diff --git a/mps/manual/html/topic/pool.html b/mps/manual/html/topic/pool.html index 41a59d242b9..090b1b45ffd 100644 --- a/mps/manual/html/topic/pool.html +++ b/mps/manual/html/topic/pool.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>4. Pools — Memory Pool System 1.111.0 documentation</title> | 11 | <title>5. Pools — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="5. Allocation" href="allocation.html" /> | 31 | <link rel="next" title="6. Allocation" href="allocation.html" /> |
| 32 | <link rel="prev" title="3. Arenas" href="arena.html" /> | 32 | <link rel="prev" title="4. Arenas" href="arena.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="allocation.html" title="5. Allocation" | 42 | <a href="allocation.html" title="6. Allocation" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="arena.html" title="3. Arenas" | 45 | <a href="arena.html" title="4. Arenas" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="pools"> | 57 | <div class="section" id="pools"> |
| 58 | <span id="topic-pool"></span><span id="index-0"></span><h1>4. Pools<a class="headerlink" href="#pools" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-pool"></span><span id="index-0"></span><h1>5. Pools<a class="headerlink" href="#pools" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>Within an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> a client program creates one or more pools. A | 59 | <p>Within an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> a client program creates one or more pools. A |
| 60 | pool is responsible for requesting memory from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> and | 60 | pool is responsible for requesting memory from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> and |
| 61 | making it available for allocation.</p> | 61 | making it available for allocation.</p> |
| @@ -70,31 +70,46 @@ and making it available to the <a class="reference internal" href="../glossary/c | |||
| 70 | 70 | ||
| 71 | <dl class="function"> | 71 | <dl class="function"> |
| 72 | <dt id="mps_pool_create"> | 72 | <dt id="mps_pool_create"> |
| 73 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_pool_create</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_class_t" title="mps_class_t">mps_class_t</a><em> class</em>, ...<big>)</big><a class="headerlink" href="#mps_pool_create" title="Permalink to this definition">¶</a></dt> | 73 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_pool_create</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_class_t" title="mps_class_t">mps_class_t</a><em> class</em>, <a class="reference internal" href="keyword.html#mps_arg_s" title="mps_arg_s">mps_arg_s</a><em> args[]</em><big>)</big><a class="headerlink" href="#mps_pool_create" title="Permalink to this definition">¶</a></dt> |
| 74 | <dd><p>Create a <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a> in an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> | 74 | <dd><p>Create a <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a> in an <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a>.</p> |
| 75 | <p><tt class="docutils literal"><span class="pre">pool_o</span></tt> points to a location that will hold a pointer to the new | 75 | <p><tt class="docutils literal"><span class="pre">pool_o</span></tt> points to a location that will hold a pointer to the new |
| 76 | pool.</p> | 76 | pool.</p> |
| 77 | <p><tt class="docutils literal"><span class="pre">arena</span></tt> is the arena in which to create the pool.</p> | 77 | <p><tt class="docutils literal"><span class="pre">arena</span></tt> is the arena in which to create the pool.</p> |
| 78 | <p><tt class="docutils literal"><span class="pre">class</span></tt> is the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> of the new pool.</p> | 78 | <p><tt class="docutils literal"><span class="pre">class</span></tt> is the <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> of the new pool.</p> |
| 79 | <p>Some pool classes require additional arguments to be passed to | 79 | <p><tt class="docutils literal"><span class="pre">args</span></tt> are <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword arguments</em></a> specific to the pool class. |
| 80 | <a class="reference internal" href="#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a>. See the documentation for the pool | 80 | See the documentation for the pool class.</p> |
| 81 | class.</p> | ||
| 82 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the pool is created successfully, | 81 | <p>Returns <a class="reference internal" href="error.html#MPS_RES_OK" title="MPS_RES_OK"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RES_OK</span></tt></a> if the pool is created successfully, |
| 83 | or another <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> otherwise.</p> | 82 | or another <a class="reference internal" href="../glossary/r.html#term-result-code"><em class="xref std std-term">result code</em></a> otherwise.</p> |
| 84 | <p>The pool persists until it is destroyed by calling | 83 | <p>The pool persists until it is destroyed by calling |
| 85 | <a class="reference internal" href="#mps_pool_destroy" title="mps_pool_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_destroy()</span></tt></a>.</p> | 84 | <a class="reference internal" href="#mps_pool_destroy" title="mps_pool_destroy"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_destroy()</span></tt></a>.</p> |
| 86 | <div class="admonition-note admonition"> | 85 | </dd></dl> |
| 87 | <p class="first admonition-title">Note</p> | 86 | |
| 88 | <p class="last">There’s an alternative function <tt class="xref c c-func docutils literal"><span class="pre">pool_create_v()</span></tt> that | 87 | <dl class="function"> |
| 89 | takes its extra arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> | 88 | <dt> |
| 90 | <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> | 89 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_pool_create</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_class_t" title="mps_class_t">mps_class_t</a><em> class</em>, ...<big>)</big></dt> |
| 90 | <dd><div class="admonition-deprecated admonition"> | ||
| 91 | <p class="first admonition-title">Deprecated</p> | ||
| 92 | <p>starting with version 1.112.</p> | ||
| 93 | <p class="last">Use <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 94 | arguments</em></a> interface is more reliable and produces better | ||
| 95 | error messages.</p> | ||
| 91 | </div> | 96 | </div> |
| 97 | <p>An alternative to <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> that takes its | ||
| 98 | extra arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> variable argument | ||
| 99 | list mechanism.</p> | ||
| 92 | </dd></dl> | 100 | </dd></dl> |
| 93 | 101 | ||
| 94 | <dl class="function"> | 102 | <dl class="function"> |
| 95 | <dt id="mps_pool_create_v"> | 103 | <dt id="mps_pool_create_v"> |
| 96 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_pool_create_v</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_class_t" title="mps_class_t">mps_class_t</a><em> class</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_pool_create_v" title="Permalink to this definition">¶</a></dt> | 104 | <a class="reference internal" href="error.html#mps_res_t" title="mps_res_t">mps_res_t</a> <tt class="descname">mps_pool_create_v</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_class_t" title="mps_class_t">mps_class_t</a><em> class</em>, va_list<em> args</em><big>)</big><a class="headerlink" href="#mps_pool_create_v" title="Permalink to this definition">¶</a></dt> |
| 97 | <dd><p>An alternative to <a class="reference internal" href="#mps_pool_create" title="mps_pool_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create()</span></tt></a> that takes its extra | 105 | <dd><div class="admonition-deprecated admonition"> |
| 106 | <p class="first admonition-title">Deprecated</p> | ||
| 107 | <p>starting with version 1.112.</p> | ||
| 108 | <p class="last">Use <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> instead: the <a class="reference internal" href="../glossary/k.html#term-keyword-argument"><em class="xref std std-term">keyword | ||
| 109 | arguments</em></a> interface is more reliable and produces better | ||
| 110 | error messages.</p> | ||
| 111 | </div> | ||
| 112 | <p>An alternative to <tt class="xref c c-func docutils literal"><span class="pre">mps_pool_create_k()</span></tt> that takes its extra | ||
| 98 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> | 113 | arguments using the standard <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> <tt class="docutils literal"><span class="pre">va_list</span></tt> mechanism.</p> |
| 99 | </dd></dl> | 114 | </dd></dl> |
| 100 | 115 | ||
| @@ -114,7 +129,7 @@ created in the pool.</p> | |||
| 114 | </dd></dl> | 129 | </dd></dl> |
| 115 | 130 | ||
| 116 | <div class="section" id="pool-classes"> | 131 | <div class="section" id="pool-classes"> |
| 117 | <span id="index-1"></span><h2>4.1. Pool classes<a class="headerlink" href="#pool-classes" title="Permalink to this headline">¶</a></h2> | 132 | <span id="index-1"></span><h2>5.1. Pool classes<a class="headerlink" href="#pool-classes" title="Permalink to this headline">¶</a></h2> |
| 118 | <p>Pools belong to <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> that specify policies for how | 133 | <p>Pools belong to <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">pool classes</em></a> that specify policies for how |
| 119 | their memory is managed. Some pools are <a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manually managed</em></a> (you must call <a class="reference internal" href="allocation.html#mps_free" title="mps_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_free()</span></tt></a> to | 134 | their memory is managed. Some pools are <a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manually managed</em></a> (you must call <a class="reference internal" href="allocation.html#mps_free" title="mps_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_free()</span></tt></a> to |
| 120 | return a block of memory to the pool) and others are | 135 | return a block of memory to the pool) and others are |
| @@ -134,7 +149,7 @@ it is too late to change it now.</p> | |||
| 134 | 149 | ||
| 135 | </div> | 150 | </div> |
| 136 | <div class="section" id="pool-introspection"> | 151 | <div class="section" id="pool-introspection"> |
| 137 | <span id="index-2"></span><h2>4.2. Pool introspection<a class="headerlink" href="#pool-introspection" title="Permalink to this headline">¶</a></h2> | 152 | <span id="index-2"></span><h2>5.2. Pool introspection<a class="headerlink" href="#pool-introspection" title="Permalink to this headline">¶</a></h2> |
| 138 | <dl class="function"> | 153 | <dl class="function"> |
| 139 | <dt id="mps_addr_pool"> | 154 | <dt id="mps_addr_pool"> |
| 140 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_addr_pool</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_addr_pool" title="Permalink to this definition">¶</a></dt> | 155 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">mps_addr_pool</tt><big>(</big><a class="reference internal" href="#mps_pool_t" title="mps_pool_t">mps_pool_t</a><em> *pool_o</em>, <a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> addr</em><big>)</big><a class="headerlink" href="#mps_addr_pool" title="Permalink to this definition">¶</a></dt> |
| @@ -178,19 +193,19 @@ the <a class="reference internal" href="../glossary/p.html#term-parked-state"><e | |||
| 178 | </a></p> | 193 | </a></p> |
| 179 | <h3><a href="../index.html">Table Of Contents</a></h3> | 194 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 180 | <ul> | 195 | <ul> |
| 181 | <li><a class="reference internal" href="#">4. Pools</a><ul> | 196 | <li><a class="reference internal" href="#">5. Pools</a><ul> |
| 182 | <li><a class="reference internal" href="#pool-classes">4.1. Pool classes</a></li> | 197 | <li><a class="reference internal" href="#pool-classes">5.1. Pool classes</a></li> |
| 183 | <li><a class="reference internal" href="#pool-introspection">4.2. Pool introspection</a></li> | 198 | <li><a class="reference internal" href="#pool-introspection">5.2. Pool introspection</a></li> |
| 184 | </ul> | 199 | </ul> |
| 185 | </li> | 200 | </li> |
| 186 | </ul> | 201 | </ul> |
| 187 | 202 | ||
| 188 | <h4>Previous topic</h4> | 203 | <h4>Previous topic</h4> |
| 189 | <p class="topless"><a href="arena.html" | 204 | <p class="topless"><a href="arena.html" |
| 190 | title="previous chapter">3. Arenas</a></p> | 205 | title="previous chapter">4. Arenas</a></p> |
| 191 | <h4>Next topic</h4> | 206 | <h4>Next topic</h4> |
| 192 | <p class="topless"><a href="allocation.html" | 207 | <p class="topless"><a href="allocation.html" |
| 193 | title="next chapter">5. Allocation</a></p><h4>Downloads</h4> | 208 | title="next chapter">6. Allocation</a></p><h4>Downloads</h4> |
| 194 | 209 | ||
| 195 | <p class="topless"> | 210 | <p class="topless"> |
| 196 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 211 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -216,10 +231,10 @@ the <a class="reference internal" href="../glossary/p.html#term-parked-state"><e | |||
| 216 | <a href="../genindex.html" title="General Index" | 231 | <a href="../genindex.html" title="General Index" |
| 217 | >index</a></li> | 232 | >index</a></li> |
| 218 | <li class="right" > | 233 | <li class="right" > |
| 219 | <a href="allocation.html" title="5. Allocation" | 234 | <a href="allocation.html" title="6. Allocation" |
| 220 | >next</a> |</li> | 235 | >next</a> |</li> |
| 221 | <li class="right" > | 236 | <li class="right" > |
| 222 | <a href="arena.html" title="3. Arenas" | 237 | <a href="arena.html" title="4. Arenas" |
| 223 | >previous</a> |</li> | 238 | >previous</a> |</li> |
| 224 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 239 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 225 | <li><a href="index.html" >Reference</a> »</li> | 240 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/root.html b/mps/manual/html/topic/root.html index 7a505831331..3b8534782a4 100644 --- a/mps/manual/html/topic/root.html +++ b/mps/manual/html/topic/root.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>9. Roots — Memory Pool System 1.111.0 documentation</title> | 11 | <title>10. Roots — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="10. Garbage collection" href="collection.html" /> | 31 | <link rel="next" title="11. Garbage collection" href="collection.html" /> |
| 32 | <link rel="prev" title="8. Threads" href="thread.html" /> | 32 | <link rel="prev" title="9. Threads" href="thread.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="collection.html" title="10. Garbage collection" | 42 | <a href="collection.html" title="11. Garbage collection" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="thread.html" title="8. Threads" | 45 | <a href="thread.html" title="9. Threads" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="roots"> | 57 | <div class="section" id="roots"> |
| 58 | <span id="topic-root"></span><span id="index-0"></span><h1>9. Roots<a class="headerlink" href="#roots" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-root"></span><span id="index-0"></span><h1>10. Roots<a class="headerlink" href="#roots" title="Permalink to this headline">¶</a></h1> |
| 59 | <p><a class="reference internal" href="../glossary/r.html#term-root"><em class="xref std std-term">Roots</em></a> tell the <a class="reference internal" href="../glossary/g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a> where to start | 59 | <p><a class="reference internal" href="../glossary/r.html#term-root"><em class="xref std std-term">Roots</em></a> tell the <a class="reference internal" href="../glossary/g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a> where to start |
| 60 | <a class="reference internal" href="../glossary/t.html#term-trace"><em class="xref std std-term">tracing</em></a>. The garbage collector determines which blocks | 60 | <a class="reference internal" href="../glossary/t.html#term-trace"><em class="xref std std-term">tracing</em></a>. The garbage collector determines which blocks |
| 61 | are <a class="reference internal" href="../glossary/r.html#term-reachable"><em class="xref std std-term">reachable</em></a> from the roots, and (in <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically | 61 | are <a class="reference internal" href="../glossary/r.html#term-reachable"><em class="xref std std-term">reachable</em></a> from the roots, and (in <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically |
| @@ -70,7 +70,7 @@ all references stored in static data are roots; the Memory Pool System | |||
| 70 | is more flexible, but requires the client program to declare which | 70 | is more flexible, but requires the client program to declare which |
| 71 | references are roots.</p> | 71 | references are roots.</p> |
| 72 | <div class="section" id="registering-roots"> | 72 | <div class="section" id="registering-roots"> |
| 73 | <span id="index-1"></span><h2>9.1. Registering roots<a class="headerlink" href="#registering-roots" title="Permalink to this headline">¶</a></h2> | 73 | <span id="index-1"></span><h2>10.1. Registering roots<a class="headerlink" href="#registering-roots" title="Permalink to this headline">¶</a></h2> |
| 74 | <p>You can register a root at any time by calling one of the | 74 | <p>You can register a root at any time by calling one of the |
| 75 | <tt class="docutils literal"><span class="pre">mps_root_create</span></tt> functions. Roots may not be registered twice, and | 75 | <tt class="docutils literal"><span class="pre">mps_root_create</span></tt> functions. Roots may not be registered twice, and |
| 76 | no two roots may overlap (that is, each reference is <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fixed</em></a> by | 76 | no two roots may overlap (that is, each reference is <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fixed</em></a> by |
| @@ -129,7 +129,7 @@ registers and control stack of a thread. See | |||
| 129 | </ol> | 129 | </ol> |
| 130 | </div> | 130 | </div> |
| 131 | <div class="section" id="cautions"> | 131 | <div class="section" id="cautions"> |
| 132 | <span id="index-2"></span><h2>9.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> | 132 | <span id="index-2"></span><h2>10.2. Cautions<a class="headerlink" href="#cautions" title="Permalink to this headline">¶</a></h2> |
| 133 | <p>Creating a root and then registering is similar to reserving a block | 133 | <p>Creating a root and then registering is similar to reserving a block |
| 134 | and then committing it (in the | 134 | and then committing it (in the |
| 135 | <a class="reference internal" href="allocation.html#topic-allocation-point-protocol"><em>Allocation point protocol</em></a>), and similar <a class="reference internal" href="allocation.html#topic-allocation-cautions"><em>cautions</em></a> apply. Before registering a root:</p> | 135 | <a class="reference internal" href="allocation.html#topic-allocation-point-protocol"><em>Allocation point protocol</em></a>), and similar <a class="reference internal" href="allocation.html#topic-allocation-cautions"><em>cautions</em></a> apply. Before registering a root:</p> |
| @@ -152,7 +152,7 @@ values.</li> | |||
| 152 | </ol> | 152 | </ol> |
| 153 | </div> | 153 | </div> |
| 154 | <div class="section" id="thread-roots"> | 154 | <div class="section" id="thread-roots"> |
| 155 | <span id="topic-root-thread"></span><span id="index-3"></span><h2>9.3. Thread roots<a class="headerlink" href="#thread-roots" title="Permalink to this headline">¶</a></h2> | 155 | <span id="topic-root-thread"></span><span id="index-3"></span><h2>10.3. Thread roots<a class="headerlink" href="#thread-roots" title="Permalink to this headline">¶</a></h2> |
| 156 | <p>Every thread’s registers and control stack potentially contain | 156 | <p>Every thread’s registers and control stack potentially contain |
| 157 | references to allocated objects, so should be registered as a root by | 157 | references to allocated objects, so should be registered as a root by |
| 158 | calling <a class="reference internal" href="#mps_root_create_reg" title="mps_root_create_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_reg()</span></tt></a>. It’s not easy to write a | 158 | calling <a class="reference internal" href="#mps_root_create_reg" title="mps_root_create_reg"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create_reg()</span></tt></a>. It’s not easy to write a |
| @@ -168,8 +168,8 @@ the work function is not inlined so that the address is definitely in | |||
| 168 | the stack frame below any potential roots.</p> | 168 | the stack frame below any potential roots.</p> |
| 169 | <p id="index-4">For example, here’s the code from the toy Scheme interpreter that | 169 | <p id="index-4">For example, here’s the code from the toy Scheme interpreter that |
| 170 | registers a thread root and then calls the program:</p> | 170 | registers a thread root and then calls the program:</p> |
| 171 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_thr_t</span> <span class="kr">thread</span><span class="p">;</span> | 171 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_thr_t</span> <span class="kr">thread</span><span class="p">;</span> |
| 172 | <span class="kt">mps_root_t</span> <span class="n">reg_root</span><span class="p">;</span> | 172 | <span class="n">mps_root_t</span> <span class="n">reg_root</span><span class="p">;</span> |
| 173 | <span class="kt">int</span> <span class="n">exit_code</span><span class="p">;</span> | 173 | <span class="kt">int</span> <span class="n">exit_code</span><span class="p">;</span> |
| 174 | <span class="kt">void</span> <span class="o">*</span><span class="n">marker</span> <span class="o">=</span> <span class="o">&</span><span class="n">marker</span><span class="p">;</span> | 174 | <span class="kt">void</span> <span class="o">*</span><span class="n">marker</span> <span class="o">=</span> <span class="o">&</span><span class="n">marker</span><span class="p">;</span> |
| 175 | 175 | ||
| @@ -194,7 +194,7 @@ registers a thread root and then calls the program:</p> | |||
| 194 | </div> | 194 | </div> |
| 195 | </div> | 195 | </div> |
| 196 | <div class="section" id="ranks"> | 196 | <div class="section" id="ranks"> |
| 197 | <span id="index-5"></span><h2>9.4. Ranks<a class="headerlink" href="#ranks" title="Permalink to this headline">¶</a></h2> | 197 | <span id="index-5"></span><h2>10.4. Ranks<a class="headerlink" href="#ranks" title="Permalink to this headline">¶</a></h2> |
| 198 | <dl class="type"> | 198 | <dl class="type"> |
| 199 | <dt id="mps_rank_t"> | 199 | <dt id="mps_rank_t"> |
| 200 | <tt class="descname">mps_rank_t</tt><a class="headerlink" href="#mps_rank_t" title="Permalink to this definition">¶</a></dt> | 200 | <tt class="descname">mps_rank_t</tt><a class="headerlink" href="#mps_rank_t" title="Permalink to this definition">¶</a></dt> |
| @@ -222,7 +222,7 @@ and clarity.</p> | |||
| 222 | 222 | ||
| 223 | </div> | 223 | </div> |
| 224 | <div class="section" id="root-modes"> | 224 | <div class="section" id="root-modes"> |
| 225 | <span id="index-6"></span><h2>9.5. Root modes<a class="headerlink" href="#root-modes" title="Permalink to this headline">¶</a></h2> | 225 | <span id="index-6"></span><h2>10.5. Root modes<a class="headerlink" href="#root-modes" title="Permalink to this headline">¶</a></h2> |
| 226 | <p>The root mode provides a way for the client to declare various facts | 226 | <p>The root mode provides a way for the client to declare various facts |
| 227 | about a root that allow the MPS to make optimizations. Roots that are | 227 | about a root that allow the MPS to make optimizations. Roots that are |
| 228 | declared to be <em>constant</em> need not be re-scanned, and roots that are | 228 | declared to be <em>constant</em> need not be re-scanned, and roots that are |
| @@ -291,7 +291,7 @@ operating systems can’t cope with writing to protected pages.</p> | |||
| 291 | 291 | ||
| 292 | </div> | 292 | </div> |
| 293 | <div class="section" id="root-interface"> | 293 | <div class="section" id="root-interface"> |
| 294 | <span id="index-7"></span><h2>9.6. Root interface<a class="headerlink" href="#root-interface" title="Permalink to this headline">¶</a></h2> | 294 | <span id="index-7"></span><h2>10.6. Root interface<a class="headerlink" href="#root-interface" title="Permalink to this headline">¶</a></h2> |
| 295 | <dl class="type"> | 295 | <dl class="type"> |
| 296 | <dt id="mps_root_t"> | 296 | <dt id="mps_root_t"> |
| 297 | <tt class="descname">mps_root_t</tt><a class="headerlink" href="#mps_root_t" title="Permalink to this definition">¶</a></dt> | 297 | <tt class="descname">mps_root_t</tt><a class="headerlink" href="#mps_root_t" title="Permalink to this definition">¶</a></dt> |
| @@ -499,17 +499,17 @@ calling <a class="reference internal" href="#mps_root_destroy" title="mps_root_d | |||
| 499 | <span class="cm">/* Global symbol table. */</span> | 499 | <span class="cm">/* Global symbol table. */</span> |
| 500 | <span class="kt">size_t</span> <span class="n">symtab_size</span><span class="p">;</span> | 500 | <span class="kt">size_t</span> <span class="n">symtab_size</span><span class="p">;</span> |
| 501 | <span class="k">struct</span> <span class="p">{</span> | 501 | <span class="k">struct</span> <span class="p">{</span> |
| 502 | <span class="kt">obj_t</span> <span class="n">symbol</span><span class="p">;</span> | 502 | <span class="n">obj_t</span> <span class="n">symbol</span><span class="p">;</span> |
| 503 | <span class="kt">obj_t</span> <span class="n">value</span><span class="p">;</span> | 503 | <span class="n">obj_t</span> <span class="n">value</span><span class="p">;</span> |
| 504 | <span class="p">}</span> <span class="o">*</span><span class="n">symtab</span><span class="p">;</span> | 504 | <span class="p">}</span> <span class="o">*</span><span class="n">symtab</span><span class="p">;</span> |
| 505 | 505 | ||
| 506 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 506 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 507 | <span class="kt">mps_root_t</span> <span class="n">root</span><span class="p">;</span> | 507 | <span class="n">mps_root_t</span> <span class="n">root</span><span class="p">;</span> |
| 508 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table_masked</span><span class="p">(</span><span class="o">&</span><span class="n">root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> | 508 | <span class="n">res</span> <span class="o">=</span> <span class="n">mps_root_create_table_masked</span><span class="p">(</span><span class="o">&</span><span class="n">root</span><span class="p">,</span> <span class="n">arena</span><span class="p">,</span> |
| 509 | <span class="n">mps_rank_exact</span><span class="p">(),</span> | 509 | <span class="n">mps_rank_exact</span><span class="p">(),</span> |
| 510 | <span class="p">(</span><span class="kt">mps_rm_t</span><span class="p">)</span><span class="mi">0</span><span class="p">,</span> | 510 | <span class="p">(</span><span class="n">mps_rm_t</span><span class="p">)</span><span class="mi">0</span><span class="p">,</span> |
| 511 | <span class="n">symtab</span><span class="p">,</span> <span class="n">symtab_size</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> | 511 | <span class="n">symtab</span><span class="p">,</span> <span class="n">symtab_size</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> |
| 512 | <span class="p">(</span><span class="kt">mps_word_t</span><span class="p">)</span><span class="n">TAG_MASK</span><span class="p">);</span> | 512 | <span class="p">(</span><span class="n">mps_word_t</span><span class="p">)</span><span class="n">TAG_MASK</span><span class="p">);</span> |
| 513 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">errror</span><span class="p">(</span><span class="s">"can't create symtab root"</span><span class="p">);</span> | 513 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="n">errror</span><span class="p">(</span><span class="s">"can't create symtab root"</span><span class="p">);</span> |
| 514 | </pre></div> | 514 | </pre></div> |
| 515 | </div> | 515 | </div> |
| @@ -524,7 +524,7 @@ void <tt class="descname">mps_root_destroy</tt><big>(</big><a class="reference i | |||
| 524 | 524 | ||
| 525 | </div> | 525 | </div> |
| 526 | <div class="section" id="root-introspection"> | 526 | <div class="section" id="root-introspection"> |
| 527 | <span id="index-8"></span><h2>9.7. Root introspection<a class="headerlink" href="#root-introspection" title="Permalink to this headline">¶</a></h2> | 527 | <span id="index-8"></span><h2>10.7. Root introspection<a class="headerlink" href="#root-introspection" title="Permalink to this headline">¶</a></h2> |
| 528 | <dl class="function"> | 528 | <dl class="function"> |
| 529 | <dt id="mps_arena_roots_walk"> | 529 | <dt id="mps_arena_roots_walk"> |
| 530 | void <tt class="descname">mps_arena_roots_walk</tt><big>(</big><a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_roots_stepper_t" title="mps_roots_stepper_t">mps_roots_stepper_t</a><em> f</em>, void<em> *p</em>, size_t<em> s</em><big>)</big><a class="headerlink" href="#mps_arena_roots_walk" title="Permalink to this definition">¶</a></dt> | 530 | void <tt class="descname">mps_arena_roots_walk</tt><big>(</big><a class="reference internal" href="arena.html#mps_arena_t" title="mps_arena_t">mps_arena_t</a><em> arena</em>, <a class="reference internal" href="#mps_roots_stepper_t" title="mps_roots_stepper_t">mps_roots_stepper_t</a><em> f</em>, void<em> *p</em>, size_t<em> s</em><big>)</big><a class="headerlink" href="#mps_arena_roots_walk" title="Permalink to this definition">¶</a></dt> |
| @@ -598,24 +598,24 @@ it might point to somewhere in the middle of an allocated block.</p> | |||
| 598 | </a></p> | 598 | </a></p> |
| 599 | <h3><a href="../index.html">Table Of Contents</a></h3> | 599 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 600 | <ul> | 600 | <ul> |
| 601 | <li><a class="reference internal" href="#">9. Roots</a><ul> | 601 | <li><a class="reference internal" href="#">10. Roots</a><ul> |
| 602 | <li><a class="reference internal" href="#registering-roots">9.1. Registering roots</a></li> | 602 | <li><a class="reference internal" href="#registering-roots">10.1. Registering roots</a></li> |
| 603 | <li><a class="reference internal" href="#cautions">9.2. Cautions</a></li> | 603 | <li><a class="reference internal" href="#cautions">10.2. Cautions</a></li> |
| 604 | <li><a class="reference internal" href="#thread-roots">9.3. Thread roots</a></li> | 604 | <li><a class="reference internal" href="#thread-roots">10.3. Thread roots</a></li> |
| 605 | <li><a class="reference internal" href="#ranks">9.4. Ranks</a></li> | 605 | <li><a class="reference internal" href="#ranks">10.4. Ranks</a></li> |
| 606 | <li><a class="reference internal" href="#root-modes">9.5. Root modes</a></li> | 606 | <li><a class="reference internal" href="#root-modes">10.5. Root modes</a></li> |
| 607 | <li><a class="reference internal" href="#root-interface">9.6. Root interface</a></li> | 607 | <li><a class="reference internal" href="#root-interface">10.6. Root interface</a></li> |
| 608 | <li><a class="reference internal" href="#root-introspection">9.7. Root introspection</a></li> | 608 | <li><a class="reference internal" href="#root-introspection">10.7. Root introspection</a></li> |
| 609 | </ul> | 609 | </ul> |
| 610 | </li> | 610 | </li> |
| 611 | </ul> | 611 | </ul> |
| 612 | 612 | ||
| 613 | <h4>Previous topic</h4> | 613 | <h4>Previous topic</h4> |
| 614 | <p class="topless"><a href="thread.html" | 614 | <p class="topless"><a href="thread.html" |
| 615 | title="previous chapter">8. Threads</a></p> | 615 | title="previous chapter">9. Threads</a></p> |
| 616 | <h4>Next topic</h4> | 616 | <h4>Next topic</h4> |
| 617 | <p class="topless"><a href="collection.html" | 617 | <p class="topless"><a href="collection.html" |
| 618 | title="next chapter">10. Garbage collection</a></p><h4>Downloads</h4> | 618 | title="next chapter">11. Garbage collection</a></p><h4>Downloads</h4> |
| 619 | 619 | ||
| 620 | <p class="topless"> | 620 | <p class="topless"> |
| 621 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 621 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -641,10 +641,10 @@ it might point to somewhere in the middle of an allocated block.</p> | |||
| 641 | <a href="../genindex.html" title="General Index" | 641 | <a href="../genindex.html" title="General Index" |
| 642 | >index</a></li> | 642 | >index</a></li> |
| 643 | <li class="right" > | 643 | <li class="right" > |
| 644 | <a href="collection.html" title="10. Garbage collection" | 644 | <a href="collection.html" title="11. Garbage collection" |
| 645 | >next</a> |</li> | 645 | >next</a> |</li> |
| 646 | <li class="right" > | 646 | <li class="right" > |
| 647 | <a href="thread.html" title="8. Threads" | 647 | <a href="thread.html" title="9. Threads" |
| 648 | >previous</a> |</li> | 648 | >previous</a> |</li> |
| 649 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 649 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 650 | <li><a href="index.html" >Reference</a> »</li> | 650 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/scanning.html b/mps/manual/html/topic/scanning.html index 03758e8d070..4bdbc1680a7 100644 --- a/mps/manual/html/topic/scanning.html +++ b/mps/manual/html/topic/scanning.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>7. Scanning — Memory Pool System 1.111.0 documentation</title> | 11 | <title>8. Scanning — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="8. Threads" href="thread.html" /> | 31 | <link rel="next" title="9. Threads" href="thread.html" /> |
| 32 | <link rel="prev" title="6. Object formats" href="format.html" /> | 32 | <link rel="prev" title="7. Object formats" href="format.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="thread.html" title="8. Threads" | 42 | <a href="thread.html" title="9. Threads" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="format.html" title="6. Object formats" | 45 | <a href="format.html" title="7. Object formats" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="scanning"> | 57 | <div class="section" id="scanning"> |
| 58 | <span id="topic-scanning"></span><span id="index-0"></span><h1>7. Scanning<a class="headerlink" href="#scanning" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-scanning"></span><span id="index-0"></span><h1>8. Scanning<a class="headerlink" href="#scanning" title="Permalink to this headline">¶</a></h1> |
| 59 | <p><a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">Scanning</em></a> is the process of identifying the | 59 | <p><a class="reference internal" href="../glossary/s.html#term-scan"><em class="xref std std-term">Scanning</em></a> is the process of identifying the |
| 60 | <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a> in a block of memory and | 60 | <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a> in a block of memory and |
| 61 | <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">“fixing”</em></a> them. It’s the process at the heart of the | 61 | <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">“fixing”</em></a> them. It’s the process at the heart of the |
| @@ -69,7 +69,7 @@ references that need to be updated to point to the new locations of | |||
| 69 | these objects. Both tasks use the same scanning protocol, described | 69 | these objects. Both tasks use the same scanning protocol, described |
| 70 | here.</p> | 70 | here.</p> |
| 71 | <div class="section" id="scanning-protocol"> | 71 | <div class="section" id="scanning-protocol"> |
| 72 | <span id="topic-scanning-protocol"></span><span id="index-1"></span><h2>7.1. Scanning protocol<a class="headerlink" href="#scanning-protocol" title="Permalink to this headline">¶</a></h2> | 72 | <span id="topic-scanning-protocol"></span><span id="index-1"></span><h2>8.1. Scanning protocol<a class="headerlink" href="#scanning-protocol" title="Permalink to this headline">¶</a></h2> |
| 73 | <p>There are several types of scanning functions (the <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a> | 73 | <p>There are several types of scanning functions (the <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a> |
| 74 | in an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>, of type <a class="reference internal" href="format.html#mps_fmt_scan_t" title="mps_fmt_scan_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_scan_t</span></tt></a>, and | 74 | in an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a>, of type <a class="reference internal" href="format.html#mps_fmt_scan_t" title="mps_fmt_scan_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_scan_t</span></tt></a>, and |
| 75 | root scanning functions of various types) but all take a <a class="reference internal" href="../glossary/s.html#term-scan-state"><em class="xref std std-term">scan | 75 | root scanning functions of various types) but all take a <a class="reference internal" href="../glossary/s.html#term-scan-state"><em class="xref std std-term">scan |
| @@ -101,7 +101,7 @@ reference is stored back to the region being scanned.</li> | |||
| 101 | details, which are covered in the following sections.</p> | 101 | details, which are covered in the following sections.</p> |
| 102 | </div> | 102 | </div> |
| 103 | <div class="section" id="tagged-references"> | 103 | <div class="section" id="tagged-references"> |
| 104 | <span id="topic-scanning-tag"></span><span id="index-2"></span><h2>7.2. Tagged references<a class="headerlink" href="#tagged-references" title="Permalink to this headline">¶</a></h2> | 104 | <span id="topic-scanning-tag"></span><span id="index-2"></span><h2>8.2. Tagged references<a class="headerlink" href="#tagged-references" title="Permalink to this headline">¶</a></h2> |
| 105 | <p>If your references are <a class="reference internal" href="../glossary/t.html#term-tagged-reference"><em class="xref std std-term">tagged</em></a> (or otherwise | 105 | <p>If your references are <a class="reference internal" href="../glossary/t.html#term-tagged-reference"><em class="xref std std-term">tagged</em></a> (or otherwise |
| 106 | “encrypted”), then you must remove the tag (or decrypt them) before | 106 | “encrypted”), then you must remove the tag (or decrypt them) before |
| 107 | passing them to <a class="reference internal" href="#MPS_FIX1" title="MPS_FIX1"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX1()</span></tt></a> and <a class="reference internal" href="#MPS_FIX2" title="MPS_FIX2"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX2()</span></tt></a>.</p> | 107 | passing them to <a class="reference internal" href="#MPS_FIX1" title="MPS_FIX1"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX1()</span></tt></a> and <a class="reference internal" href="#MPS_FIX2" title="MPS_FIX2"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX2()</span></tt></a>.</p> |
| @@ -121,12 +121,12 @@ reference is within the object and need not be stripped. So your code | |||
| 121 | might look like this:</p> | 121 | might look like this:</p> |
| 122 | <div class="highlight-c"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span><span class="p">))</span> <span class="p">{</span> | 122 | <div class="highlight-c"><div class="highlight"><pre><span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span><span class="p">))</span> <span class="p">{</span> |
| 123 | <span class="cm">/* strip the tag */</span> | 123 | <span class="cm">/* strip the tag */</span> |
| 124 | <span class="kt">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">&</span> <span class="o">~</span><span class="mh">0x7</span><span class="p">;</span> | 124 | <span class="n">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">&</span> <span class="o">~</span><span class="mh">0x7</span><span class="p">;</span> |
| 125 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 125 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| 126 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> | 126 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| 127 | <span class="cm">/* restore the tag and update reference */</span> | 127 | <span class="cm">/* restore the tag and update reference */</span> |
| 128 | <span class="kt">mps_word_t</span> <span class="n">tag</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">&</span> <span class="mh">0x7</span><span class="p">;</span> | 128 | <span class="n">mps_word_t</span> <span class="n">tag</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">&</span> <span class="mh">0x7</span><span class="p">;</span> |
| 129 | <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">=</span> <span class="p">(</span><span class="kt">obj_t</span><span class="p">)((</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">p</span> <span class="o">+</span> <span class="n">tag</span><span class="p">);</span> | 129 | <span class="n">obj</span><span class="o">-></span><span class="n">ref</span> <span class="o">=</span> <span class="p">(</span><span class="n">obj_t</span><span class="p">)((</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">p</span> <span class="o">+</span> <span class="n">tag</span><span class="p">);</span> |
| 130 | <span class="p">}</span> | 130 | <span class="p">}</span> |
| 131 | </pre></div> | 131 | </pre></div> |
| 132 | </div> | 132 | </div> |
| @@ -138,7 +138,7 @@ before calling <a class="reference internal" href="#MPS_FIX2" title="MPS_FIX2">< | |||
| 138 | belongs to an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> of variant auto-header).</p> | 138 | belongs to an <a class="reference internal" href="../glossary/o.html#term-object-format"><em class="xref std std-term">object format</em></a> of variant auto-header).</p> |
| 139 | </div> | 139 | </div> |
| 140 | <div class="section" id="critical-path"> | 140 | <div class="section" id="critical-path"> |
| 141 | <span id="index-3"></span><h2>7.3. Critical path<a class="headerlink" href="#critical-path" title="Permalink to this headline">¶</a></h2> | 141 | <span id="index-3"></span><h2>8.3. Critical path<a class="headerlink" href="#critical-path" title="Permalink to this headline">¶</a></h2> |
| 142 | <p>Scanning is an operation on the critical path of the MPS and so it is | 142 | <p>Scanning is an operation on the critical path of the MPS and so it is |
| 143 | vital that it runs fast. The scanning protocol is designed to ensure | 143 | vital that it runs fast. The scanning protocol is designed to ensure |
| 144 | that as much of the scanning code can be run inline in the client | 144 | that as much of the scanning code can be run inline in the client |
| @@ -176,7 +176,7 @@ references into <a class="reference internal" href="../glossary/l.html#term-leaf | |||
| 176 | objects do not need to be scanned at all.</p> | 176 | objects do not need to be scanned at all.</p> |
| 177 | </div> | 177 | </div> |
| 178 | <div class="section" id="ambiguous-references"> | 178 | <div class="section" id="ambiguous-references"> |
| 179 | <span id="index-4"></span><h2>7.4. Ambiguous references<a class="headerlink" href="#ambiguous-references" title="Permalink to this headline">¶</a></h2> | 179 | <span id="index-4"></span><h2>8.4. Ambiguous references<a class="headerlink" href="#ambiguous-references" title="Permalink to this headline">¶</a></h2> |
| 180 | <p>If the references in the object being scanned are <a class="reference internal" href="../glossary/a.html#term-ambiguous-reference"><em class="xref std std-term">ambiguous</em></a> then <a class="reference internal" href="#MPS_FIX2" title="MPS_FIX2"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX2()</span></tt></a> does not update the | 180 | <p>If the references in the object being scanned are <a class="reference internal" href="../glossary/a.html#term-ambiguous-reference"><em class="xref std std-term">ambiguous</em></a> then <a class="reference internal" href="#MPS_FIX2" title="MPS_FIX2"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX2()</span></tt></a> does not update the |
| 181 | reference (because it can’t know if it’s a genuine reference). The MPS | 181 | reference (because it can’t know if it’s a genuine reference). The MPS |
| 182 | handles an ambiguous reference by <a class="reference internal" href="../glossary/p.html#term-pinning"><em class="xref std std-term">pinning</em></a> the block pointed to | 182 | handles an ambiguous reference by <a class="reference internal" href="../glossary/p.html#term-pinning"><em class="xref std std-term">pinning</em></a> the block pointed to |
| @@ -193,7 +193,7 @@ encounter this case.</p> | |||
| 193 | </div> | 193 | </div> |
| 194 | </div> | 194 | </div> |
| 195 | <div class="section" id="unfixed-references"> | 195 | <div class="section" id="unfixed-references"> |
| 196 | <span id="index-5"></span><h2>7.5. Unfixed references<a class="headerlink" href="#unfixed-references" title="Permalink to this headline">¶</a></h2> | 196 | <span id="index-5"></span><h2>8.5. Unfixed references<a class="headerlink" href="#unfixed-references" title="Permalink to this headline">¶</a></h2> |
| 197 | <p>The MPS does not require you to <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fix</em></a> all your <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a>. But if a reference is not fixed:</p> | 197 | <p>The MPS does not require you to <a class="reference internal" href="../glossary/f.html#term-fix"><em class="xref std std-term">fix</em></a> all your <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a>. But if a reference is not fixed:</p> |
| 198 | <ol class="arabic simple"> | 198 | <ol class="arabic simple"> |
| 199 | <li>it does not keep its target alive (this might be acceptable if you | 199 | <li>it does not keep its target alive (this might be acceptable if you |
| @@ -212,7 +212,7 @@ different <a class="reference internal" href="../glossary/p.html#term-pool-class | |||
| 212 | references.</p> | 212 | references.</p> |
| 213 | </div> | 213 | </div> |
| 214 | <div class="section" id="example-scheme-objects"> | 214 | <div class="section" id="example-scheme-objects"> |
| 215 | <span id="index-6"></span><h2>7.6. Example: Scheme objects<a class="headerlink" href="#example-scheme-objects" title="Permalink to this headline">¶</a></h2> | 215 | <span id="index-6"></span><h2>8.6. Example: Scheme objects<a class="headerlink" href="#example-scheme-objects" title="Permalink to this headline">¶</a></h2> |
| 216 | <p>Scanning tends to be a repetitive procedure and so you’ll find it is | 216 | <p>Scanning tends to be a repetitive procedure and so you’ll find it is |
| 217 | usually helpful to define macros to reduce the size of the source | 217 | usually helpful to define macros to reduce the size of the source |
| 218 | code. The MPS provides a convenience macro <a class="reference internal" href="#MPS_FIX12" title="MPS_FIX12"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX12()</span></tt></a> for the | 218 | code. The MPS provides a convenience macro <a class="reference internal" href="#MPS_FIX12" title="MPS_FIX12"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX12()</span></tt></a> for the |
| @@ -244,11 +244,11 @@ reference and cast it to this type. The behaviour of such a cast | |||
| 244 | is not defined by the C standard. See <a class="reference internal" href="interface.html#topic-interface-pun"><em>Type punning</em></a>.</p> | 244 | is not defined by the C standard. See <a class="reference internal" href="interface.html#topic-interface-pun"><em>Type punning</em></a>.</p> |
| 245 | </div> | 245 | </div> |
| 246 | <p>Here’s the Scheme scanner:</p> | 246 | <p>Here’s the Scheme scanner:</p> |
| 247 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="kt">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 247 | <div class="highlight-c"><div class="highlight"><pre><span class="k">static</span> <span class="n">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 248 | <span class="p">{</span> | 248 | <span class="p">{</span> |
| 249 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 249 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 250 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 250 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 251 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 251 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 252 | <span class="k">switch</span> <span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="n">type</span><span class="p">.</span><span class="n">type</span><span class="p">)</span> <span class="p">{</span> | 252 | <span class="k">switch</span> <span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="n">type</span><span class="p">.</span><span class="n">type</span><span class="p">)</span> <span class="p">{</span> |
| 253 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: | 253 | <span class="k">case</span> <span class="n">TYPE_PAIR</span>: |
| 254 | <span class="n">FIX</span><span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">car</span><span class="p">);</span> | 254 | <span class="n">FIX</span><span class="p">(</span><span class="n">obj</span><span class="o">-></span><span class="n">pair</span><span class="p">.</span><span class="n">car</span><span class="p">);</span> |
| @@ -285,7 +285,7 @@ not at all optimized.</p> | |||
| 285 | </div> | 285 | </div> |
| 286 | </div> | 286 | </div> |
| 287 | <div class="section" id="scanning-interface"> | 287 | <div class="section" id="scanning-interface"> |
| 288 | <span id="index-7"></span><h2>7.7. Scanning interface<a class="headerlink" href="#scanning-interface" title="Permalink to this headline">¶</a></h2> | 288 | <span id="index-7"></span><h2>8.7. Scanning interface<a class="headerlink" href="#scanning-interface" title="Permalink to this headline">¶</a></h2> |
| 289 | <dl class="type"> | 289 | <dl class="type"> |
| 290 | <dt id="mps_ss_t"> | 290 | <dt id="mps_ss_t"> |
| 291 | <tt class="descname">mps_ss_t</tt><a class="headerlink" href="#mps_ss_t" title="Permalink to this definition">¶</a></dt> | 291 | <tt class="descname">mps_ss_t</tt><a class="headerlink" href="#mps_ss_t" title="Permalink to this definition">¶</a></dt> |
| @@ -366,10 +366,10 @@ references inside the object’s <tt class="docutils literal"><span class="p | |||
| 366 | <tt class="docutils literal"><span class="pre">data_scan</span></tt>. In order to ensure that the scan state is passed | 366 | <tt class="docutils literal"><span class="pre">data_scan</span></tt>. In order to ensure that the scan state is passed |
| 367 | correctly to <tt class="docutils literal"><span class="pre">data_scan</span></tt>, the call must be wrapped in | 367 | correctly to <tt class="docutils literal"><span class="pre">data_scan</span></tt>, the call must be wrapped in |
| 368 | <a class="reference internal" href="#MPS_FIX_CALL" title="MPS_FIX_CALL"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX_CALL()</span></tt></a>.</p> | 368 | <a class="reference internal" href="#MPS_FIX_CALL" title="MPS_FIX_CALL"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX_CALL()</span></tt></a>.</p> |
| 369 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 369 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 370 | <span class="p">{</span> | 370 | <span class="p">{</span> |
| 371 | <span class="kt">obj_t</span> <span class="n">obj</span><span class="p">;</span> | 371 | <span class="n">obj_t</span> <span class="n">obj</span><span class="p">;</span> |
| 372 | <span class="kt">mps_res_t</span> <span class="n">res</span><span class="p">;</span> | 372 | <span class="n">mps_res_t</span> <span class="n">res</span><span class="p">;</span> |
| 373 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 373 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 374 | <span class="k">for</span> <span class="p">(</span><span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> <span class="n">obj</span> <span class="o"><</span> <span class="n">limit</span><span class="p">;</span> <span class="n">obj</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> | 374 | <span class="k">for</span> <span class="p">(</span><span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> <span class="n">obj</span> <span class="o"><</span> <span class="n">limit</span><span class="p">;</span> <span class="n">obj</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> |
| 375 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX12</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">obj</span><span class="o">-></span><span class="n">left</span><span class="p">)</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> | 375 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX12</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">obj</span><span class="o">-></span><span class="n">left</span><span class="p">)</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> |
| @@ -395,7 +395,7 @@ need to be measured against the loss in performance.</p> | |||
| 395 | 395 | ||
| 396 | </div> | 396 | </div> |
| 397 | <div class="section" id="fixing-interface"> | 397 | <div class="section" id="fixing-interface"> |
| 398 | <span id="index-8"></span><h2>7.8. Fixing interface<a class="headerlink" href="#fixing-interface" title="Permalink to this headline">¶</a></h2> | 398 | <span id="index-8"></span><h2>8.8. Fixing interface<a class="headerlink" href="#fixing-interface" title="Permalink to this headline">¶</a></h2> |
| 399 | <dl class="function"> | 399 | <dl class="function"> |
| 400 | <dt id="MPS_FIX1"> | 400 | <dt id="MPS_FIX1"> |
| 401 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">MPS_FIX1</tt><big>(</big><a class="reference internal" href="#mps_ss_t" title="mps_ss_t">mps_ss_t</a><em> ss</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> ref</em><big>)</big><a class="headerlink" href="#MPS_FIX1" title="Permalink to this definition">¶</a></dt> | 401 | <a class="reference internal" href="interface.html#mps_bool_t" title="mps_bool_t">mps_bool_t</a> <tt class="descname">MPS_FIX1</tt><big>(</big><a class="reference internal" href="#mps_ss_t" title="mps_ss_t">mps_ss_t</a><em> ss</em>, <a class="reference internal" href="interface.html#mps_addr_t" title="mps_addr_t">mps_addr_t</a><em> ref</em><big>)</big><a class="headerlink" href="#MPS_FIX1" title="Permalink to this definition">¶</a></dt> |
| @@ -508,25 +508,25 @@ ensure that the scan state is passed correctly.</p> | |||
| 508 | </a></p> | 508 | </a></p> |
| 509 | <h3><a href="../index.html">Table Of Contents</a></h3> | 509 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 510 | <ul> | 510 | <ul> |
| 511 | <li><a class="reference internal" href="#">7. Scanning</a><ul> | 511 | <li><a class="reference internal" href="#">8. Scanning</a><ul> |
| 512 | <li><a class="reference internal" href="#scanning-protocol">7.1. Scanning protocol</a></li> | 512 | <li><a class="reference internal" href="#scanning-protocol">8.1. Scanning protocol</a></li> |
| 513 | <li><a class="reference internal" href="#tagged-references">7.2. Tagged references</a></li> | 513 | <li><a class="reference internal" href="#tagged-references">8.2. Tagged references</a></li> |
| 514 | <li><a class="reference internal" href="#critical-path">7.3. Critical path</a></li> | 514 | <li><a class="reference internal" href="#critical-path">8.3. Critical path</a></li> |
| 515 | <li><a class="reference internal" href="#ambiguous-references">7.4. Ambiguous references</a></li> | 515 | <li><a class="reference internal" href="#ambiguous-references">8.4. Ambiguous references</a></li> |
| 516 | <li><a class="reference internal" href="#unfixed-references">7.5. Unfixed references</a></li> | 516 | <li><a class="reference internal" href="#unfixed-references">8.5. Unfixed references</a></li> |
| 517 | <li><a class="reference internal" href="#example-scheme-objects">7.6. Example: Scheme objects</a></li> | 517 | <li><a class="reference internal" href="#example-scheme-objects">8.6. Example: Scheme objects</a></li> |
| 518 | <li><a class="reference internal" href="#scanning-interface">7.7. Scanning interface</a></li> | 518 | <li><a class="reference internal" href="#scanning-interface">8.7. Scanning interface</a></li> |
| 519 | <li><a class="reference internal" href="#fixing-interface">7.8. Fixing interface</a></li> | 519 | <li><a class="reference internal" href="#fixing-interface">8.8. Fixing interface</a></li> |
| 520 | </ul> | 520 | </ul> |
| 521 | </li> | 521 | </li> |
| 522 | </ul> | 522 | </ul> |
| 523 | 523 | ||
| 524 | <h4>Previous topic</h4> | 524 | <h4>Previous topic</h4> |
| 525 | <p class="topless"><a href="format.html" | 525 | <p class="topless"><a href="format.html" |
| 526 | title="previous chapter">6. Object formats</a></p> | 526 | title="previous chapter">7. Object formats</a></p> |
| 527 | <h4>Next topic</h4> | 527 | <h4>Next topic</h4> |
| 528 | <p class="topless"><a href="thread.html" | 528 | <p class="topless"><a href="thread.html" |
| 529 | title="next chapter">8. Threads</a></p><h4>Downloads</h4> | 529 | title="next chapter">9. Threads</a></p><h4>Downloads</h4> |
| 530 | 530 | ||
| 531 | <p class="topless"> | 531 | <p class="topless"> |
| 532 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 532 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -552,10 +552,10 @@ ensure that the scan state is passed correctly.</p> | |||
| 552 | <a href="../genindex.html" title="General Index" | 552 | <a href="../genindex.html" title="General Index" |
| 553 | >index</a></li> | 553 | >index</a></li> |
| 554 | <li class="right" > | 554 | <li class="right" > |
| 555 | <a href="thread.html" title="8. Threads" | 555 | <a href="thread.html" title="9. Threads" |
| 556 | >next</a> |</li> | 556 | >next</a> |</li> |
| 557 | <li class="right" > | 557 | <li class="right" > |
| 558 | <a href="format.html" title="6. Object formats" | 558 | <a href="format.html" title="7. Object formats" |
| 559 | >previous</a> |</li> | 559 | >previous</a> |</li> |
| 560 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 560 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 561 | <li><a href="index.html" >Reference</a> »</li> | 561 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/telemetry.html b/mps/manual/html/topic/telemetry.html index 1bab8e7814b..97bbc82228d 100644 --- a/mps/manual/html/topic/telemetry.html +++ b/mps/manual/html/topic/telemetry.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>18. Telemetry — Memory Pool System 1.111.0 documentation</title> | 11 | <title>19. Telemetry — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="19. Weak references" href="weak.html" /> | 31 | <link rel="next" title="20. Weak references" href="weak.html" /> |
| 32 | <link rel="prev" title="17. Debugging pools" href="debugging.html" /> | 32 | <link rel="prev" title="18. Debugging pools" href="debugging.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="weak.html" title="19. Weak references" | 42 | <a href="weak.html" title="20. Weak references" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="debugging.html" title="17. Debugging pools" | 45 | <a href="debugging.html" title="18. Debugging pools" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="telemetry"> | 57 | <div class="section" id="telemetry"> |
| 58 | <span id="topic-telemetry"></span><h1>18. Telemetry<a class="headerlink" href="#telemetry" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-telemetry"></span><h1>19. Telemetry<a class="headerlink" href="#telemetry" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>In its <a class="reference internal" href="../glossary/c.html#term-cool"><em class="xref std std-term">cool</em></a> and <a class="reference internal" href="../glossary/h.html#term-hot"><em class="xref std std-term">hot</em></a> <a class="reference internal" href="../glossary/v.html#term-variety"><em class="xref std std-term">varieties</em></a>, the MPS is | 59 | <p>In its <a class="reference internal" href="../glossary/c.html#term-cool"><em class="xref std std-term">cool</em></a> and <a class="reference internal" href="../glossary/h.html#term-hot"><em class="xref std std-term">hot</em></a> <a class="reference internal" href="../glossary/v.html#term-variety"><em class="xref std std-term">varieties</em></a>, the MPS is |
| 60 | capable of outputting a configurable stream of events to assist with | 60 | capable of outputting a configurable stream of events to assist with |
| 61 | debugging and profiling.</p> | 61 | debugging and profiling.</p> |
| @@ -93,7 +93,7 @@ audience were incapacitated with laughter. I think some of them | |||
| 93 | thought we were victims of a practical joker.</p> | 93 | thought we were victims of a practical joker.</p> |
| 94 | </div></blockquote> | 94 | </div></blockquote> |
| 95 | <div class="section" id="telemetry-utilities"> | 95 | <div class="section" id="telemetry-utilities"> |
| 96 | <span id="index-2"></span><h2>18.1. Telemetry utilities<a class="headerlink" href="#telemetry-utilities" title="Permalink to this headline">¶</a></h2> | 96 | <span id="index-2"></span><h2>19.1. Telemetry utilities<a class="headerlink" href="#telemetry-utilities" title="Permalink to this headline">¶</a></h2> |
| 97 | <p>The telemetry system relies on three utility programs:</p> | 97 | <p>The telemetry system relies on three utility programs:</p> |
| 98 | <ul class="simple"> | 98 | <ul class="simple"> |
| 99 | <li><a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a> decodes the | 99 | <li><a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a> decodes the |
| @@ -111,7 +111,7 @@ SQLite database for further analysis.</li> | |||
| 111 | <a class="reference internal" href="../guide/build.html#guide-build"><em>Building the Memory Pool System</em></a>. Thee programs are described in more detail below.</p> | 111 | <a class="reference internal" href="../guide/build.html#guide-build"><em>Building the Memory Pool System</em></a>. Thee programs are described in more detail below.</p> |
| 112 | </div> | 112 | </div> |
| 113 | <div class="section" id="example"> | 113 | <div class="section" id="example"> |
| 114 | <span id="index-3"></span><h2>18.2. Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2> | 114 | <span id="index-3"></span><h2>19.2. Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h2> |
| 115 | <p>Here’s an example of turning on telemetry in the debugger and then | 115 | <p>Here’s an example of turning on telemetry in the debugger and then |
| 116 | encountering a corrupted object:</p> | 116 | encountering a corrupted object:</p> |
| 117 | <div class="highlight-none"><div class="highlight"><pre>$ gdb ./scheme | 117 | <div class="highlight-none"><div class="highlight"><pre>$ gdb ./scheme |
| @@ -190,7 +190,7 @@ address was never fixed (no <tt class="docutils literal"><span class="pre">Trace | |||
| 190 | </div> | 190 | </div> |
| 191 | </div> | 191 | </div> |
| 192 | <div class="section" id="event-categories"> | 192 | <div class="section" id="event-categories"> |
| 193 | <span id="index-4"></span><h2>18.3. Event categories<a class="headerlink" href="#event-categories" title="Permalink to this headline">¶</a></h2> | 193 | <span id="index-4"></span><h2>19.3. Event categories<a class="headerlink" href="#event-categories" title="Permalink to this headline">¶</a></h2> |
| 194 | <p>The “bit” column gives the bit number in the <a class="reference internal" href="../glossary/t.html#term-telemetry-filter"><em class="xref std std-term">telemetry filter</em></a>. | 194 | <p>The “bit” column gives the bit number in the <a class="reference internal" href="../glossary/t.html#term-telemetry-filter"><em class="xref std std-term">telemetry filter</em></a>. |
| 195 | These numbers are liable to change, but the current meanings (zero | 195 | These numbers are liable to change, but the current meanings (zero |
| 196 | being the least significant bit) are:</p> | 196 | being the least significant bit) are:</p> |
| @@ -239,7 +239,7 @@ being the least significant bit) are:</p> | |||
| 239 | </table> | 239 | </table> |
| 240 | </div> | 240 | </div> |
| 241 | <div class="section" id="environment-variables"> | 241 | <div class="section" id="environment-variables"> |
| 242 | <span id="index-5"></span><h2>18.4. Environment variables<a class="headerlink" href="#environment-variables" title="Permalink to this headline">¶</a></h2> | 242 | <span id="index-5"></span><h2>19.4. Environment variables<a class="headerlink" href="#environment-variables" title="Permalink to this headline">¶</a></h2> |
| 243 | <p>In the ANSI <a class="reference internal" href="../glossary/p.html#term-plinth"><em class="xref std std-term">plinth</em></a> (the plinth that comes as default with the | 243 | <p>In the ANSI <a class="reference internal" href="../glossary/p.html#term-plinth"><em class="xref std std-term">plinth</em></a> (the plinth that comes as default with the |
| 244 | MPS), these two environment variables control the behaviour of the | 244 | MPS), these two environment variables control the behaviour of the |
| 245 | telemetry feature.</p> | 245 | telemetry feature.</p> |
| @@ -285,7 +285,7 @@ with the <tt class="docutils literal"><span class="pre">-d</span></tt> option. I | |||
| 285 | 285 | ||
| 286 | </div> | 286 | </div> |
| 287 | <div class="section" id="decoding-the-telemetry-stream"> | 287 | <div class="section" id="decoding-the-telemetry-stream"> |
| 288 | <span id="telemetry-mpseventcnv"></span><span id="index-6"></span><h2>18.5. Decoding the telemetry stream<a class="headerlink" href="#decoding-the-telemetry-stream" title="Permalink to this headline">¶</a></h2> | 288 | <span id="telemetry-mpseventcnv"></span><span id="index-6"></span><h2>19.5. Decoding the telemetry stream<a class="headerlink" href="#decoding-the-telemetry-stream" title="Permalink to this headline">¶</a></h2> |
| 289 | <p>The MPS writes the telemetry stream in a binary encoded format for | 289 | <p>The MPS writes the telemetry stream in a binary encoded format for |
| 290 | speed. The encoding is specific to the platform the program was | 290 | speed. The encoding is specific to the platform the program was |
| 291 | running on, and so the output needs to be decoded before it can be | 291 | running on, and so the output needs to be decoded before it can be |
| @@ -328,7 +328,7 @@ columns contain parameters related to the event.</p> | |||
| 328 | </div> | 328 | </div> |
| 329 | </div> | 329 | </div> |
| 330 | <div class="section" id="making-the-telemetry-stream-readable"> | 330 | <div class="section" id="making-the-telemetry-stream-readable"> |
| 331 | <span id="telemetry-mpseventtxt"></span><span id="index-7"></span><h2>18.6. Making the telemetry stream readable<a class="headerlink" href="#making-the-telemetry-stream-readable" title="Permalink to this headline">¶</a></h2> | 331 | <span id="telemetry-mpseventtxt"></span><span id="index-7"></span><h2>19.6. Making the telemetry stream readable<a class="headerlink" href="#making-the-telemetry-stream-readable" title="Permalink to this headline">¶</a></h2> |
| 332 | <p>The output of <a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a> can be made | 332 | <p>The output of <a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a> can be made |
| 333 | more readable by passing it through <strong class="program">mpseventtxt</strong>, which | 333 | more readable by passing it through <strong class="program">mpseventtxt</strong>, which |
| 334 | takes the following options:</p> | 334 | takes the following options:</p> |
| @@ -360,7 +360,7 @@ through <strong class="program">mpseventtxt</strong>:</p> | |||
| 360 | </div> | 360 | </div> |
| 361 | </div> | 361 | </div> |
| 362 | <div class="section" id="loading-the-telemetry-stream-into-sqlite"> | 362 | <div class="section" id="loading-the-telemetry-stream-into-sqlite"> |
| 363 | <span id="telemetry-mpseventsql"></span><span id="index-8"></span><h2>18.7. Loading the telemetry stream into SQLite<a class="headerlink" href="#loading-the-telemetry-stream-into-sqlite" title="Permalink to this headline">¶</a></h2> | 363 | <span id="telemetry-mpseventsql"></span><span id="index-8"></span><h2>19.7. Loading the telemetry stream into SQLite<a class="headerlink" href="#loading-the-telemetry-stream-into-sqlite" title="Permalink to this headline">¶</a></h2> |
| 364 | <p>The decoded telemetry stream (as output by <a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a>) can be loaded into a SQLite database for | 364 | <p>The decoded telemetry stream (as output by <a class="reference internal" href="#telemetry-mpseventcnv"><em>mpseventcnv</em></a>) can be loaded into a SQLite database for |
| 365 | further analysis by running <strong class="program">mpseventsql</strong>.</p> | 365 | further analysis by running <strong class="program">mpseventsql</strong>.</p> |
| 366 | <p><strong class="program">mpseventsql</strong> takes the following options:</p> | 366 | <p><strong class="program">mpseventsql</strong> takes the following options:</p> |
| @@ -431,7 +431,7 @@ descriptions in <tt class="docutils literal"><span class="pre">eventdef.h</span> | |||
| 431 | 431 | ||
| 432 | </div> | 432 | </div> |
| 433 | <div class="section" id="telemetry-interface"> | 433 | <div class="section" id="telemetry-interface"> |
| 434 | <span id="index-10"></span><h2>18.8. Telemetry interface<a class="headerlink" href="#telemetry-interface" title="Permalink to this headline">¶</a></h2> | 434 | <span id="index-10"></span><h2>19.8. Telemetry interface<a class="headerlink" href="#telemetry-interface" title="Permalink to this headline">¶</a></h2> |
| 435 | <dl class="function"> | 435 | <dl class="function"> |
| 436 | <dt id="mps_telemetry_control"> | 436 | <dt id="mps_telemetry_control"> |
| 437 | <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a> <tt class="descname">mps_telemetry_control</tt><big>(</big><a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a><em> reset_mask</em>, <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a><em> flip_mask</em><big>)</big><a class="headerlink" href="#mps_telemetry_control" title="Permalink to this definition">¶</a></dt> | 437 | <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a> <tt class="descname">mps_telemetry_control</tt><big>(</big><a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a><em> reset_mask</em>, <a class="reference internal" href="interface.html#mps_word_t" title="mps_word_t">mps_word_t</a><em> flip_mask</em><big>)</big><a class="headerlink" href="#mps_telemetry_control" title="Permalink to this definition">¶</a></dt> |
| @@ -528,7 +528,7 @@ telemetry filter that should be reset.</p> | |||
| 528 | 528 | ||
| 529 | </div> | 529 | </div> |
| 530 | <div class="section" id="telemetry-labels"> | 530 | <div class="section" id="telemetry-labels"> |
| 531 | <span id="index-11"></span><h2>18.9. Telemetry labels<a class="headerlink" href="#telemetry-labels" title="Permalink to this headline">¶</a></h2> | 531 | <span id="index-11"></span><h2>19.9. Telemetry labels<a class="headerlink" href="#telemetry-labels" title="Permalink to this headline">¶</a></h2> |
| 532 | <p>Telemetry labels allow the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> to associate strings | 532 | <p>Telemetry labels allow the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> to associate strings |
| 533 | with addresses in the telemetry stream. The string must first be | 533 | with addresses in the telemetry stream. The string must first be |
| 534 | <em>interned</em> by calling <a class="reference internal" href="#mps_telemetry_intern" title="mps_telemetry_intern"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_intern()</span></tt></a>, returning a | 534 | <em>interned</em> by calling <a class="reference internal" href="#mps_telemetry_intern" title="mps_telemetry_intern"><tt class="xref c c-func docutils literal"><span class="pre">mps_telemetry_intern()</span></tt></a>, returning a |
| @@ -613,26 +613,26 @@ then calling this function has no effect.</p> | |||
| 613 | </a></p> | 613 | </a></p> |
| 614 | <h3><a href="../index.html">Table Of Contents</a></h3> | 614 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 615 | <ul> | 615 | <ul> |
| 616 | <li><a class="reference internal" href="#">18. Telemetry</a><ul> | 616 | <li><a class="reference internal" href="#">19. Telemetry</a><ul> |
| 617 | <li><a class="reference internal" href="#telemetry-utilities">18.1. Telemetry utilities</a></li> | 617 | <li><a class="reference internal" href="#telemetry-utilities">19.1. Telemetry utilities</a></li> |
| 618 | <li><a class="reference internal" href="#example">18.2. Example</a></li> | 618 | <li><a class="reference internal" href="#example">19.2. Example</a></li> |
| 619 | <li><a class="reference internal" href="#event-categories">18.3. Event categories</a></li> | 619 | <li><a class="reference internal" href="#event-categories">19.3. Event categories</a></li> |
| 620 | <li><a class="reference internal" href="#environment-variables">18.4. Environment variables</a></li> | 620 | <li><a class="reference internal" href="#environment-variables">19.4. Environment variables</a></li> |
| 621 | <li><a class="reference internal" href="#decoding-the-telemetry-stream">18.5. Decoding the telemetry stream</a></li> | 621 | <li><a class="reference internal" href="#decoding-the-telemetry-stream">19.5. Decoding the telemetry stream</a></li> |
| 622 | <li><a class="reference internal" href="#making-the-telemetry-stream-readable">18.6. Making the telemetry stream readable</a></li> | 622 | <li><a class="reference internal" href="#making-the-telemetry-stream-readable">19.6. Making the telemetry stream readable</a></li> |
| 623 | <li><a class="reference internal" href="#loading-the-telemetry-stream-into-sqlite">18.7. Loading the telemetry stream into SQLite</a></li> | 623 | <li><a class="reference internal" href="#loading-the-telemetry-stream-into-sqlite">19.7. Loading the telemetry stream into SQLite</a></li> |
| 624 | <li><a class="reference internal" href="#telemetry-interface">18.8. Telemetry interface</a></li> | 624 | <li><a class="reference internal" href="#telemetry-interface">19.8. Telemetry interface</a></li> |
| 625 | <li><a class="reference internal" href="#telemetry-labels">18.9. Telemetry labels</a></li> | 625 | <li><a class="reference internal" href="#telemetry-labels">19.9. Telemetry labels</a></li> |
| 626 | </ul> | 626 | </ul> |
| 627 | </li> | 627 | </li> |
| 628 | </ul> | 628 | </ul> |
| 629 | 629 | ||
| 630 | <h4>Previous topic</h4> | 630 | <h4>Previous topic</h4> |
| 631 | <p class="topless"><a href="debugging.html" | 631 | <p class="topless"><a href="debugging.html" |
| 632 | title="previous chapter">17. Debugging pools</a></p> | 632 | title="previous chapter">18. Debugging pools</a></p> |
| 633 | <h4>Next topic</h4> | 633 | <h4>Next topic</h4> |
| 634 | <p class="topless"><a href="weak.html" | 634 | <p class="topless"><a href="weak.html" |
| 635 | title="next chapter">19. Weak references</a></p><h4>Downloads</h4> | 635 | title="next chapter">20. Weak references</a></p><h4>Downloads</h4> |
| 636 | 636 | ||
| 637 | <p class="topless"> | 637 | <p class="topless"> |
| 638 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 638 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -658,10 +658,10 @@ then calling this function has no effect.</p> | |||
| 658 | <a href="../genindex.html" title="General Index" | 658 | <a href="../genindex.html" title="General Index" |
| 659 | >index</a></li> | 659 | >index</a></li> |
| 660 | <li class="right" > | 660 | <li class="right" > |
| 661 | <a href="weak.html" title="19. Weak references" | 661 | <a href="weak.html" title="20. Weak references" |
| 662 | >next</a> |</li> | 662 | >next</a> |</li> |
| 663 | <li class="right" > | 663 | <li class="right" > |
| 664 | <a href="debugging.html" title="17. Debugging pools" | 664 | <a href="debugging.html" title="18. Debugging pools" |
| 665 | >previous</a> |</li> | 665 | >previous</a> |</li> |
| 666 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 666 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 667 | <li><a href="index.html" >Reference</a> »</li> | 667 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/thread.html b/mps/manual/html/topic/thread.html index 1a346b85628..e558a0d4f02 100644 --- a/mps/manual/html/topic/thread.html +++ b/mps/manual/html/topic/thread.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>8. Threads — Memory Pool System 1.111.0 documentation</title> | 11 | <title>9. Threads — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -28,8 +28,8 @@ | |||
| 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> | 28 | <link rel="copyright" title="Copyright" href="../copyright.html" /> |
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="9. Roots" href="root.html" /> | 31 | <link rel="next" title="10. Roots" href="root.html" /> |
| 32 | <link rel="prev" title="7. Scanning" href="scanning.html" /> | 32 | <link rel="prev" title="8. Scanning" href="scanning.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -39,10 +39,10 @@ | |||
| 39 | <a href="../genindex.html" title="General Index" | 39 | <a href="../genindex.html" title="General Index" |
| 40 | accesskey="I">index</a></li> | 40 | accesskey="I">index</a></li> |
| 41 | <li class="right" > | 41 | <li class="right" > |
| 42 | <a href="root.html" title="9. Roots" | 42 | <a href="root.html" title="10. Roots" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="scanning.html" title="7. Scanning" | 45 | <a href="scanning.html" title="8. Scanning" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,9 +55,9 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="threads"> | 57 | <div class="section" id="threads"> |
| 58 | <span id="topic-thread"></span><span id="index-0"></span><h1>8. Threads<a class="headerlink" href="#threads" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-thread"></span><span id="index-0"></span><h1>9. Threads<a class="headerlink" href="#threads" title="Permalink to this headline">¶</a></h1> |
| 59 | <div class="section" id="thread-safety"> | 59 | <div class="section" id="thread-safety"> |
| 60 | <span id="index-1"></span><h2>8.1. Thread safety<a class="headerlink" href="#thread-safety" title="Permalink to this headline">¶</a></h2> | 60 | <span id="index-1"></span><h2>9.1. Thread safety<a class="headerlink" href="#thread-safety" title="Permalink to this headline">¶</a></h2> |
| 61 | <p>The MPS is designed to run in an environment with multiple threads all | 61 | <p>The MPS is designed to run in an environment with multiple threads all |
| 62 | calling into the MPS. Some code is known to operate with exclusive | 62 | calling into the MPS. Some code is known to operate with exclusive |
| 63 | access to the data it manipulates (for example, allocation via | 63 | access to the data it manipulates (for example, allocation via |
| @@ -70,7 +70,7 @@ at most a single thread (per arena) running “inside” the MPS at a | |||
| 70 | time.</p> | 70 | time.</p> |
| 71 | </div> | 71 | </div> |
| 72 | <div class="section" id="thread-registration"> | 72 | <div class="section" id="thread-registration"> |
| 73 | <span id="topic-thread-register"></span><span id="index-2"></span><h2>8.2. Thread registration<a class="headerlink" href="#thread-registration" title="Permalink to this headline">¶</a></h2> | 73 | <span id="topic-thread-register"></span><span id="index-2"></span><h2>9.2. Thread registration<a class="headerlink" href="#thread-registration" title="Permalink to this headline">¶</a></h2> |
| 74 | <p>In order to scan a thread’s registers for references (which happens at | 74 | <p>In order to scan a thread’s registers for references (which happens at |
| 75 | each <a class="reference internal" href="../glossary/f.html#term-flip"><em class="xref std std-term">flip</em></a>), the MPS needs to be able to suspend that thread, | 75 | each <a class="reference internal" href="../glossary/f.html#term-flip"><em class="xref std std-term">flip</em></a>), the MPS needs to be able to suspend that thread, |
| 76 | and in order to gain exclusive atomic access to memory in order to | 76 | and in order to gain exclusive atomic access to memory in order to |
| @@ -100,7 +100,7 @@ needs to co-operate with the MPS.</p> | |||
| 100 | </div> | 100 | </div> |
| 101 | </div> | 101 | </div> |
| 102 | <div class="section" id="signal-handling-issues"> | 102 | <div class="section" id="signal-handling-issues"> |
| 103 | <span id="index-3"></span><h2>8.3. Signal handling issues<a class="headerlink" href="#signal-handling-issues" title="Permalink to this headline">¶</a></h2> | 103 | <span id="index-3"></span><h2>9.3. Signal handling issues<a class="headerlink" href="#signal-handling-issues" title="Permalink to this headline">¶</a></h2> |
| 104 | <p>The MPS uses <a class="reference internal" href="../glossary/b.html#term-barrier-1"><em class="xref std std-term">barriers<sup>(1)</sup></em></a> to <a class="reference internal" href="../glossary/p.html#term-protection"><em class="xref std std-term">protect</em></a> | 104 | <p>The MPS uses <a class="reference internal" href="../glossary/b.html#term-barrier-1"><em class="xref std std-term">barriers<sup>(1)</sup></em></a> to <a class="reference internal" href="../glossary/p.html#term-protection"><em class="xref std std-term">protect</em></a> |
| 105 | memory from the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> and handles the signals that | 105 | memory from the <a class="reference internal" href="../glossary/c.html#term-client-program"><em class="xref std std-term">client program</em></a> and handles the signals that |
| 106 | result from barrier hits.</p> | 106 | result from barrier hits.</p> |
| @@ -115,7 +115,7 @@ the MPS.</p> | |||
| 115 | </div> | 115 | </div> |
| 116 | </div> | 116 | </div> |
| 117 | <div class="section" id="thread-interface"> | 117 | <div class="section" id="thread-interface"> |
| 118 | <span id="index-4"></span><h2>8.4. Thread interface<a class="headerlink" href="#thread-interface" title="Permalink to this headline">¶</a></h2> | 118 | <span id="index-4"></span><h2>9.4. Thread interface<a class="headerlink" href="#thread-interface" title="Permalink to this headline">¶</a></h2> |
| 119 | <dl class="type"> | 119 | <dl class="type"> |
| 120 | <dt id="mps_thr_t"> | 120 | <dt id="mps_thr_t"> |
| 121 | <tt class="descname">mps_thr_t</tt><a class="headerlink" href="#mps_thr_t" title="Permalink to this definition">¶</a></dt> | 121 | <tt class="descname">mps_thr_t</tt><a class="headerlink" href="#mps_thr_t" title="Permalink to this definition">¶</a></dt> |
| @@ -223,21 +223,21 @@ to <a class="reference internal" href="#mps_tramp" title="mps_tramp"><tt class=" | |||
| 223 | </a></p> | 223 | </a></p> |
| 224 | <h3><a href="../index.html">Table Of Contents</a></h3> | 224 | <h3><a href="../index.html">Table Of Contents</a></h3> |
| 225 | <ul> | 225 | <ul> |
| 226 | <li><a class="reference internal" href="#">8. Threads</a><ul> | 226 | <li><a class="reference internal" href="#">9. Threads</a><ul> |
| 227 | <li><a class="reference internal" href="#thread-safety">8.1. Thread safety</a></li> | 227 | <li><a class="reference internal" href="#thread-safety">9.1. Thread safety</a></li> |
| 228 | <li><a class="reference internal" href="#thread-registration">8.2. Thread registration</a></li> | 228 | <li><a class="reference internal" href="#thread-registration">9.2. Thread registration</a></li> |
| 229 | <li><a class="reference internal" href="#signal-handling-issues">8.3. Signal handling issues</a></li> | 229 | <li><a class="reference internal" href="#signal-handling-issues">9.3. Signal handling issues</a></li> |
| 230 | <li><a class="reference internal" href="#thread-interface">8.4. Thread interface</a></li> | 230 | <li><a class="reference internal" href="#thread-interface">9.4. Thread interface</a></li> |
| 231 | </ul> | 231 | </ul> |
| 232 | </li> | 232 | </li> |
| 233 | </ul> | 233 | </ul> |
| 234 | 234 | ||
| 235 | <h4>Previous topic</h4> | 235 | <h4>Previous topic</h4> |
| 236 | <p class="topless"><a href="scanning.html" | 236 | <p class="topless"><a href="scanning.html" |
| 237 | title="previous chapter">7. Scanning</a></p> | 237 | title="previous chapter">8. Scanning</a></p> |
| 238 | <h4>Next topic</h4> | 238 | <h4>Next topic</h4> |
| 239 | <p class="topless"><a href="root.html" | 239 | <p class="topless"><a href="root.html" |
| 240 | title="next chapter">9. Roots</a></p><h4>Downloads</h4> | 240 | title="next chapter">10. Roots</a></p><h4>Downloads</h4> |
| 241 | 241 | ||
| 242 | <p class="topless"> | 242 | <p class="topless"> |
| 243 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> | 243 | <a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br> |
| @@ -263,10 +263,10 @@ to <a class="reference internal" href="#mps_tramp" title="mps_tramp"><tt class=" | |||
| 263 | <a href="../genindex.html" title="General Index" | 263 | <a href="../genindex.html" title="General Index" |
| 264 | >index</a></li> | 264 | >index</a></li> |
| 265 | <li class="right" > | 265 | <li class="right" > |
| 266 | <a href="root.html" title="9. Roots" | 266 | <a href="root.html" title="10. Roots" |
| 267 | >next</a> |</li> | 267 | >next</a> |</li> |
| 268 | <li class="right" > | 268 | <li class="right" > |
| 269 | <a href="scanning.html" title="7. Scanning" | 269 | <a href="scanning.html" title="8. Scanning" |
| 270 | >previous</a> |</li> | 270 | >previous</a> |</li> |
| 271 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 271 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 272 | <li><a href="index.html" >Reference</a> »</li> | 272 | <li><a href="index.html" >Reference</a> »</li> |
diff --git a/mps/manual/html/topic/weak.html b/mps/manual/html/topic/weak.html index 8e4a7e8b893..901739b1cfb 100644 --- a/mps/manual/html/topic/weak.html +++ b/mps/manual/html/topic/weak.html | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | <head> | 8 | <head> |
| 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | 9 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 10 | 10 | ||
| 11 | <title>19. Weak references — Memory Pool System 1.111.0 documentation</title> | 11 | <title>20. Weak references — Memory Pool System 1.111.0 documentation</title> |
| 12 | 12 | ||
| 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> | 13 | <link rel="stylesheet" href="../_static/mps.css" type="text/css" /> |
| 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | 14 | <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |
| @@ -29,7 +29,7 @@ | |||
| 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> | 29 | <link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" /> |
| 30 | <link rel="up" title="Reference" href="index.html" /> | 30 | <link rel="up" title="Reference" href="index.html" /> |
| 31 | <link rel="next" title="Pool reference" href="../pool/index.html" /> | 31 | <link rel="next" title="Pool reference" href="../pool/index.html" /> |
| 32 | <link rel="prev" title="18. Telemetry" href="telemetry.html" /> | 32 | <link rel="prev" title="19. Telemetry" href="telemetry.html" /> |
| 33 | </head> | 33 | </head> |
| 34 | <body> | 34 | <body> |
| 35 | <div class="related"> | 35 | <div class="related"> |
| @@ -42,7 +42,7 @@ | |||
| 42 | <a href="../pool/index.html" title="Pool reference" | 42 | <a href="../pool/index.html" title="Pool reference" |
| 43 | accesskey="N">next</a> |</li> | 43 | accesskey="N">next</a> |</li> |
| 44 | <li class="right" > | 44 | <li class="right" > |
| 45 | <a href="telemetry.html" title="18. Telemetry" | 45 | <a href="telemetry.html" title="19. Telemetry" |
| 46 | accesskey="P">previous</a> |</li> | 46 | accesskey="P">previous</a> |</li> |
| 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 47 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> | 48 | <li><a href="index.html" accesskey="U">Reference</a> »</li> |
| @@ -55,7 +55,7 @@ | |||
| 55 | <div class="body"> | 55 | <div class="body"> |
| 56 | 56 | ||
| 57 | <div class="section" id="weak-references"> | 57 | <div class="section" id="weak-references"> |
| 58 | <span id="topic-weak"></span><span id="index-0"></span><h1>19. Weak references<a class="headerlink" href="#weak-references" title="Permalink to this headline">¶</a></h1> | 58 | <span id="topic-weak"></span><span id="index-0"></span><h1>20. Weak references<a class="headerlink" href="#weak-references" title="Permalink to this headline">¶</a></h1> |
| 59 | <p>A <em class="dfn">weak reference</em> is a <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">reference</em></a> that does not keep the | 59 | <p>A <em class="dfn">weak reference</em> is a <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">reference</em></a> that does not keep the |
| 60 | block it refers to <a class="reference internal" href="../glossary/l.html#term-live"><em class="xref std std-term">alive</em></a>.</p> | 60 | block it refers to <a class="reference internal" href="../glossary/l.html#term-live"><em class="xref std std-term">alive</em></a>.</p> |
| 61 | <p>The open source MPS supports weak references only:</p> | 61 | <p>The open source MPS supports weak references only:</p> |
| @@ -78,14 +78,14 @@ all weak references to the block have been splatted, the block may be | |||
| 78 | reclaimed.</p> | 78 | reclaimed.</p> |
| 79 | <p>For example, a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a> for objects in an AWL pool might | 79 | <p>For example, a <a class="reference internal" href="../glossary/s.html#term-scan-method"><em class="xref std std-term">scan method</em></a> for objects in an AWL pool might |
| 80 | look like this:</p> | 80 | look like this:</p> |
| 81 | <div class="highlight-c"><div class="highlight"><pre><span class="kt">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="kt">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="kt">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> | 81 | <div class="highlight-c"><div class="highlight"><pre><span class="n">mps_res_t</span> <span class="nf">obj_scan</span><span class="p">(</span><span class="n">mps_ss_t</span> <span class="n">ss</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">base</span><span class="p">,</span> <span class="n">mps_addr_t</span> <span class="n">limit</span><span class="p">)</span> |
| 82 | <span class="p">{</span> | 82 | <span class="p">{</span> |
| 83 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> | 83 | <span class="n">MPS_SCAN_BEGIN</span><span class="p">(</span><span class="n">ss</span><span class="p">)</span> <span class="p">{</span> |
| 84 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> | 84 | <span class="k">while</span> <span class="p">(</span><span class="n">base</span> <span class="o"><</span> <span class="n">limit</span><span class="p">)</span> <span class="p">{</span> |
| 85 | <span class="kt">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> | 85 | <span class="n">obj_t</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">base</span><span class="p">;</span> |
| 86 | <span class="kt">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span><span class="p">;</span> | 86 | <span class="n">mps_addr_t</span> <span class="n">p</span> <span class="o">=</span> <span class="n">obj</span><span class="o">-></span><span class="n">ref</span><span class="p">;</span> |
| 87 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> | 87 | <span class="k">if</span> <span class="p">(</span><span class="n">MPS_FIX1</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> <span class="p">{</span> |
| 88 | <span class="kt">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> | 88 | <span class="n">mps_res_t</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MPS_FIX2</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="o">&</span><span class="n">p</span><span class="p">);</span> |
| 89 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> | 89 | <span class="k">if</span> <span class="p">(</span><span class="n">res</span> <span class="o">!=</span> <span class="n">MPS_RES_OK</span><span class="p">)</span> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> |
| 90 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> | 90 | <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> |
| 91 | <span class="cm">/* reference was splatted */</span> | 91 | <span class="cm">/* reference was splatted */</span> |
| @@ -141,7 +141,7 @@ that block from being splatted. See <a class="reference internal" href="finaliza | |||
| 141 | </a></p> | 141 | </a></p> |
| 142 | <h4>Previous topic</h4> | 142 | <h4>Previous topic</h4> |
| 143 | <p class="topless"><a href="telemetry.html" | 143 | <p class="topless"><a href="telemetry.html" |
| 144 | title="previous chapter">18. Telemetry</a></p> | 144 | title="previous chapter">19. Telemetry</a></p> |
| 145 | <h4>Next topic</h4> | 145 | <h4>Next topic</h4> |
| 146 | <p class="topless"><a href="../pool/index.html" | 146 | <p class="topless"><a href="../pool/index.html" |
| 147 | title="next chapter">Pool reference</a></p><h4>Downloads</h4> | 147 | title="next chapter">Pool reference</a></p><h4>Downloads</h4> |
| @@ -173,7 +173,7 @@ that block from being splatted. See <a class="reference internal" href="finaliza | |||
| 173 | <a href="../pool/index.html" title="Pool reference" | 173 | <a href="../pool/index.html" title="Pool reference" |
| 174 | >next</a> |</li> | 174 | >next</a> |</li> |
| 175 | <li class="right" > | 175 | <li class="right" > |
| 176 | <a href="telemetry.html" title="18. Telemetry" | 176 | <a href="telemetry.html" title="19. Telemetry" |
| 177 | >previous</a> |</li> | 177 | >previous</a> |</li> |
| 178 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> | 178 | <li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li> |
| 179 | <li><a href="index.html" >Reference</a> »</li> | 179 | <li><a href="index.html" >Reference</a> »</li> |