1
Fork 0
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:
Gareth Rees 2014-06-18 17:10:50 +01:00
commit 162cc7e7bb
11 changed files with 36 additions and 21 deletions

View file

@ -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());

View file

@ -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());

View file

@ -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)

View file

@ -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");

View file

@ -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");

View file

@ -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);

View file

@ -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);

View file

@ -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)
{

View file

@ -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))

View file

@ -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/

View file

@ -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