]> git.lizzy.rs Git - rust.git/commitdiff
Revise TARPL's description for allocating 0 bytes
authorJeehoon Kang <jeehoon.kang@sf.snu.ac.kr>
Fri, 31 Jul 2015 14:55:01 +0000 (23:55 +0900)
committerJeehoon Kang <jeehoon.kang@sf.snu.ac.kr>
Thu, 6 Aug 2015 06:40:41 +0000 (15:40 +0900)
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.

src/doc/nomicon/exotic-sizes.md

index 0b653a7ad3a3e53c6f54e5eabd57e4a1e7198d38..e8637e38ac7d5f7d3230a5dbca95dc854a5352f1 100644 (file)
@@ -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.