Files
cppdraft_translate/cppdraft/c/malloc.md
2025-10-25 03:02:53 +03:00

103 lines
3.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[c.malloc]
# 20 Memory management library [[mem]](./#mem)
## 20.2 Memory [[memory]](memory#c.malloc)
### 20.2.12 C library memory allocation [c.malloc]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2131)
[*Note [1](#note-1)*:
The header [<cstdlib>](cstdlib.syn#header:%3ccstdlib%3e "17.2.2Header <cstdlib> synopsis[cstdlib.syn]") declares the functions described in this subclause[.](#1.sentence-1)
— *end note*]
[🔗](#lib:aligned_alloc)
`void* aligned_alloc(size_t alignment, size_t size);
void* calloc(size_t nmemb, size_t size);
void* malloc(size_t size);
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2147)
*Effects*: These functions have the semantics specified in the C standard library[.](#2.sentence-1)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2151)
*Remarks*: These functions do not attempt to allocate
storage by calling ::operator new() ([[new.delete]](new.delete "17.6.3Storage allocation and deallocation"))[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2157)
These functions implicitly create objects ([[intro.object]](intro.object "6.8.2Object model"))
in the returned region of storage and
return a pointer to a suitable created object[.](#4.sentence-1)
In the case of calloc,
the objects are created before the storage is zeroed[.](#4.sentence-2)
[🔗](#lib:realloc)
`void* realloc(void* ptr, size_t size);
`
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2171)
*Preconditions*: free(ptr) has well-defined behavior[.](#5.sentence-1)
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2175)
*Effects*: If ptr is not null and size is zero,
the behavior is erroneous and the effects are implementation-defined[.](#6.sentence-1)
Otherwise, this function has the semantics specified in the C standard library[.](#6.sentence-2)
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2181)
*Remarks*: This function does not attempt to allocate storage
by calling ::operator new() ([[new.delete]](new.delete "17.6.3Storage allocation and deallocation"))[.](#7.sentence-1)
When a non-null pointer is returned,
this function implicitly creates objects ([[intro.object]](intro.object "6.8.2Object model"))
in the returned region of storage and
returns a pointer to a suitable created object[.](#7.sentence-2)
The objects are created before the storage is copied[.](#7.sentence-3)
[🔗](#lib:free)
`void free(void* ptr);
`
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2198)
*Effects*: This function has the semantics specified in the C standard library[.](#8.sentence-1)
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L2202)
*Remarks*: This function does not attempt to
deallocate storage by calling::operator delete()[.](#9.sentence-1)
See also: ISO/IEC 9899:2024, 7.22.3