diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
index 123fb3a2..bb15ae4f 100644
--- a/doc/jemalloc.xml.in
+++ b/doc/jemalloc.xml.in
@@ -1964,10 +1964,12 @@ malloc_conf = "xmalloc:true";]]>
[]
Total number of bytes in active chunks mapped by the
- allocator. This is a multiple of the chunk size, and is at least as
- large as stats.resident. This
- does not include inactive chunks.
+ allocator. This is a multiple of the chunk size, and is larger than
+ stats.active.
+ This does not include inactive chunks, even those that contain unused
+ dirty pages, which means that there is no strict ordering between this
+ and stats.resident.
diff --git a/src/base.c b/src/base.c
index 1a9b829a..3ab46ec8 100644
--- a/src/base.c
+++ b/src/base.c
@@ -132,6 +132,8 @@ base_stats_get(size_t *allocated, size_t *resident, size_t *mapped)
{
malloc_mutex_lock(&base_mtx);
+ assert(base_allocated <= base_resident);
+ assert(base_resident <= base_mapped);
*allocated = base_allocated;
*resident = base_resident;
*mapped = base_mapped;
diff --git a/test/unit/stats.c b/test/unit/stats.c
index 10999670..81ef0b72 100644
--- a/test/unit/stats.c
+++ b/test/unit/stats.c
@@ -3,7 +3,7 @@
TEST_BEGIN(test_stats_summary)
{
size_t *cactive;
- size_t sz, allocated, active, mapped;
+ size_t sz, allocated, active, resident, mapped;
int expected = config_stats ? 0 : ENOENT;
sz = sizeof(cactive);
@@ -15,6 +15,8 @@ TEST_BEGIN(test_stats_summary)
expected, "Unexpected mallctl() result");
assert_d_eq(mallctl("stats.active", &active, &sz, NULL, 0), expected,
"Unexpected mallctl() result");
+ assert_d_eq(mallctl("stats.resident", &resident, &sz, NULL, 0),
+ expected, "Unexpected mallctl() result");
assert_d_eq(mallctl("stats.mapped", &mapped, &sz, NULL, 0), expected,
"Unexpected mallctl() result");
@@ -23,8 +25,10 @@ TEST_BEGIN(test_stats_summary)
"active should be no larger than cactive");
assert_zu_le(allocated, active,
"allocated should be no larger than active");
- assert_zu_le(active, mapped,
- "active should be no larger than mapped");
+ assert_zu_lt(active, resident,
+ "active should be less than resident");
+ assert_zu_lt(active, mapped,
+ "active should be less than mapped");
}
}
TEST_END