mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-13 10:02:38 +00:00
Add yet an option, this time on how to deal with malloc(0) and realloc(ptr.0)
Prompted by: X11 & XFree86
This commit is contained in:
parent
281e052e36
commit
7c5232c617
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=26579
@ -34,7 +34,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" @(#)malloc.3 8.1 (Berkeley) 6/4/93
|
||||
.\" $Id: malloc.3,v 1.9 1997/03/22 23:48:12 mpp Exp $
|
||||
.\" $Id: malloc.3,v 1.10 1997/05/30 20:39:32 phk Exp $
|
||||
.\"
|
||||
.Dd August 27, 1996
|
||||
.Dt MALLOC 3
|
||||
@ -149,6 +149,11 @@ This can substantially aid in compacting memory.
|
||||
``utrace'' generate entries for ktrace(1) for all operations.
|
||||
Consult the source for this one.
|
||||
|
||||
.It V
|
||||
``sysV'' operations that attempt to allocate zero bytes will
|
||||
return a null pointer. Be aware of the conflict if you also
|
||||
have ``X'' set.
|
||||
|
||||
.It X
|
||||
``xmalloc''
|
||||
rather than return failure,
|
||||
@ -217,7 +222,7 @@ Here is a brief description of the error messages and what they mean:
|
||||
.Pp
|
||||
``(ES): mumble mumble mumble'':
|
||||
malloc have been compiled with -DEXTRA_SANITY and something looks
|
||||
fishy in there. Consult sources and or wizards.
|
||||
fishy in there. Consult sources and/or wizards.
|
||||
.Pp
|
||||
``allocation failed''
|
||||
if the ``A'' option is specified it is an error for
|
||||
@ -272,6 +277,13 @@ would be possible to add a sigblock() around this package,
|
||||
but it would have a performance penalty that is not acceptable
|
||||
as the default.
|
||||
.Pp
|
||||
``out of memory''
|
||||
The ``X'' flag is active and an allocation of memory failed.
|
||||
.Pp
|
||||
``open of /dev/zero''
|
||||
On certain architectures /dev/zero is used as a source of
|
||||
anonymous pages for the page directory, opening failed.
|
||||
.Pp
|
||||
``unknown char in MALLOC_OPTIONS''
|
||||
we found something we didn't understand.
|
||||
.Sh SEE ALSO
|
||||
@ -286,6 +298,9 @@ The
|
||||
.Fn malloc
|
||||
function conforms to
|
||||
.St -ansiC .
|
||||
.Sh BUGS
|
||||
It can be argued that returning a null pointer when asked to
|
||||
allocate zero bytes is a silly response to a silly question.
|
||||
.Sh HISTORY
|
||||
The present implementation of malloc started out as a filesystem on a drum
|
||||
attached to a 20bit binary challenged computer built with discrete germanium
|
||||
@ -293,7 +308,7 @@ transistors, and it has since graduated to handle primary storage rather than
|
||||
secondary.
|
||||
.Pp
|
||||
The main difference from other malloc implementations are believed to be that
|
||||
the free pages are not accessed until allocated.
|
||||
the free pages are not accessed unless allocated.
|
||||
Most malloc implementations will store a data structure containing a,
|
||||
possibly double-, linked list in the free chunks of memory, used to tie
|
||||
all the free memory together.
|
||||
|
@ -6,7 +6,7 @@
|
||||
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* $Id: malloc.c,v 1.23 1997/05/30 20:39:32 phk Exp $
|
||||
* $Id: malloc.c,v 1.24 1997/06/04 12:55:49 jb Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -216,6 +216,9 @@ static int malloc_hint;
|
||||
/* xmalloc behaviour ? */
|
||||
static int malloc_xmalloc;
|
||||
|
||||
/* sysv behaviour for malloc(0) ? */
|
||||
static int malloc_sysv;
|
||||
|
||||
/* zero fill ? */
|
||||
static int malloc_zero;
|
||||
|
||||
@ -488,6 +491,8 @@ malloc_init ()
|
||||
case 'J': malloc_junk = 1; break;
|
||||
case 'u': malloc_utrace = 0; break;
|
||||
case 'U': malloc_utrace = 1; break;
|
||||
case 'v': malloc_sysv = 0; break;
|
||||
case 'V': malloc_sysv = 1; break;
|
||||
case 'x': malloc_xmalloc = 0; break;
|
||||
case 'X': malloc_xmalloc = 1; break;
|
||||
case 'z': malloc_zero = 0; break;
|
||||
@ -774,7 +779,9 @@ imalloc(size_t size)
|
||||
if (suicide)
|
||||
abort();
|
||||
|
||||
if ((size + malloc_pagesize) < size) /* Check for overflow */
|
||||
if (malloc_sysv && !size)
|
||||
result = 0;
|
||||
else if ((size + malloc_pagesize) < size) /* Check for overflow */
|
||||
result = 0;
|
||||
else if (size <= malloc_maxsize)
|
||||
result = malloc_bytes(size);
|
||||
@ -1179,9 +1186,6 @@ realloc(void *ptr, size_t size)
|
||||
}
|
||||
if (!ptr) {
|
||||
r = imalloc(size);
|
||||
} else if (ptr && !size) {
|
||||
ifree(ptr);
|
||||
r = 0;
|
||||
} else {
|
||||
r = irealloc(ptr, size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user