From d787bec7d5e435a6a4c28ba54a868fac4cbaacd7 Mon Sep 17 00:00:00 2001 From: Jeehoon Kang Date: Fri, 31 Jul 2015 23:55:01 +0900 Subject: [PATCH] Revise TARPL's description for allocating 0 bytes In Section 3.2, TARPL says that "standard allocators (including jemalloc, the one used by default in Rust) generally consider passing in 0 for the size of an allocation as Undefined Behaviour." However, the C standard and jemalloc manual says allocating zero bytes should succeed: - C11 7.22.3 paragraph 1: "If the size of the space requested is zero, the behavior is implementation-defined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object." - [jemalloc manual](http://www.freebsd.org/cgi/man.cgi?query=jemalloc&sektion=3): "The malloc and calloc functions return a pointer to the allocated memory if successful; otherwise a NULL pointer is returned and errno is set to ENOMEM." + Note that the description for `allocm` says "Behavior is undefined if size is 0," but it is an experimental API. --- exotic-sizes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exotic-sizes.md b/exotic-sizes.md index 0b653a7..e8637e3 100644 --- a/exotic-sizes.md +++ b/exotic-sizes.md @@ -85,8 +85,8 @@ support values. Safe code need not worry about ZSTs, but *unsafe* code must be careful about the consequence of types with no size. In particular, pointer offsets are no-ops, and standard allocators (including jemalloc, the one used by default in Rust) -generally consider passing in `0` for the size of an allocation as Undefined -Behaviour. +may return `nullptr` when a zero-sized allocation is requested, which is +indistinguishable from out of memory.