mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 14:58:30 +00:00
Make emacs not croak when editing dlmalloc
This commit is contained in:
parent
3c7ae0fc72
commit
fa1e8a3e65
21 changed files with 3019 additions and 2985 deletions
77
third_party/dlmalloc/statistics.inc
vendored
Normal file
77
third_party/dlmalloc/statistics.inc
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
// clang-format off
|
||||
|
||||
/* ----------------------------- 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 */
|
Loading…
Add table
Add a link
Reference in a new issue