6 static size_t mal0_clear(char *p, size_t n)
8 const size_t pagesz = 4096; /* arbitrary */
9 if (n < pagesz) return n;
11 typedef uint64_t __attribute__((__may_alias__)) T;
13 typedef unsigned char T;
16 size_t i = (uintptr_t)pp & (pagesz - 1);
18 pp = memset(pp - i, 0, i);
19 if (pp - p < pagesz) return pp - p;
20 for (i = pagesz; i; i -= 2*sizeof(T), pp -= 2*sizeof(T))
21 if (((T *)pp)[-1] | ((T *)pp)[-2])
26 void *calloc(size_t m, size_t n)
28 if (n && m > (size_t)-1/n) {
36 return memset(p, 0, n);