summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib
Commit message (Collapse)AuthorAgeFilesLines
* Backout 1.5 as requested by deischenjon2007-05-221-1/+0
|
* __cleanup() is needed for ports/devel/valgrind, export it.jon2007-05-221-0/+1
|
* Back out all POSIXified *env() changes.ache2007-05-014-96/+41
| | | | | | | | | Not because I admit they are technically wrong and not because of bug reports (I receive nothing). But because I surprisingly meets so strong opposition and resistance so lost any desire to continue that. Anyone who interested in POSIX can dig out what changes and how through cvs diffs.
* Bump .Ddache2007-04-301-1/+1
| | | | Suggested by: Henrik Brix Andersen <henrik@brixandersen.dk>
* Add phraseache2007-04-301-1/+2
| | | | | "so altering the argument shall change the environment." into putenv description.
* Make putenv() fully conforms to Open Group specs Issue 6ache2007-04-304-26/+58
| | | | | | | | | | | (also IEEE Std 1003.1-2001) The specs explicitly says that altering passed string should change the environment, i.e. putenv() directly puts its arg into environment (unlike setenv() which just copies it there). It means that putenv() can't be implemented via setenv() (like we have before) at all. Putenv() value lives (allows modifying) up to the next putenv() or setenv() call.
* Remove special case skipping initial '=' of the setenv() value "forache2007-04-302-7/+0
| | | | | | | | | compatibility with the different environment conventions" (man page). With the standards, we don't have them different anymore and IEEE Std 1003.1-2001 says that "The values that the environment variables may be assigned are not restricted except that they are considered to end with a null byte"
* Make setenv, putenv, getenv and unsetenv conforming to Open Group specsache2007-04-304-19/+48
| | | | | | | | | Issue 6 (also IEEE Std 1003.1-2001) in following areas: args, return, errors. Putenv still needs rewriting because specs explicitly says that altering passed string later should change the environment (currently we copy the string so can't provide that).
* Use C comments since we now preprocess these files with CPP.deischen2007-04-291-2/+4
|
* Swap "underflow"/"overflow" in the table header.ru2007-04-101-2/+2
| | | | | Submitted by: Ricardo Nabinger Sanchez MFC after: 3 days
* Use size_t instead of unsigned for pagesize-related values, in order tojasone2007-03-291-4/+8
| | | | | | | | | avoid downcasting issues. In particular, this change fixes posix_memalign(3) for alignments greater than 2^31 on LP64 systems. Make sure that NDEBUG is always set to be compatible with MALLOC_DEBUG. [1] Reported by: [1] Lee Hyo geol <hyogeollee@gmail.com>
* Remove the run promotion/demotion machinery. Replace it with red-blackjasone2007-03-281-430/+219
| | | | | | | | | | | | | | | | | | | | | | | trees that track all non-full runs for each bin. Use the red-black trees to be able to guarantee that each new allocation is placed in the lowest address available in any non-full run. This change completes the transition to allocating from low addresses in order to reduce the retention of sparsely used chunks. If the run in current use by a bin becomes empty, deallocate the run rather than retaining it for later use. The previous behavior had the tendency to spread empty runs across multiple chunks, thus preventing the release of chunks that were completely unused. Generalize base_chunk_alloc() (and rename it to base_pages_alloc()) to handle allocation sizes larger than the chunk size, so that it is possible to support chunk sizes that are smaller than an arena object. Reduce the minimum chunk size from 64kB to 8kB. Optimize tracking of addresses for deleted chunks. Fix a statistics bug for huge allocations.
* Update the IMPLEMENTATION NOTES section to reflect recent mallocjasone2007-03-281-13/+30
| | | | enhancements.
* Add a HISTORY section.jasone2007-03-281-0/+5
|
* Fix some subtle bugs for posix_memalign() having to do with integerjasone2007-03-241-18/+43
| | | | | | | | rounding and overflow. Carefully document what the various overflow tests actually detect. The bugs mostly canceled out, such that the worst possible failure cases resulted in non-fatal over-allocations.
* Fix posix_memalign() for large objects. Now that runs are extents ratherjasone2007-03-231-151/+297
| | | | | | | | than binary buddies, the alignment guarantees are weaker, which requires a more complex aligned allocation algorithm, similar to that used for alignment greater than the chunk size. Reported by: matteo
* Use extents rather than binary buddies to track free pages withinjasone2007-03-231-323/+332
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | chunks. This allows runs to be any multiple of the page size. The primary advantage is that large objects are no longer constrained to be 2^n pages, which can dramatically decrease internal fragmentation for large objects. This also allows the sizes for runs that back small objects to be more finely tuned. Free runs are searched for linearly using the chunk page map (with the help of some heuristic optimizations). This changes the allocation policy from "first best fit" to "first fit". A prototype red-black tree implementation for tracking free runs that implemented "first best fit" did not cause a measurable speed or memory usage difference for realistic chunk sizes (though of course it is possible to construct benchmarks that favor one allocation policy over another). Refine the handling of fullness constraints for small runs to be more tunable. Restructure the per chunk page map to contain only two fields per entry, rather than four. Also, increase each entry from 4 to 8 bytes, since it allows for 32-bit integers, without increasing the number of chunk header pages. Relax the maximum chunk size constraint. This is of no practical interest; it is merely fallout from the chunk page map restructuring. Revamp statistics gathering and reporting to be faster, clearer and more informative. Statistics gathering is fast enough now to have little to no impact on application speed, but it still requires approximately two extra pages of memory per arena (per process). This memory overhead may be acceptable for most systems, but we still need to leave statistics gathering disabled by default in RELENG branches. Rename NO_MALLOC_EXTRAS to MALLOC_PRODUCTION in order to make its intent clearer (i.e. it should be defined in RELENG branches).
* Avoid using vsnprintf(3) unless MALLOC_STATS is defined, in order tojasone2007-03-201-152/+233
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | avoid substantial potential bloat for static binaries that do not otherwise use any printf(3)-family functions. [1] Rearrange arena_run_t so that the region bitmask can be minimally sized according to constraints related to each bin's size class. Previously, the region bitmask was the same size for all run headers, which wasted a measurable amount of memory. Rather than making runs for small objects as large as possible, make runs as small as possible such that header overhead stays below a certain bound. There are two exceptions that override the header overhead bound: 1) If the bound is impossible to honor, it is relaxed on a per-size-class basis. Since there is one bit of header overhead per object (plus a constant), it is impossible to achieve a header overhead less than or equal to 1/(# of bits per object). For the current setting of maximum 0.5% header overhead, this relaxation comes into play for {2, 4, 8, 16}-byte objects, for which header overhead is (on 64-bit systems) {7.1, 4.3, 2.2, 1.2}%, respectively. 2) There is still a cap on small run size, still set to 64kB. This comes into play for {1024, 2048}-byte objects, for which header overhead is {1.6, 3.1}%, respectively. In practice, this reduces the run sizes, which makes worst case low-water memory usage due to fragmentation less bad. It also reduces worst case high-water run fragmentation due to non-full runs, but this is only a constant improvement (most important to small short-lived processes). Reduce the default chunk size from 2MB to 1MB. Benchmarks indicate that the external fragmentation reduction makes 1MB the new sweet spot (as small as possible without adversely affecting performance). Reported by: [1] kientzle
* Modify chunk_alloc() to prefer mmap()ed memory over sbrk()ed memory.jasone2007-02-221-36/+40
| | | | | | | | | | | This has no impact unless USE_BRK is defined (32-bit platforms), in which case user allocations are allocated via mmap() if at all possible, in order to avoid the possibility of unreclaimable chunks in the data segment. Fix an obscure bug in base_alloc() that could have allowed undefined behavior if an application were to use sbrk() in conjunction with a USE_BRK-enabled malloc.
* Fix a utrace(2)-related bug in calloc(3).jasone2007-01-311-44/+56
| | | | | | Integrate various pedantic cleanups. Submitted by: Andrew Doran <ad@netbsd.org>
* Per Regents of the University of Calfornia letter, remove advertisingimp2007-01-0958-232/+0
| | | | | | clause. # If I've done so improperly on a file, please let me know.
* Implement chunk allocation/deallocation hysteresis by caching one sparejasone2006-12-231-51/+86
| | | | | | | | chunk per arena, rather than immediately deallocating all unused chunks. This fixes a potential performance issue when allocating/deallocating an object of size (4kB..1MB] in a loop. Reported by: davidxu
* Note that the value from getenv() should not be modified by applications.trhodes2006-10-121-1/+5
| | | | | PR: 60544 Reviewed by: ru
* getenv.3: Put "is" on a line with other wordstrhodes2006-10-071-2/+1
| | | | | | | | getobjformat.3: "takes precedence over" is not an envrionment variable. PR: 75545 Submitted by: n-kogane@syd.odn.ne.jp MFC after: 3 days
* Revise markup in recently added manpages.ru2006-09-303-43/+48
|
* Keep compatible parts in sync with OpenBSD v1.21, add some comments.ache2006-09-231-15/+7
| | | | No functional changes.
* Remove code #ifndef'ed in prev. commit to stay in sync with OpenBSDache2006-09-221-12/+0
| | | | v1.21 which just do that.
* Be more GNU compatible:ache2006-09-221-2/+5
| | | | | | don't be greedy on the GNU "::" extension when arg separated by whitespace and POSIX_CORRECTLY is set. From POSIX point of view this is unclear situation, so minimal assumption looks right.
* Markup fixes.ru2006-09-171-51/+51
|
* Change the way base allocation is done for internal malloc datajasone2006-09-081-56/+93
| | | | | | | structures, in order to avoid the possibility of attempted recursive lock acquisition for chunks_mtx. Reported by: Slawa Olhovchenkov <slw@zxy.spb.ru>
* alloca() cannot check if the allocation is valid; mention the consequences.ru2006-09-051-4/+13
| | | | Obtained from: OpenBSD
* Enable TLS on PowerPC.marcel2006-09-011-1/+0
|
* Enable TLS on ia64.marcel2006-09-011-1/+0
|
* Correctly handle the case in calloc(num, size) wherecperciva2006-08-131-1/+1
| | | | | | | | | | | (size_t)(num * size) == 0 but both num and size are nonzero. Reported by: Ilja van Sprundel Approved by: jasone Security: Integer overflow; calloc was allocating 1 byte in response to a request for a multiple of 2^32 (or 2^64) bytes instead of returning NULL.
* Define NO_TLS on PowerPC.marcel2006-08-091-0/+1
| | | | See also: PR ia64/91846
* Conditionally expand the size_invs lookup table in arena_run_reg_dalloc()jasone2006-07-271-1/+12
| | | | | | | | so that architectures with a quantum of 8 (rather than 16) work. Restore arm's quantum to 8. Submitted by: jmg
* Use 4 as QUANTUM_2POW_MIN on arm as it is on any other architecture, to avoidcognet2006-07-271-1/+1
| | | | triggering an assertion later.
* Fix cpp logic in arena_malloc() to adjust size when assertions are enabled,jasone2006-07-271-23/+19
| | | | | | | | even if stats gathering is disabled. [1] Remove 'size' parameter from several functions that do not use it. Reported by: [1] ache
* Use some math tricks in arena_run_reg_dalloc() to avoid actual division, asjasone2006-07-011-83/+90
| | | | | | | | | | | | | | | | | well as avoiding a switch statement. This change has no significant impact to performance when branch prediction is successful at predicting the sizes of objects passed to free(), but in the case that the object sizes are semi-random, this change has the potential to prevent many branch prediction misses, thus improving performance substantially. Take advantage of alignment guarantees in ipalloc(), and pad object sizes to something less than a power of two when possible. This has the potential to substantially reduce internal fragmentation for objects allocated via posix_memalign(). Avoid an unnecessary pow2_ceil() call in arena_ralloc(). Submitted by: djam8193ah@hotmail.com
* Make the behavior of malloc(0) standards-compliant by getting rid of nil,jasone2006-06-301-48/+46
| | | | | | | | | and instead creating a small allocation for each malloc(0) call. The optional SysV compatibility behavior remains unchanged. Add a couple of assertions. Fix a couple of typos in error message strings.
* twalk() expects an `action' function not a comparison function.keramida2006-06-231-1/+1
| | | | | | | | | The text is correct in the "DESCRIPTION" section, so fix "SYNOPSIS" to use the correct name. PR: docs/90498 Submitted by: Vasil Dimov MFC after: 3 days
* Add a missing case for the switch statement in arena_run_reg_dalloc(). [1]jasone2006-06-201-8/+20
| | | | | | | Fix a leak in chunk_dealloc(). [2] Reported by: [1] djam8193ah@hotmail.com, [2] Ville-Pertti Keinonen <will@exomi.com>
* o .Xr strtonum(3).maxim2006-05-202-0/+2
| | | | MFC after: 1 week
* Correct decoding a string containing '/'.jkim2006-05-191-1/+1
| | | | | PR: 97485 Submitted by: Mikko Tyolajarvi < mbsd at pacbell dot net >
* Increase the minimum chunk size by a power of two (32kB --> 64kB, assumingjasone2006-05-101-2/+2
| | | | | | | | 4kB pages), in order to avoid dangerous rounding error when calculating fullness limits during run promotion/demotion. Convert a structure bitfield to a normal field in areana_run_t. This should have been changed along with the other fields in revision 1.120.
* Change the semantics of brk_max to dynamically deal with data segmentjasone2006-04-271-71/+83
| | | | | | | | | | | | | | | bounds. [1] Modify logic for utilizing the data segment, such that it is possible to create huge allocations there. Shrink the data segment when deallocating a chunk, if it is at the end of the data segment. Rename chunk_size to csize in huge_malloc(), in order to avoid masking a static variable of the same name. [1] Reported by: Paul Allen <nospam@ugcs.caltech.edu>
* s/soley/solelyschweikh2006-04-131-1/+1
|
* Add an unreachable return statement, in order to avoid a compiler warningjasone2006-04-051-0/+1
| | | | | | for non-standard optimization levels. Reported by: Michael Zach <zach@webges.com>
* Only initialize the first per-chunk page map element for free runs. Thisjasone2006-04-051-31/+16
| | | | makes run split/coalesce operations of complexity lg(n) rather than n.
* Add malloc_usable_size() to the RETURN VALUES section.jasone2006-04-041-1/+6
|
OpenPOWER on IntegriCloud