etl/docs/utilities/memory.md
John Wellbelove 4a88884b39
Issue/add hugo support for documentation (#1449)
* Add ranges

* Initial Hugo setup

* Work in progress

* Added selection for local or remote site

* Updated to 'light' theme

* Changed to using Hextra Hugo theme

* Changed to using Hextra Hugo theme

* Changed to Hextra Hugo theme

* Change to Hextra Hugo theme

* Updated Hugo setup.

* Updated Hugo setup.

# Conflicts:
#	docs/releases/_index.md

* Work in progress

* Added new fonts

Added new documentation

* Latest documentation updates

* Latest documentation updates

# Conflicts:
#	docs/containers/array.md
#	docs/containers/array_view.md
#	docs/containers/array_wrapper.md
#	docs/containers/bip_buffer_spsc_atomic.md
#	docs/containers/bitset.md
#	docs/containers/indirect_vector.md
#	docs/containers/vector.md
#	docs/getting-started/compilers.md

* Added bloom_filter markdown doc

* Added more documentation

Updated CSS for light and dark modes

* Fixed some menus

Added mode documentation files

* Updated CSS rules

Added badges to home page
Added uniqur_ptr + pool tutorial

* Fixed formatting on the home page markdown

Modified light amd dark code formatting

* Updated unique_ptr-with-pool

* Added container and shared message tutorials

* Updates to documentation

* Added const_multimap

* Updated source-formatting.md

* Added initial raw text files form Web site editor

* Innore coverage build directory

* Exported raw text documentation files from the web site editor

* Hugo updates

* Added Hugo intalation and markdown descriptions

* More addition to the documentation

* Added closure.md and updates to delegate.md

* Added format.md

* Added documentation for etl::delegate_observable, etl::function, Base64 codec

* Added io_port documentation

* Added basic_format_spec

* Added documentation for string_stream and string utilities.

* Added more documentation

Updated the documentation CSS

* Added documentation for clocks, day, duration

* Added more documentation for chrono classes

Updated callouts

* More chrono documentation

* Completed chrono documentation

* Maths functions documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Added multiple documentation files

* Added iterator.md

* Added debug_count.md and versions.md

* Added debug_count.md and versions.md

* Added more documentation

* More documentation

* Added some design pattern documentation

Modified some of the layout files
Modified the About documentation

* Converted more documentation pages

Modified the site CSS

* Added more documentation

Moced some documentation files to new directories

* Added more documentation

Tweaks to CSS

* Added callback_timer_deferred_locked documentation

* Added callback_timer_locked documentation

* More documentation updates

* More documentation updates

* More documentation updates

* New documentation files.

Harmonised file name format

* New documentation files.

* Multiple document updates

* Multiple document updates

* Final conversion of web pages

* Updates before PR

* Updates before PR

* Updates before PR

# Conflicts:
#	docs/blog/_index.md

* Final pre PR updates

* Updates to message framework documentation

* Renamed directory

* Fix spelling

* Added author and date to blog files

Moved documentation files merged from development

* Fixed 'Description' typo

* Fix typos

# Conflicts:
#	docs/IO/io_port.md
#	docs/containers/sets/const-multiset.md
#	docs/containers/sets/const-set.md
#	docs/maths/correlation.md
#	docs/maths/gamma.md

* Renamed two files to lower case

* Minor renaming

* Added author and date

* Updated callout on bresenham_line.md

Added support for showing the ETL version on the documentation first page, by copying the version.txt file as a hugo asset.
Updated the Python 'update_release.py' to copy 'version.txt'

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

# Conflicts:
#	docs/getting-started/view-the-docs-locally/hugo-commands.md

* Added a link to pseudo_moving_average.md

* Updated title pages for groups

* Fixed missing 404 for non-existent pages

* Fixed coordinate variable names in the 'Calculating the intersection' example

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.co.uk>
2026-06-06 13:12:44 +01:00

16 KiB

title
memory

address_of

template <typename T>
T* addressof(T& t)

Description
Returns the address of an object.

default_delete

template <typename T>
struct default_delete

template <typename T>
struct default_delete<T[]>

create_default_at

template <typename T>
void create_default_at(T* p)

Creates a default value. For POD types this will be undefined.


template <typename T, typename TCounter>
void create_default_at(T* p, TCounter count)

Creates a default value. For POD types this will be undefined.
The supplied counter will be incremented.

create_value_at

template <typename T>
void create_value_at(T* p)

Creates a default value by constructing the item with T().


template <typename T, typename TCounter>
void create_value_at(T* p, Tcounter count)

Creates a default value by constructing the item with T().
The supplied a counter will be incremented.

create_copy_at

template <typename T>
void create_copy_at(T* p)

Creates a default value by constructing the item with T(value).


template <typename T, typename TCounter>
void create_copy_at(T* p, const T& value, Tcounter count)

Creates a default value by constructing the item with T(value).
The supplied counter will be incremented.

make_default_at

template <typename T>
T& make_default_at(T* p)

Creates a default value. For POD types this will be undefined.
Returns a reference to the new object.


template <typename T, typename TCounter>
T& make_default_at(T* p, Tcounter count)

Description
Creates a default value. For POD types this will be undefined.
Returns a reference to the new object.
The supplied counter will be incremented.

make_value_at

template <typename T>
T& make_value_at(T* p)

Creates a default value by constructing the item with T().
Returns a reference to the new object.


template <typename T, typename TCounter>
T& make_value_at(T* p, Tcounter count)

Creates a default value by constructing the item with T().
Returns a reference to the new object.

make_copy_at

Creates a default value by constructing the item with T(value).
Returns a reference to the new object.
The second version is supplied a counter, which will be incremented.

template <typename T>
T& make_copy_at(T* p)

template <typename T, typename TCounter>
T& make_copy_at(T* p, const T& value, Tcounter count)

destroy_at

template <typename T>
void destroy_at(T* p)

Calls the destructor for non-pod types.


template <typename T, typename TCounter>
void destroy_at(T* p, TCounter& count)

Calls the destructor for non-pod types.
The supplied counter will be decremented.

destroy_n

template <typename T, typename TSize >
void destroy_n(T* p, TSize n)

Calls the destructor for a range of non-pod types, starting at address p.


template <typename T, typename TSize, typename TCounter>
void destroy_n(T* p, TSize n, TCounter& count)

Calls the destructor for a range of non-pod types, starting at address p.
The supplied counter will be decremented by the number of items destructed.

destroy

template <typename T>
void destroy(T* p, T* p_end)

Calls the destructor for a range of non-pod types, starting at address p.


template <typename T, typename TCounter>
void destroy(T* p, T* p_end, TCounter& count)

Calls the destructor for a range of non-pod types, starting at address p.
The supplied counter will be decremented by the number of items destructed.

create_copy

template <typename T>
struct create_copy

Derive from this, passing the derived class as the template parameter.
Provides the following member functions that constructs a copy at the specified address.


void create_copy_at(void* p);

template <typename TCounter>
void create_copy_at(void* p, Tcounter& count);

T& make_copy_at(void* p);

template <typename TCounter>
T& make_copy_at(void* p, Tcounter& count);

Example:

class Test : public etl::create_copy<Test>
{
  // Other members.
};

// Allocate memory large enough to contain a 'Test' object.
char buffer[sizeof(Test)];

Test test;

// Copy construct 'test' into the buffer memory.
Test& t = test.make_copy_at(buffer);

Create / Destroy objects Functions that create or destroy objects in uninitialised memory. Variations of the functions above that don't require an explicit reinterpret_cast.

template <typename TObject>
TObject& construct_object_at(void* p, TObject&& object)

Construct the object at p.
In a debug build the pointer is checked for correct alignment.
An etl::alignment_error is asserted if incorrect.
From: 20.35.12


template <typename TObject, typename... TArgs>
TObject& construct_object_at(void* p, TArgs&&... args)

Construct the object at p from arguments.
In a debug build the pointer is checked for correct alignment.
An etl::alignment_error is asserted if incorrect.
From: 20.35.12


template <typename TObject>
TObject& get_object_at(void* p)

Get the object at p.
In a debug build the pointer is checked for correct alignment.
An etl::alignment_error is asserted if incorrect.
From: 20.35.12


template <typename TObject>
void destroy_object_at(void* p)

Destroy the object at p.
In a debug build the pointer is checked for correct alignment. An etl::alignment_error is asserted if incorrect.
From: 20.35.12

uninitialized_fill

Fills uninitialised memory with N values.

template <typename TIterator, typename TSize, typename T>
TIterator uninitialized_fill_n(TIterator o_begin, TSize count, const T& value)

template <typename TIterator, typename TSize, typename T, typename TCounter>
TIterator uninitialized_fill_n(TIterator o_begin, TSize count, const T& value, typename TCounter)

template <typename TIterator, typename T>
TIterator uninitialized_fill(TIterator o_begin, TIterator o_end, const T& value)

template <typename TIterator, typename TSize, typename T, typename TCounter>
TIterator uninitialized_fill_n(TIterator o_begin, TSize count, const T& value, typename TCounter)

Fills uninitialised memory range with a value.

uninitialised_copy

template <typename TInputIterator, typename TOutputIterator>
TIterator uninitialized_copy(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
template <typename TInputIterator, typename TOutputIterator, typename TCounter>
TIterator uninitialized_copy(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, typename TCounter)

Copies a range of objects to uninitialised memory.

uninitialized_copy_n

template <typename TInputIterator, typename TSize, typename TOutputIterator>
TIterator uninitialized_copy_n(TInputIterator i_begin, TSize count, TOutputIterator o_begin)

template <typename TInputIterator, typename TSize, typename TOutputIterator, typename TCounter>
TIterator uninitialized_copy_n(TInputIterator i_begin, TSize count, TOutputIterator o_begin, typename TCounter)

Copies N objects to uninitialised memory.

uninitialized_move

template <typename TInputIterator, typename TOutputIterator>
TIterator uninitialized_move(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
template <typename TInputIterator, typename TOutputIterator, typename TCounter>
TIterator uninitialized_move(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin, typename TCounter)

Moves a range of objects to uninitialised memory.

Note: If using C++03 then this function will call etl::uninitialized_copy

uninitialized_copy_n

template <typename TInputIterator, typename TSize, typename TOutputIterator>
TIterator uninitialized_move_n(TInputIterator i_begin, TSize count, TOutputIterator o_begin)

template <typename TInputIterator, typename TSize, typename TOutputIterator, typename TCounter>
TIterator uninitialized_move_n(TInputIterator i_begin, TSize count, TOutputIterator o_begin, typename TCounter)

Moves N objects to uninitialised memory.

Note: If using C++03 then this function will call etl::uninitialized_copy_n

uninitialized_default_construct

template <typename TOutputIterator>
void uninitialized_default_construct(TOutputIterator o_begin, TOutputIterator o_end)

template <typename TOutputIterator, typename TCounter>
void uninitialized_default_construct(TOutputIterator o_begin, TOutputIterator o_end, typename TCounter)

template <typename TOutputIterator, typename TSize>
TOutputIterator uninitialized_default_construct_n(TOutputIterator o_begin, TSize n)

template <typename TOutputIterator, typename TSize, typename TCounter>
TOutputIterator uninitialized_default_construct_n(TOutputIterator o_begin, TSize n, TCounter& count)

Creates default values. For POD types this will be undefined.

uninitialized_value_construct

template <typename TOutputIterator>
void uninitialized_value_construct(TOutputIterator o_begin, TOutputIterator o_end)

template <typename TOutputIterator, typename TCounter>
void uninitialized_value_construct(TOutputIterator o_begin, TOutputIterator o_end, TCounter& count)

template <typename TOutputIterator, typename TSize>
TOutputIterator uninitialized_value_construct_n(TOutputIterator o_begin, TSize n)

template <typename TOutputIterator, typename TSize, typename TCounter>
TOutputIterator uninitialized_value_construct_n(TOutputIterator o_begin, TSize n, TCounter& count)

Creates values constructed with T().

unique_ptr

Like std::unique_ptr, etl::unique_ptr is a smart pointer that owns and manages another object through a pointer and disposes of that object when the unique_ptr goes out of scope.

https://en.cppreference.com/w/cpp/memory/unique_ptr

template<typename T>
class unique_ptr 

template<typename T>
class unique_ptr<T[]> 

Memory clear

void memory_clear(volatile char* p, size_t n)

template <typename T>
void memory_clear(volatile T &object)

A low level function that clears an object's memory to zero.

memory_clear_range

template <typename T>
void memory_clear_range(volatile T* begin, size_t n)

template <typename T>
void memory_clear_range(volatile T* begin, volatile T* end)

A low level function that clears a range to zero.

memory_set

void memory_set(volatile char* p, size_t n, char value)
template <typename T>
void memory_set(volatile T &object, char value)

Low level functions that clear an object's memory to a value.

memory_set_range

template <typename T>
void memory_set_range(volatile T* begin, size_t n, char value)

template <typename T>
void memory_set_range(volatile T* begin, volatile T* end, char value)

Low level functions that set a range to a value.

wipe_on_destruct

A template class that will wipe the derived objects storage to zero on destruction.
Designed to eliminate sensitive data lurking around in memory after an object has been destructed.

template <typename T>
struct wipe_on_destruct

T is the derived class whose storage must be wiped.

Example

struct UserData : public etl::wipe_on_destruct<UserData>
{
  char secret_passcode[16];
  char sensitive_user_name[16];
};

When an instance of UserData is destructed, the memory that it occupied will be set to zero.

uninitialized_buffer

template <size_t VObject_Size, size_t VN_Objects, size_t VAlignment>
class uninitialized_buffer

Creates an uninitialized memory buffer of VN_Objects each of VObject_Size with alignment VAlignment.

uninitialized_buffer_of

template <typename T, size_t VN_Objects>
class uninitialized_buffer_of

Creates an uninitialized memory buffer of VN_Objects each of type T.

mem_copy

From: 20.26.0

template <typename TPointer>
TPointer mem_copy(const TPointer sb, const TPointer se, TPointer db) ETL_NOEXCEPT

Template wrapper for memcpy.
Copies all of the bytes in the source range to the destination range.
Type must be trivially copyable.
sb Pointer to source begin.
se Pointer to source end.
db Pointer to destination begin.
Returns a pointer to the destination.


template <typename TPointer>
TPointer mem_copy(const TPointer sb, size_t n, TPointer db) ETL_NOEXCEPT

Template wrapper for memcpy.
Copies all of the bytes in the source range to the destination range.
Type must be trivially copyable.
sb Pointer to source begin.
n Source length.
db Pointer to destination begin.
Returns a pointer to the destination.

mem_move

From: 20.26.0

template <typename TPointer>
TPointer mem_move(const TPointer sb, const TPointer se, TPointer db) ETL_NOEXCEPT

Template wrapper for memmove.
Moves all of the bytes in the source range to the destination range.
Type must be trivially copyable.
sb Pointer to source begin.
se Pointer to source end.
db Pointer to destination begin.
Returns a pointer to the destination.


template <typename TPointer>
TPointer mem_move(const TPointer sb, size_t n, TPointer db) ETL_NOEXCEPT

Template wrapper for memmove.
Moves all of the bytes in the source range to the destination range.
Type must be trivially copyable.
sb Pointer to source begin.
n Source length.
db Pointer to destination begin.
Returns a pointer to the destination.

mem_compare

From: 20.26.0

template <typename TPointer>
TPointer mem_compare(const TPointer sb, const TPointer se, TPointer db) ETL_NOEXCEPT

Template wrapper for memcmp.
Searches all of the bytes in the range for value.
Type must be trivially copyable.
sb Pointer to source begin.
se Pointer to source end.
db Pointer to destination begin.
Returns <0, 0, >0. See documentation for memcmp.


template <typename TPointer>
TPointer mem_compare(const TPointer sb, size_t n, TPointer db) ETL_NOEXCEPT

Template wrapper for memcmp.
Type must be trivially copyable.
sb Pointer to source begin.
n Source length.
db Pointer to destination begin.
Returns <0, 0, >0. See documentation for memcmp.

mem_set

From: 20.26.0

template <typename TPointer, typename T>
TPointer mem_set(const TPointer db, const TPointer de, T value) ETL_NOEXCEPT

Template wrapper for memset.
Sets all of the bytes in the range to value.
Type must be trivially copyable.
db Pointer to destination begin.
de Pointer to destination end.
value The value to write to the memory. This value is cast to char.
Returns a pointer to the destination.


template <typename TPointer, typename T>
TPointer mem_set(const TPointer db, size_t n, T value) ETL_NOEXCEPT

Template wrapper for memset.
Sets all of the bytes in the range to value.
Type must be trivially copyable.
db Pointer to destination begin.
n Destination length.
value The value to write to the memory. This value is cast to char.
Returns a pointer to the destination.

mem_char

From: 20.26.0

template <typename TPointer, typename T>
TPointer mem_char(const TPointer sb, const TPointer se, T value) ETL_NOEXCEPT

Template wrapper for memchr.
Searches all of the bytes in the range for value.
Type must be trivially copyable.
db Pointer to source begin.
de Pointer to source begin.
value The value to search for. This value is cast to char.
Returns a pointer to the character or se if not found.


template <typename TPointer, typename T>
TPointer mem_char(const TPointer sb, size_t n, T value) ETL_NOEXCEPT

Template wrapper for memchr.
Searches all of the bytes in the range for value.
Type must be trivially copyable.
db Pointer to destination begin.
n Source length.
value The value to search for. This value is cast to char.
Returns a pointer to the character or sb + n if not found.