mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-28 17:10:59 +01:00
zsh-3.1.5-pws-19
This commit is contained in:
parent
ea0ddb0fc6
commit
4fec788fa5
52 changed files with 1568 additions and 340 deletions
33
Src/mem.c
33
Src/mem.c
|
|
@ -96,7 +96,7 @@ static int h_m[1025], h_push, h_pop, h_free;
|
|||
|
||||
#endif
|
||||
|
||||
#define H_ISIZE sizeof(long)
|
||||
#define H_ISIZE sizeof(zlong)
|
||||
#define HEAPSIZE (8192 - H_ISIZE)
|
||||
#define HEAP_ARENA_SIZE (HEAPSIZE - sizeof(struct heap))
|
||||
#define HEAPFREE (16384 - H_ISIZE)
|
||||
|
|
@ -500,8 +500,9 @@ ztrdup(const char *s)
|
|||
/*
|
||||
Below is a simple segment oriented memory allocator for systems on
|
||||
which it is better than the system's one. Memory is given in blocks
|
||||
aligned to an integer multiple of sizeof(long) (4 bytes on most machines,
|
||||
but 8 bytes on e.g. a dec alpha). Each block is preceded by a header
|
||||
aligned to an integer multiple of sizeof(zlong) (4 bytes on most machines,
|
||||
but 8 bytes on e.g. a dec alpha; it will be 8 bytes if we are using
|
||||
long long's or equivalent). Each block is preceded by a header
|
||||
which contains the length of the data part (in bytes). In allocated
|
||||
blocks only this field of the structure m_hdr is senseful. In free
|
||||
blocks the second field (next) is a pointer to the next free segment
|
||||
|
|
@ -561,22 +562,26 @@ ztrdup(const char *s)
|
|||
|
||||
struct m_shdr {
|
||||
struct m_shdr *next; /* next one on free list */
|
||||
#ifdef ZSH_64_BIT_TYPE
|
||||
/* dummy to make this 64-bit aligned */
|
||||
struct m_shdr *dummy;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct m_hdr {
|
||||
long len; /* length of memory block */
|
||||
zlong len; /* length of memory block */
|
||||
struct m_hdr *next; /* if free: next on free list
|
||||
if block of small blocks: next one with
|
||||
small blocks of same size*/
|
||||
struct m_shdr *free; /* if block of small blocks: free list */
|
||||
long used; /* if block of small blocks: number of used
|
||||
zlong used; /* if block of small blocks: number of used
|
||||
blocks */
|
||||
};
|
||||
|
||||
|
||||
/* alignment for memory blocks */
|
||||
|
||||
#define M_ALIGN (sizeof(long))
|
||||
#define M_ALIGN (sizeof(zlong))
|
||||
|
||||
/* length of memory header, length of first field of memory header and
|
||||
minimal size of a block left free (if we allocate memory and take a
|
||||
|
|
@ -585,7 +590,7 @@ struct m_hdr {
|
|||
the free list) */
|
||||
|
||||
#define M_HSIZE (sizeof(struct m_hdr))
|
||||
#define M_ISIZE (sizeof(long))
|
||||
#define M_ISIZE (sizeof(zlong))
|
||||
#define M_MIN (2 * M_ISIZE)
|
||||
|
||||
/* a pointer to the last free block, a pointer to the free list (the blocks
|
||||
|
|
@ -621,9 +626,9 @@ static char *m_high, *m_low;
|
|||
#define M_SNUM 50
|
||||
#define M_SLEN(M) ((M)->len / M_SNUM)
|
||||
#define M_SBLEN(S) ((S) * M_SNUM + sizeof(struct m_shdr *) + \
|
||||
sizeof(long) + sizeof(struct m_hdr *))
|
||||
sizeof(zlong) + sizeof(struct m_hdr *))
|
||||
#define M_BSLEN(S) (((S) - sizeof(struct m_shdr *) - \
|
||||
sizeof(long) - sizeof(struct m_hdr *)) / M_SNUM)
|
||||
sizeof(zlong) - sizeof(struct m_hdr *)) / M_SNUM)
|
||||
#define M_NSMALL 8
|
||||
|
||||
static struct m_hdr *m_small[M_NSMALL];
|
||||
|
|
@ -1198,8 +1203,9 @@ bin_mem(char *name, char **argv, char *ops, int func)
|
|||
if (m == mf)
|
||||
buf[0] = '\0';
|
||||
else if (m == ms)
|
||||
sprintf(buf, "%ld %ld %ld", M_SNUM - ms->used, ms->used,
|
||||
(m->len - sizeof(struct m_hdr)) / M_SNUM + 1);
|
||||
sprintf(buf, "%ld %ld %ld", (long)(M_SNUM - ms->used),
|
||||
(long)ms->used,
|
||||
(long)(m->len - sizeof(struct m_hdr)) / M_SNUM + 1);
|
||||
|
||||
else {
|
||||
for (i = 0, b = buf, c = (char *)&m->next; i < 20 && i < m->len;
|
||||
|
|
@ -1210,7 +1216,7 @@ bin_mem(char *name, char **argv, char *ops, int func)
|
|||
|
||||
printf("%d\t%d\t%ld\t%ld\t%s\t%ld\t%s\n", ii,
|
||||
(m == mf) ? fi++ : ui++,
|
||||
(long)m, m->len,
|
||||
(long)m, (long)m->len,
|
||||
(m == mf) ? "free" : ((m == ms) ? "small" : "used"),
|
||||
(m == mf) ? (f += m->len) : (u += m->len),
|
||||
buf);
|
||||
|
|
@ -1231,7 +1237,8 @@ bin_mem(char *name, char **argv, char *ops, int func)
|
|||
printf("%ld\t", (long)i * M_ISIZE);
|
||||
|
||||
for (ii = 0, m = m_small[i]; m; m = m->next) {
|
||||
printf("(%ld/%ld) ", M_SNUM - m->used, m->used);
|
||||
printf("(%ld/%ld) ", (long)(M_SNUM - m->used),
|
||||
(long)m->used);
|
||||
if (!((++ii) & 7))
|
||||
printf("\n\t");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue