mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-30 09:00:31 -08:00
Catch-up merge from master sources @186673 to branch/2014-06-14/vm.
Copied from Perforce Change: 186675 ServerID: perforce.ravenbrook.com
This commit is contained in:
commit
162cc7e7bb
11 changed files with 36 additions and 21 deletions
|
|
@ -301,7 +301,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2*testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 15));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(2*testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
mps_message_type_enable(arena, mps_message_type_gc());
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2*testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 15));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(2*testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
mps_message_type_enable(arena, mps_message_type_gc());
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ static void test_arena(int mode)
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 14));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
if (mode == ModeCOMMIT)
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 14));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
die(mps_arena_commit_limit_set(arena, 2 * testArenaSIZE), "commit_limit_set");
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 14));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
die(mps_thread_reg(&thread, arena), "thread_reg");
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2 * testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(2*testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args),
|
||||
"mps_arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
|
|
@ -215,7 +215,7 @@ int main(int argc, char *argv[])
|
|||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2 * testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_ZONED, FALSE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(2*testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_vm(), args),
|
||||
"mps_arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
|
|
@ -226,7 +226,7 @@ int main(int argc, char *argv[])
|
|||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_ZONED, FALSE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_CL_BASE, malloc(testArenaSIZE));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(testArenaSIZE));
|
||||
die(mps_arena_create_k(&arena, mps_arena_class_cl(), args),
|
||||
"mps_arena_create");
|
||||
} MPS_ARGS_END(args);
|
||||
|
|
|
|||
|
|
@ -219,13 +219,13 @@ int main(int argc, char *argv[])
|
|||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(testArenaSIZE));
|
||||
testInArena(mps_arena_class_vm(), args, &bothOptions);
|
||||
} MPS_ARGS_END(args);
|
||||
|
||||
MPS_ARGS_BEGIN(args) {
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, smallArenaSIZE);
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 15));
|
||||
MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, rnd_grain(smallArenaSIZE));
|
||||
testInArena(mps_arena_class_vm(), args, &fenceOptions);
|
||||
} MPS_ARGS_END(args);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
#include "mps.h"
|
||||
#include "misc.h" /* for NOOP */
|
||||
|
||||
#include <math.h> /* fmod */
|
||||
#include <math.h> /* fmod, log2 */
|
||||
#include <stdio.h> /* fflush, printf, stderr, sscanf, vfprintf */
|
||||
#include <stdlib.h> /* abort, exit, getenv */
|
||||
#include <time.h> /* time */
|
||||
|
|
@ -220,6 +220,14 @@ double rnd_double(void)
|
|||
return rnd() / R_m_float;
|
||||
}
|
||||
|
||||
size_t rnd_grain(size_t arena_size)
|
||||
{
|
||||
/* The grain size must be small enough to allow for a complete set
|
||||
* of zones in the initial chunk. */
|
||||
size_t s = (size_t)log2((double)arena_size);
|
||||
Insist(s > MPS_WORD_SHIFT);
|
||||
return (size_t)1 << (rnd() % (s - MPS_WORD_SHIFT));
|
||||
}
|
||||
|
||||
rnd_state_t rnd_seed(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -248,6 +248,12 @@ extern mps_addr_t rnd_addr(void);
|
|||
extern double rnd_double(void);
|
||||
|
||||
|
||||
/* rnd_grain -- return a random grain size that's not too big for the
|
||||
* given arena size */
|
||||
|
||||
extern size_t rnd_grain(size_t arena_size);
|
||||
|
||||
|
||||
/* randomize -- randomize the generator, or initialize to replay
|
||||
*
|
||||
* randomize(argc, argv) randomizes the rnd generator (using time(3))
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ Welcome to the **Memory Management Reference**! This is a resource for programm
|
|||
|
||||
.. admonition:: :ref:`glossary`
|
||||
|
||||
A glossary of more than 500 memory management terms, from
|
||||
A glossary of more than 500 :term:`memory management` terms, from
|
||||
:term:`absolute address` to :term:`zero count table`.
|
||||
|
||||
.. image:: diagrams/treadmill.svg
|
||||
|
|
@ -17,7 +17,8 @@ Welcome to the **Memory Management Reference**! This is a resource for programm
|
|||
|
||||
.. admonition:: :ref:`mmref-intro`
|
||||
|
||||
Articles giving a beginner's overview of memory management.
|
||||
Articles giving a beginner's overview of :term:`memory
|
||||
management`.
|
||||
|
||||
.. image:: diagrams/address.svg
|
||||
:target: intro_
|
||||
|
|
@ -27,7 +28,7 @@ Welcome to the **Memory Management Reference**! This is a resource for programm
|
|||
|
||||
.. admonition:: :ref:`bibliography`
|
||||
|
||||
Books and research papers related to memory management.
|
||||
Books and research papers related to :term:`memory management`.
|
||||
|
||||
.. image:: diagrams/copying.svg
|
||||
:target: bib_
|
||||
|
|
@ -37,7 +38,7 @@ Welcome to the **Memory Management Reference**! This is a resource for programm
|
|||
|
||||
.. admonition:: :ref:`mmref-faq`
|
||||
|
||||
Frequently asked questions about memory management.
|
||||
Frequently asked questions about :term:`memory management`.
|
||||
|
||||
.. image:: diagrams/snap-out.svg
|
||||
:target: faq_
|
||||
|
|
@ -46,9 +47,9 @@ Welcome to the **Memory Management Reference**! This is a resource for programm
|
|||
|
||||
The Memory Management Reference is maintained by `Ravenbrook
|
||||
Limited`_. We also maintain the `Memory Pool System`_ (an open-source,
|
||||
thread-safe, :term:`incremental <incremental garbage collection>`
|
||||
garbage collector), and we are happy to provide advanced memory
|
||||
management solutions to language and application developers through
|
||||
thread-safe, :term:`incremental garbage collector <incremental garbage
|
||||
collection>`), and we are happy to provide advanced :term:`memory
|
||||
management` solutions to language and application developers through
|
||||
our `consulting service`_.
|
||||
|
||||
.. _Ravenbrook Limited: http://www.ravenbrook.com/
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ Interface changes
|
|||
.................
|
||||
|
||||
#. The granularity with which the arena manages memory can now be
|
||||
specified using the :c:macro:`MPS_KEY_ARENA_SIZE` keyword argument
|
||||
to :c:func:`mps_arena_create_k`. See :c:func:`mps_arena_class_cl`
|
||||
and :c:func:`mps_arena_class_vm`.
|
||||
specified using the :c:macro:`MPS_KEY_ARENA_GRAIN_SIZE` keyword
|
||||
argument to :c:func:`mps_arena_create_k`. See
|
||||
:c:func:`mps_arena_class_cl` and :c:func:`mps_arena_class_vm`.
|
||||
|
||||
#. There is now a default value (currently 256 \ :term:`megabytes`)
|
||||
for the :c:macro:`MPS_KEY_ARENA_SIZE` keyword argument to
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue