Proposed addition of malloc_size_np()

Jason Evans jasone at FreeBSD.org
Fri Mar 24 23:17:10 UTC 2006


=== Proposal ===
Add malloc_size_np() to libc, and provide the prototype in malloc_np.h:

	size_t
	malloc_size_np(const void *ptr);

This function would return the usable size of the allocation pointed to 
by ptr, which is always greater than or equal to the size that was 
specified in the call to malloc(), calloc(), posix_memalign(), or 
realloc(), regardless of allocator implementation.  It is up to the 
implementation whether the value returned by malloc_size_np() differs 
from the size specified during allocation, but the return value must be 
consistent across multiple calls for the same allocation.

=== Rationale ===
The standard malloc(3) API does not provide a mechanism for querying the 
sizes of existing allocations.  This can be useful for a variety of 
purposes, including introspection and putting wrappers around the system 
malloc implementation.  For a stand-alone application, it is possible to 
always keep track of allocation sizes, but when integrating with third 
party libraries, this may not be possible.

The lack of such a function causes issues when porting software from 
Linux or OS X.  Linux provides malloc_usable_size(), which returns the 
usable size of an allocation (may be larger than the allocation request 
size).  OS X provides malloc_size() and malloc_good_size(), which return 
the precise allocation request size and the usable size of the 
allocation, respectively.  By providing malloc_size_np(), we provide an 
analogue to these APIs, without placing undue constraints on future 
malloc implementations.

I propose malloc_size_np() rather than malloc_size() (and a separate 
header file) in order to emphasize the non-portability of this function. 
  As a case in point, the proposed semantics differ from those of OS X's 
malloc_size().  If we were to use malloc_size(), there would be the 
potential for undue expectation of equivalence between operating systems.

===

Comments?

Thanks,
Jason


More information about the freebsd-arch mailing list