mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
fa20edc44d
- Remove most __ASSEMBLER__ __LINKER__ ifdefs - Rename libc/intrin/bits.h to libc/serialize.h - Block pthread cancelation in fchmodat() polyfill - Remove `clang-format off` statements in third_party
76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
|
|
/* ----------------------------- statistics ------------------------------ */
|
|
|
|
#if !NO_MALLINFO
|
|
static struct mallinfo internal_mallinfo(mstate m) {
|
|
struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
ensure_initialization();
|
|
if (!PREACTION(m)) {
|
|
check_malloc_state(m);
|
|
if (is_initialized(m)) {
|
|
size_t nfree = SIZE_T_ONE; /* top always free */
|
|
size_t mfree = m->topsize + TOP_FOOT_SIZE;
|
|
size_t sum = mfree;
|
|
msegmentptr s = &m->seg;
|
|
while (s != 0) {
|
|
mchunkptr q = align_as_chunk(s->base);
|
|
while (segment_holds(s, q) &&
|
|
q != m->top && q->head != FENCEPOST_HEAD) {
|
|
size_t sz = chunksize(q);
|
|
sum += sz;
|
|
if (!is_inuse(q)) {
|
|
mfree += sz;
|
|
++nfree;
|
|
}
|
|
q = next_chunk(q);
|
|
}
|
|
s = s->next;
|
|
}
|
|
|
|
nm.arena = sum;
|
|
nm.ordblks = nfree;
|
|
nm.hblkhd = m->footprint - sum;
|
|
nm.usmblks = m->max_footprint;
|
|
nm.uordblks = m->footprint - mfree;
|
|
nm.fordblks = mfree;
|
|
nm.keepcost = m->topsize;
|
|
}
|
|
|
|
POSTACTION(m);
|
|
}
|
|
return nm;
|
|
}
|
|
#endif /* !NO_MALLINFO */
|
|
|
|
#if !NO_MALLOC_STATS
|
|
static void internal_malloc_stats(mstate m) {
|
|
ensure_initialization();
|
|
if (!PREACTION(m)) {
|
|
size_t maxfp = 0;
|
|
size_t fp = 0;
|
|
size_t used = 0;
|
|
check_malloc_state(m);
|
|
if (is_initialized(m)) {
|
|
msegmentptr s = &m->seg;
|
|
maxfp = m->max_footprint;
|
|
fp = m->footprint;
|
|
used = fp - (m->topsize + TOP_FOOT_SIZE);
|
|
|
|
while (s != 0) {
|
|
mchunkptr q = align_as_chunk(s->base);
|
|
while (segment_holds(s, q) &&
|
|
q != m->top && q->head != FENCEPOST_HEAD) {
|
|
if (!is_inuse(q))
|
|
used -= chunksize(q);
|
|
q = next_chunk(q);
|
|
}
|
|
s = s->next;
|
|
}
|
|
}
|
|
POSTACTION(m); /* drop lock */
|
|
kprintf("max system bytes = %10lu\n", (unsigned long)(maxfp));
|
|
kprintf("system bytes = %10lu\n", (unsigned long)(fp));
|
|
kprintf("in use bytes = %10lu\n", (unsigned long)(used));
|
|
}
|
|
}
|
|
#endif /* NO_MALLOC_STATS */
|