127#include <type_traits>  
  128#include <unordered_map> 
  129#include <unordered_set> 
  244#ifdef UNIV_PFS_MEMORY 
  453#if defined(__GNUG__) && (__GNUG__ == 5) 
  463  return (index == b_len || (a[index] == b[index] &&
 
  473  return ((
file[index] == 
'\0' || 
file[index] == 
'.')
 
  502#define UT_NEW_THIS_FILE_PSI_KEY ut_new_get_key_by_file(MY_BASENAME) 
  513  for (
size_t i = 0; i < b_len; ++i) {
 
  525  for (
size_t i = 0;; ++i) {
 
  526    if (
file[i] == 
'\0' || 
file[i] == 
'.') {
 
  538  for (
size_t i = 0; i < 
n_auto; ++i) {
 
  540      return static_cast<int>(i);
 
  562#define UT_NEW_THIS_FILE_PSI_INDEX \ 
  563  (force_constexpr<ut_new_get_key_by_file(MY_BASENAME)>::value) 
  565#define UT_NEW_THIS_FILE_PSI_KEY                       \ 
  566  (UT_NEW_THIS_FILE_PSI_INDEX == -1                    \ 
  567       ? ut::make_psi_memory_key(PSI_NOT_INSTRUMENTED) \ 
  568       : ut::make_psi_memory_key(auto_event_keys[UT_NEW_THIS_FILE_PSI_INDEX])) 
  574#define UT_NEW_THIS_FILE_PSI_KEY ut::make_psi_memory_key(PSI_NOT_INSTRUMENTED) 
  580#ifdef HAVE_PSI_MEMORY_INTERFACE 
  600  return malloc_impl::alloc<false>(
size, 
key());
 
  636  return malloc_impl::alloc<true>(
size, 
key());
 
  677                             std::size_t 
size) 
noexcept {
 
  718inline void free(
void *ptr) 
noexcept {
 
  751template <
typename T, 
typename... Args>
 
  756    new (
mem) T(std::forward<Args>(args)...);
 
  761  return static_cast<T *
>(
mem);
 
  794template <
typename T, 
typename... Args>
 
  795inline T *
new_(Args &&...args) {
 
  797                            std::forward<Args>(args)...);
 
  874template <
typename T, 
typename... Args>
 
  878  auto mem = malloc_impl::alloc<false>(
sizeof(T) * 
sizeof...(args), 
key());
 
  884     detail::construct<T>(
mem, 
sizeof(T) * idx++, std::forward<Args>(args)));
 
  886    for (
size_t offset = (idx - 1) * 
sizeof(T); offset != 0;
 
  887         offset -= 
sizeof(T)) {
 
  888      reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(
mem) + offset -
 
  895  return static_cast<T *
>(
mem);
 
  959template <
typename T, 
typename... Args>
 
  962                                std::forward<Args>(args)...);
 
 1027template <
typename T>
 
 1031  auto mem = malloc_impl::alloc<false>(
sizeof(T) * 
count(), 
key());
 
 1036    for (; offset < 
sizeof(T) * 
count(); offset += 
sizeof(T)) {
 
 1037      new (
reinterpret_cast<uint8_t *
>(
mem) + offset) T{};
 
 1040    for (; offset != 0; offset -= 
sizeof(T)) {
 
 1041      reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(
mem) + offset -
 
 1048  return static_cast<T *
>(
mem);
 
 1094template <
typename T>
 
 1109template <
typename T>
 
 1114  const auto data_len = malloc_impl::datalen(ptr);
 
 1115  for (
size_t offset = 0; offset < data_len; offset += 
sizeof(T)) {
 
 1116    reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(ptr) + offset)->~T();
 
 1150                                 std::size_t 
size) 
noexcept {
 
 1153  return page_alloc_impl::alloc(
size, 
key());
 
 1199  return page_alloc_impl::datalen(ptr);
 
 1213  return page_alloc_impl::low_level_info(ptr);
 
 1249                                       std::size_t 
size) 
noexcept {
 
 1252  return large_page_alloc_impl::alloc(
size, 
key());
 
 1297  return large_page_alloc_impl::datalen(ptr);
 
 1311  return large_page_alloc_impl::low_level_info(ptr);
 
 1359  void *large_page_mem = 
nullptr;
 
 1360  if (large_pages_enabled) {
 
 1458  if (!ptr) 
return false;
 
 1464    ut_a(large_page_alloc_impl::page_type(ptr) ==
 
 1486                                   std::size_t alignment) 
noexcept {
 
 1489  return aligned_alloc_impl::alloc<false>(
size, alignment, 
key());
 
 1528                                    std::size_t alignment) 
noexcept {
 
 1531  return aligned_alloc_impl::alloc<true>(
size, alignment, 
key());
 
 1594template <
typename T, 
typename... Args>
 
 1600    new (
mem) T(std::forward<Args>(args)...);
 
 1605  return static_cast<T *
>(
mem);
 
 1635template <
typename T, 
typename... Args>
 
 1638                                alignment, std::forward<Args>(args)...);
 
 1650template <
typename T>
 
 1715template <
typename T, 
typename... Args>
 
 1724     detail::construct<T>(
mem, 
sizeof(T) * idx++, std::forward<Args>(args)));
 
 1726    for (
size_t offset = (idx - 1) * 
sizeof(T); offset != 0;
 
 1727         offset -= 
sizeof(T)) {
 
 1728      reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(
mem) + offset -
 
 1735  return static_cast<T *
>(
mem);
 
 1779template <
typename T>
 
 1787    for (; offset < 
sizeof(T) * 
count(); offset += 
sizeof(T)) {
 
 1788      new (
reinterpret_cast<uint8_t *
>(
mem) + offset) T{};
 
 1791    for (; offset != 0; offset -= 
sizeof(T)) {
 
 1792      reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(
mem) + offset -
 
 1799  return static_cast<T *
>(
mem);
 
 1838template <
typename T, 
typename... Args>
 
 1841                                    alignment, std::forward<Args>(args)...);
 
 1880template <
typename T>
 
 1895template <
typename T>
 
 1899  const auto data_len = aligned_alloc_impl::datalen(ptr);
 
 1900  for (
size_t offset = 0; offset < data_len; offset += 
sizeof(T)) {
 
 1901    reinterpret_cast<T *
>(
reinterpret_cast<std::uintptr_t
>(ptr) + offset)->~T();
 
 1923template <
typename T, 
size_t Alignment>
 
 1945  template <
typename... Args>
 
 1962  template <
typename... Args>
 
 1966        ut::aligned_new_withkey<T>(
key, 
Alignment, std::forward<Args>(args)...);
 
 1981  operator T *() 
const {
 
 2017template <
typename T, 
size_t Alignment>
 
 2057  template <
typename... Args>
 
 2060    ptr = ut::aligned_new_arr<T>(
Alignment, std::forward<Args>(args)...);
 
 2095  template <
typename... Args>
 
 2099                                         std::forward<Args>(args)...);
 
 2114  operator T *() 
const {
 
 2121template <
typename T>
 
 2125  template <
typename U>
 
 2131template <
typename T>
 
 2135  template <
typename U>
 
 2179template <
typename T, 
typename Allocator_base = std::conditional_t<
 
 2192  static_assert(
alignof(T) <= 
alignof(std::max_align_t),
 
 2193                "ut::allocator does not support over-aligned types. Use " 
 2194                "ut::aligned_* API to handle such types.");
 
 2218  template <
typename U>
 
 2220      : Allocator_base(other) {}
 
 2227  template <
typename U>
 
 2238    return !(*
this == other);
 
 2246    const size_type s_max = std::numeric_limits<size_type>::max();
 
 2265      throw std::bad_array_new_length();
 
 2268    auto ptr = Allocator_base::allocate_impl(n_elements * 
sizeof(T));
 
 2271      throw std::bad_alloc();
 
 2274    return static_cast<pointer>(ptr);
 
 2290template <
typename T>
 
 2295template <
typename T, std::
size_t N>
 
 2300template <
typename T, std::
size_t N>
 
 2303template <
typename T>
 
 2308template <
typename T>
 
 2313template <
typename T>
 
 2318template <
typename T>
 
 2340template <
typename T, 
typename Deleter = detail::Deleter<T>, 
typename... Args>
 
 2341std::enable_if_t<!std::is_array<T>::value, std::unique_ptr<T, Deleter>>
 
 2343  return std::unique_ptr<T, Deleter>(ut::new_<T>(std::forward<Args>(args)...));
 
 2359template <
typename T, 
typename Deleter = detail::Deleter<T>, 
typename... Args>
 
 2360std::enable_if_t<!std::is_array<T>::value, std::unique_ptr<T, Deleter>>
 
 2362  return std::unique_ptr<T, Deleter>(
 
 2363      ut::new_withkey<T>(
key, std::forward<Args>(args)...));
 
 2381template <
typename T,
 
 2382          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2383std::enable_if_t<detail::is_unbounded_array_v<T>, std::unique_ptr<T, Deleter>>
 
 2385  return std::unique_ptr<T, Deleter>(
 
 2401template <
typename T,
 
 2402          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2403std::enable_if_t<detail::is_unbounded_array_v<T>, std::unique_ptr<T, Deleter>>
 
 2405  return std::unique_ptr<T, Deleter>(
 
 2414template <
typename T, 
typename... Args>
 
 2415std::enable_if_t<detail::is_bounded_array_v<T>> 
make_unique(Args &&...) =
 
 2424template <
typename T, 
typename... Args>
 
 2437template <
typename T>
 
 2439    !std::is_array<T>::value, std::unique_ptr<T, detail::Deleter<T>>,
 
 2441        detail::is_unbounded_array_v<T>,
 
 2442        std::unique_ptr<T, detail::Array_deleter<std::remove_extent_t<T>>>,
 
 2461template <
typename T, 
typename Deleter = detail::Aligned_deleter<T>,
 
 2463std::enable_if_t<!std::is_array<T>::value, std::unique_ptr<T, Deleter>>
 
 2465  return std::unique_ptr<T, Deleter>(
 
 2466      ut::aligned_new<T>(alignment, std::forward<Args>(args)...));
 
 2484template <
typename T, 
typename Deleter = detail::Aligned_deleter<T>,
 
 2486std::enable_if_t<!std::is_array<T>::value, std::unique_ptr<T, Deleter>>
 
 2488  return std::unique_ptr<T, Deleter>(
 
 2489      ut::aligned_new_withkey<T>(
key, alignment, std::forward<Args>(args)...));
 
 2510template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2511                          std::remove_extent_t<T>>>
 
 2512std::enable_if_t<detail::is_unbounded_array_v<T>, std::unique_ptr<T, Deleter>>
 
 2514  return std::unique_ptr<T, Deleter>(
 
 2534template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2535                          std::remove_extent_t<T>>>
 
 2536std::enable_if_t<detail::is_unbounded_array_v<T>, std::unique_ptr<T, Deleter>>
 
 2538  return std::unique_ptr<T, Deleter>(
 
 2548template <
typename T, 
typename... Args>
 
 2550    Args &&...) = 
delete;
 
 2558template <
typename T, 
typename... Args>
 
 2571template <
typename T>
 
 2573    !std::is_array<T>::value, std::unique_ptr<T, detail::Aligned_deleter<T>>,
 
 2574    std::conditional_t<detail::is_unbounded_array_v<T>,
 
 2576                                              std::remove_extent_t<T>>>,
 
 2594template <
typename T, 
typename Deleter = detail::Deleter<T>, 
typename... Args>
 
 2595std::enable_if_t<!std::is_array<T>::value, std::shared_ptr<T>> 
make_shared(
 
 2597  return std::shared_ptr<T>(ut::new_<T>(std::forward<Args>(args)...),
 
 2614template <
typename T, 
typename Deleter = detail::Deleter<T>, 
typename... Args>
 
 2615std::enable_if_t<!std::is_array<T>::value, std::shared_ptr<T>> 
make_shared(
 
 2617  return std::shared_ptr<T>(
 
 2618      ut::new_withkey<T>(
key, std::forward<Args>(args)...), 
Deleter{});
 
 2637template <
typename T,
 
 2638          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2639std::enable_if_t<detail::is_unbounded_array_v<T>, std::shared_ptr<T>>
 
 2641  return std::shared_ptr<T>(
 
 2660template <
typename T,
 
 2661          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2662std::enable_if_t<detail::is_unbounded_array_v<T>, std::shared_ptr<T>>
 
 2664  return std::shared_ptr<T>(
 
 2684template <
typename T,
 
 2685          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2686std::enable_if_t<detail::is_bounded_array_v<T>, std::shared_ptr<T>>
 
 2688  return std::shared_ptr<T>(
ut::new_arr<std::remove_extent_t<T>>(
 
 2689                                ut::Count{detail::bounded_array_size_v<T>}),
 
 2706template <
typename T,
 
 2707          typename Deleter = detail::Array_deleter<std::remove_extent_t<T>>>
 
 2708std::enable_if_t<detail::is_bounded_array_v<T>, std::shared_ptr<T>> 
make_shared(
 
 2710  return std::shared_ptr<T>(
 
 2732template <
typename T, 
typename Deleter = detail::Aligned_deleter<T>,
 
 2734std::enable_if_t<!std::is_array<T>::value, std::shared_ptr<T>>
 
 2736  return std::shared_ptr<T>(
 
 2737      ut::aligned_new<T>(alignment, std::forward<Args>(args)...), 
Deleter{});
 
 2755template <
typename T, 
typename Deleter = detail::Aligned_deleter<T>,
 
 2757std::enable_if_t<!std::is_array<T>::value, std::shared_ptr<T>>
 
 2759  return std::shared_ptr<T>(
 
 2760      ut::aligned_new_withkey<T>(
key, alignment, std::forward<Args>(args)...),
 
 2782template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2783                          std::remove_extent_t<T>>>
 
 2784std::enable_if_t<detail::is_unbounded_array_v<T>, std::shared_ptr<T>>
 
 2786  return std::shared_ptr<T>(
 
 2807template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2808                          std::remove_extent_t<T>>>
 
 2809std::enable_if_t<detail::is_unbounded_array_v<T>, std::shared_ptr<T>>
 
 2811  return std::shared_ptr<T>(
 
 2834template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2835                          std::remove_extent_t<T>>>
 
 2836std::enable_if_t<detail::is_bounded_array_v<T>, std::shared_ptr<T>>
 
 2838  return std::shared_ptr<T>(
 
 2840          alignment, 
ut::Count{detail::bounded_array_size_v<T>}),
 
 2859template <
typename T, 
typename Deleter = detail::Aligned_array_deleter<
 
 2860                          std::remove_extent_t<T>>>
 
 2861std::enable_if_t<detail::is_bounded_array_v<T>, std::shared_ptr<T>>
 
 2863  return std::shared_ptr<T>(
 
 2865          key, alignment, 
ut::Count{detail::bounded_array_size_v<T>}),
 
 2878template <
typename T>
 
 2879using vector = std::vector<T, ut::allocator<T>>;
 
 2882template <
typename T>
 
 2883using list = std::list<T, ut::allocator<T>>;
 
 2886template <
typename Key, 
typename Compare = std::less<Key>>
 
 2887using set = std::set<Key, Compare, ut::allocator<Key>>;
 
 2889template <
typename Key>
 
 2891    std::unordered_set<Key, std::hash<Key>, std::equal_to<Key>,
 
 2895template <
typename Key, 
typename Value, 
typename Compare = std::less<Key>>
 
 2897    std::map<Key, Value, Compare, ut::allocator<std::pair<const Key, Value>>>;
 
 2899template <
typename Key, 
typename Value, 
typename Hash = std::hash<Key>,
 
 2900          typename Key_equal = std::equal_to<Key>>
 
Definition: tls_cipher.cc:37
 
Lightweight convenience wrapper which manages a dynamically allocated array of over-aligned types.
Definition: ut0new.h:2018
 
void dealloc()
Invokes destructors of instances of type T, if applicable.
Definition: ut0new.h:2106
 
void alloc(Count count)
Allocates sufficiently large memory of dynamic storage duration to fit the array of size number of el...
Definition: ut0new.h:2040
 
void alloc(Args &&...args)
Allocates sufficiently large memory of dynamic storage duration to fit the array of size number of el...
Definition: ut0new.h:2058
 
void alloc_withkey(PSI_memory_key_t key, Args &&...args)
Allocates sufficiently large memory of dynamic storage duration to fit the array of size number of el...
Definition: ut0new.h:2096
 
T * ptr
Definition: ut0new.h:2019
 
void alloc_withkey(PSI_memory_key_t key, Count count)
Allocates sufficiently large memory of dynamic storage duration to fit the array of size number of el...
Definition: ut0new.h:2076
 
~aligned_array_pointer()
Destructor.
Definition: ut0new.h:2026
 
Lightweight convenience wrapper which manages dynamically allocated over-aligned type.
Definition: ut0new.h:1924
 
void alloc_withkey(PSI_memory_key_t key, Args &&...args)
Allocates sufficiently large memory of dynamic storage duration to fit the instance of type T at the ...
Definition: ut0new.h:1963
 
void alloc(Args &&...args)
Allocates sufficiently large memory of dynamic storage duration to fit the instance of type T at the ...
Definition: ut0new.h:1946
 
~aligned_pointer()
Destructor.
Definition: ut0new.h:1932
 
T * ptr
Definition: ut0new.h:1925
 
void dealloc()
Invokes the destructor of instance of type T, if applicable.
Definition: ut0new.h:1972
 
Allocator that allows std::* containers to manage their memory through ut::malloc* and ut::free libra...
Definition: ut0new.h:2182
 
T & reference
Definition: ut0new.h:2186
 
void deallocate(pointer ptr, size_type n_elements=0)
Releases the memory allocated through ut::allocator<T>::allocate().
Definition: ut0new.h:2282
 
const T * const_pointer
Definition: ut0new.h:2185
 
ptrdiff_t difference_type
Definition: ut0new.h:2190
 
allocator< T, Allocator_base > & operator=(const allocator< T, Allocator_base > &)=default
 
allocator< T, Allocator_base > & operator=(allocator< T, Allocator_base > &&)=default
 
T value_type
Definition: ut0new.h:2188
 
allocator(const allocator< U, Allocator_base > &other)
Copy-construct a new instance of allocator with type T by using existing instance of allocator constr...
Definition: ut0new.h:2219
 
pointer allocate(size_type n_elements, const_pointer hint=nullptr)
Allocates chunk of memory that can hold n_elements objects of type T.
Definition: ut0new.h:2262
 
allocator(PSI_memory_key key)
Explicit constructor.
Definition: ut0new.h:2203
 
size_type max_size() const
Return the maximum number of objects that can be allocated by this allocator.
Definition: ut0new.h:2245
 
const T & const_reference
Definition: ut0new.h:2187
 
allocator(allocator< T, Allocator_base > &&)=default
 
allocator()
Default constructor, use mem_key_std.
Definition: ut0new.h:2198
 
bool operator!=(const ut::allocator< T, Allocator_base > &other) const
Non-equality of allocators instantiated with same types T.
Definition: ut0new.h:2237
 
allocator(const allocator< T, Allocator_base > &)=default
 
size_t size_type
Definition: ut0new.h:2189
 
bool operator==(const ut::allocator< T, Allocator_base > &) const
Equality of allocators instantiated with same types T.
Definition: ut0new.h:2233
 
T * pointer
Definition: ut0new.h:2184
 
Implementation bits and pieces of include/ut0new.h.
 
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:49
 
#define realloc(P, A)
Definition: lexyy.cc:916
 
#define free(A)
Definition: lexyy.cc:915
 
A macro that gives FILE without the directory name (e.g.
 
constexpr bool unlikely(bool expr)
Definition: my_compiler.h:58
 
static int count
Definition: myisam_ftdump.cc:45
 
Instrumentation helpers for memory allocation.
 
std::atomic< Type > N
Definition: ut0counter.h:225
 
std::unordered_map< Key, CHARSET_INFO * > Hash
Definition: collations_internal.cc:548
 
Definition: fts0fts.cc:238
 
std::string_view Key
The key type for the hash structure in HashJoinRowBuffer.
Definition: hash_join_buffer.h:102
 
Definition: http_server_component.cc:34
 
size_t size(const char *const c)
Definition: base64.h:46
 
Alignment
Enum class describing alignment-requirements.
Definition: lock_free_type.h:39
 
constexpr bool is_unbounded_array_v< T[]>
Definition: ut0new.h:2291
 
typename select_alloc_impl< Pfs_memory_instrumentation_on >::type select_alloc_impl_t
Just a small helper type which saves us some keystrokes.
Definition: aligned_alloc.h:691
 
constexpr size_t bounded_array_size_v< T[N]>
Definition: ut0new.h:2301
 
constexpr bool is_bounded_array_v
Definition: ut0new.h:2294
 
constexpr bool is_unbounded_array_v
Definition: ut0new.h:2289
 
typename select_large_page_alloc_impl< Pfs_memory_instrumentation_on >::type select_large_page_alloc_impl_t
Just a small helper type which saves us some keystrokes.
Definition: large_page_alloc.h:367
 
typename select_page_alloc_impl< Pfs_memory_instrumentation_on >::type select_page_alloc_impl_t
Just a small helper type which saves us some keystrokes.
Definition: page_alloc.h:428
 
typename select_malloc_impl< Pfs_memory_instrumentation_on, Array_specialization >::type select_malloc_impl_t
Just a small helper type which saves us some keystrokes.
Definition: alloc.h:429
 
constexpr size_t bounded_array_size_v
Definition: ut0new.h:2299
 
constexpr bool is_bounded_array_v< T[N]>
Definition: ut0new.h:2296
 
This file contains a set of libraries providing overloads for regular dynamic allocation routines whi...
Definition: aligned_alloc.h:48
 
void * aligned_zalloc_withkey(PSI_memory_key_t key, std::size_t size, std::size_t alignment) noexcept
Dynamically allocates zero-initialized storage of given size and at the address aligned to the reques...
Definition: ut0new.h:1527
 
std::unordered_map< Key, Value, Hash, Key_equal, ut::allocator< std::pair< const Key, Value > > > unordered_map
Definition: ut0new.h:2903
 
size_t pfs_overhead() noexcept
Returns number of bytes that ut::malloc_*, ut::zalloc_*, ut::realloc_* and ut::new_* variants will be...
Definition: ut0new.h:1126
 
T * aligned_new_withkey(PSI_memory_key_t key, std::size_t alignment, Args &&...args)
Dynamically allocates storage for an object of type T at address aligned to the requested alignment.
Definition: ut0new.h:1595
 
void * zalloc_withkey(PSI_memory_key_t key, std::size_t size) noexcept
Dynamically allocates zero-initialized storage of given size.
Definition: ut0new.h:633
 
void * malloc_withkey(PSI_memory_key_t key, std::size_t size) noexcept
Dynamically allocates storage of given size.
Definition: ut0new.h:597
 
void * aligned_zalloc(std::size_t size, std::size_t alignment) noexcept
Dynamically allocates zero-initialized storage of given size and at the address aligned to the reques...
Definition: ut0new.h:1550
 
void * malloc_large_page(std::size_t size) noexcept
Dynamically allocates memory backed up by large (huge) pages.
Definition: ut0new.h:1272
 
std::unordered_set< Key, std::hash< Key >, std::equal_to< Key >, ut::allocator< Key > > unordered_set
Definition: ut0new.h:2892
 
std::basic_ostringstream< char, std::char_traits< char >, ut::allocator< char > > ostringstream
Specialization of basic_ostringstream which uses ut::allocator.
Definition: ut0new.h:2875
 
allocation_low_level_info page_low_level_info(void *ptr) noexcept
Retrieves the pointer and size of the allocation provided by the OS.
Definition: ut0new.h:1210
 
std::vector< T, ut::allocator< T > > vector
Specialization of vector which uses allocator.
Definition: ut0new.h:2879
 
void aligned_delete_arr(T *ptr) noexcept
Releases storage which has been dynamically allocated through any of the aligned_new_arr_*() variants...
Definition: ut0new.h:1896
 
std::enable_if_t<!std::is_array< T >::value, std::unique_ptr< T, Deleter > > make_unique(Args &&...args)
Dynamically allocates storage for an object of type T.
Definition: ut0new.h:2342
 
void delete_(T *ptr) noexcept
Releases storage which has been dynamically allocated through any of the ut::new*() variants.
Definition: ut0new.h:810
 
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2887
 
void * malloc_page(std::size_t size) noexcept
Dynamically allocates system page-aligned storage of given size.
Definition: ut0new.h:1176
 
void * realloc_withkey(PSI_memory_key_t key, void *ptr, std::size_t size) noexcept
Upsizes or downsizes already dynamically allocated storage to the new size.
Definition: ut0new.h:676
 
void delete_arr(T *ptr) noexcept
Releases storage which has been dynamically allocated through any of the ut::new_arr*() variants.
Definition: ut0new.h:1110
 
std::enable_if_t<!std::is_array< T >::value, std::unique_ptr< T, Deleter > > make_unique_aligned(size_t alignment, Args &&...args)
Dynamically allocates storage for an object of type T at address aligned to the requested alignment.
Definition: ut0new.h:2464
 
T * aligned_new_arr_withkey(PSI_memory_key_t key, std::size_t alignment, Args &&...args)
Dynamically allocates storage for an array of T's at address aligned to the requested alignment.
Definition: ut0new.h:1716
 
allocation_low_level_info large_page_low_level_info(void *ptr) noexcept
Retrieves the pointer and size of the allocation provided by the OS.
Definition: ut0new.h:1308
 
bool free_page(void *ptr) noexcept
Releases storage which has been dynamically allocated through any of the ut::malloc_page*() variants.
Definition: ut0new.h:1226
 
void * malloc_large_page_withkey(PSI_memory_key_t key, std::size_t size) noexcept
Dynamically allocates memory backed up by large (huge) pages.
Definition: ut0new.h:1248
 
size_t large_page_allocation_size(void *ptr) noexcept
Retrieves the total amount of bytes that are available for application code to use.
Definition: ut0new.h:1294
 
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2897
 
std::enable_if_t<!std::is_array< T >::value, std::shared_ptr< T > > make_shared_aligned(size_t alignment, Args &&...args)
Dynamically allocates storage for an object of type T at address aligned to the requested alignment.
Definition: ut0new.h:2735
 
void * malloc(std::size_t size) noexcept
Dynamically allocates storage of given size.
Definition: ut0new.h:618
 
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr
The following is a common type that is returned by all the ut::make_unique (non-aligned) specializati...
Definition: ut0new.h:2443
 
T * aligned_new_arr(std::size_t alignment, Args &&...args)
Dynamically allocates storage for an array of T's at address aligned to the requested alignment.
Definition: ut0new.h:1839
 
T * new_(Args &&...args)
Dynamically allocates storage for an object of type T.
Definition: ut0new.h:795
 
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2883
 
void free(void *ptr) noexcept
Releases storage which has been dynamically allocated through any of the ut::malloc*(),...
Definition: ut0new.h:718
 
PSI_memory_key_t make_psi_memory_key(PSI_memory_key key)
Convenience helper function to create type-safe representation of PSI_memory_key.
Definition: ut0new.h:190
 
void * aligned_alloc_withkey(PSI_memory_key_t key, std::size_t size, std::size_t alignment) noexcept
Dynamically allocates storage of given size and at the address aligned to the requested alignment.
Definition: ut0new.h:1485
 
constexpr bool WITH_PFS_MEMORY
Definition: ut0new.h:581
 
void aligned_delete(T *ptr) noexcept
Releases storage which has been dynamically allocated through any of the aligned_new_*() variants.
Definition: ut0new.h:1651
 
void * malloc_page_withkey(PSI_memory_key_t key, std::size_t size) noexcept
Dynamically allocates system page-aligned storage of given size.
Definition: ut0new.h:1149
 
std::conditional_t< !std::is_array< T >::value, std::unique_ptr< T, detail::Aligned_deleter< T > >, std::conditional_t< detail::is_unbounded_array_v< T >, std::unique_ptr< T, detail::Aligned_array_deleter< std::remove_extent_t< T > > >, void > > unique_ptr_aligned
The following is a common type that is returned by all the ut::make_unique_aligned (non-aligned) spec...
Definition: ut0new.h:2577
 
void * realloc(void *ptr, std::size_t size) noexcept
Upsizes or downsizes already dynamically allocated storage to the new size.
Definition: ut0new.h:704
 
T * new_arr_withkey(PSI_memory_key_t key, Args &&...args)
Dynamically allocates storage for an array of T's.
Definition: ut0new.h:875
 
T * new_withkey(PSI_memory_key_t key, Args &&...args)
Dynamically allocates storage for an object of type T.
Definition: ut0new.h:752
 
size_t page_allocation_size(void *ptr) noexcept
Retrieves the total amount of bytes that are available for application code to use.
Definition: ut0new.h:1196
 
bool free_large_page(void *ptr) noexcept
Releases storage which has been dynamically allocated through any of the ut::malloc_large_page*() var...
Definition: ut0new.h:1325
 
std::enable_if_t<!std::is_array< T >::value, std::shared_ptr< T > > make_shared(Args &&...args)
Dynamically allocates storage for an object of type T.
Definition: ut0new.h:2595
 
void aligned_free(void *ptr) noexcept
Releases storage which has been dynamically allocated through any of the aligned_alloc_*() or aligned...
Definition: ut0new.h:1564
 
void * aligned_alloc(std::size_t size, std::size_t alignment) noexcept
Dynamically allocates storage of given size and at the address aligned to the requested alignment.
Definition: ut0new.h:1508
 
T * new_arr(Args &&...args)
Dynamically allocates storage for an array of T's.
Definition: ut0new.h:960
 
T * aligned_new(std::size_t alignment, Args &&...args)
Dynamically allocates storage for an object of type T at address aligned to the requested alignment.
Definition: ut0new.h:1636
 
void * zalloc(std::size_t size) noexcept
Dynamically allocates zero-initialized storage of given size.
Definition: ut0new.h:654
 
The interface to the operating system process control primitives.
 
bool os_use_large_pages
Whether to use large pages in the buffer pool.
Definition: os0proc.cc:51
 
The interface to the operating system process and thread control primitives.
 
Performance schema instrumentation interface.
 
Performance schema instrumentation interface.
 
required string key
Definition: replication_asynchronous_connection_failover.proto:60
 
static MEM_ROOT mem
Definition: sql_servers.cc:100
 
Memory instrument information.
Definition: psi_memory_bits.h:58
 
static constexpr int value
Definition: ut0new.h:559
 
Light-weight and type-safe wrapper which serves a purpose of being able to select proper ut::new_arr*...
Definition: ut0new.h:982
 
Count(size_t count)
Definition: ut0new.h:983
 
size_t m_count
Definition: ut0new.h:985
 
size_t operator()() const
Definition: ut0new.h:984
 
Light-weight and type-safe wrapper around the PSI_memory_key that eliminates the possibility of intro...
Definition: ut0new.h:178
 
PSI_memory_key operator()() const
Definition: ut0new.h:180
 
PSI_memory_key m_key
Definition: ut0new.h:181
 
PSI_memory_key_t(PSI_memory_key key)
Definition: ut0new.h:179
 
Can be used to extract pointer and size of the allocation provided by the OS.
Definition: ut0new.h:140
 
void * base_ptr
A pointer returned by the OS allocator.
Definition: ut0new.h:142
 
size_t allocation_size
The size of allocation that OS performed.
Definition: ut0new.h:144
 
Definition: ut0new.h:2228
 
Small wrapper which utilizes SFINAE to dispatch the call to appropriate aligned allocator implementat...
Definition: aligned_alloc.h:697
 
Definition: ut0new.h:2319
 
void operator()(T *ptr)
Definition: ut0new.h:2320
 
Definition: ut0new.h:2314
 
void operator()(T *ptr)
Definition: ut0new.h:2315
 
Small wrapper which utilizes SFINAE to dispatch the call to appropriate allocator implementation.
Definition: alloc.h:435
 
Definition: ut0new.h:2309
 
void operator()(T *ptr)
Definition: ut0new.h:2310
 
Definition: ut0new.h:2304
 
void operator()(T *ptr)
Definition: ut0new.h:2305
 
Small wrapper which utilizes SFINAE to dispatch the call to appropriate aligned allocator implementat...
Definition: large_page_alloc.h:373
 
Small wrapper which utilizes SFINAE to dispatch the call to appropriate aligned allocator implementat...
Definition: page_alloc.h:434
 
Definition: ut0new.h:2132
 
void * allocate_impl(size_t n_bytes)
Definition: ut0new.h:2141
 
const PSI_memory_key m_key
Definition: ut0new.h:2146
 
PSI_memory_key get_mem_key() const
Definition: ut0new.h:2139
 
allocator_base_pfs(PSI_memory_key key)
Definition: ut0new.h:2133
 
allocator_base_pfs(const allocator_base_pfs< U > &other)
Definition: ut0new.h:2136
 
Definition: ut0new.h:2122
 
allocator_base(const allocator_base< U > &)
Definition: ut0new.h:2126
 
void * allocate_impl(size_t n_bytes)
Definition: ut0new.h:2128
 
allocator_base(PSI_memory_key)
Definition: ut0new.h:2123
 
Definition: ut0new.h:1332
 
Version control for database, common definitions, and include files.
 
#define UT_ARR_SIZE(a)
Definition: univ.i:524
 
Utilities for byte operations.
 
Utilities related to CPU cache.
 
Debug utilities for Innobase.
 
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:105
 
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:93
 
PSI_memory_key mem_key_ddl
Definition: ut0new.cc:61
 
void ut_new_boot_safe()
Setup the internal objects needed for ut::*_withkey() to operate.
Definition: ut0new.cc:139
 
PSI_memory_key mem_key_redo_log_archive_queue_element
 
PSI_memory_key mem_key_dict_stats_index_map_t
Definition: ut0new.cc:54
 
PSI_memory_key mem_key_buf_stat_per_index_t
Definition: ut0new.cc:50
 
PSI_memory_key mem_key_other
Definition: ut0new.cc:58
 
PSI_memory_info pfs_info_auto[n_auto]
 
PSI_memory_key auto_event_keys[n_auto]
 
constexpr int ut_new_get_key_by_base_file(const char *file, size_t len)
Retrieve a memory key (registered with PFS), given the file name of the caller.
Definition: ut0new.h:537
 
PSI_memory_key mem_key_fil_space_t
Definition: ut0new.cc:56
 
constexpr bool ut_string_begins_with(const char *a, const char *b, size_t b_len)
gcc 5 fails to evaluate costexprs at compile time.
Definition: ut0new.h:511
 
PSI_memory_key mem_key_lock_sys
Definition: ut0new.cc:57
 
constexpr int ut_new_get_key_by_file(const char *file)
Retrieve a memory key (registered with PFS), given the file name of the caller.
Definition: ut0new.h:550
 
PSI_memory_key mem_key_ahi
Keys for registering allocations with performance schema.
Definition: ut0new.cc:47
 
void ut_new_boot()
Setup the internal objects needed for ut::*_withkey() to operate.
Definition: ut0new.cc:120
 
PSI_memory_key mem_key_partitioning
Definition: ut0new.cc:59
 
PSI_memory_key mem_key_archive
Definition: ut0new.cc:48
 
static constexpr const char * auto_event_names[]
List of filenames that allocate memory and are instrumented via PFS.
Definition: ut0new.h:247
 
PSI_memory_key mem_key_std
Definition: ut0new.cc:62
 
const size_t alloc_max_retries
Maximum number of retries to allocate memory.
Definition: ut0new.cc:43
 
PSI_memory_key mem_key_row_log_buf
Definition: ut0new.cc:60
 
PSI_memory_key mem_key_trx_sys_t_rw_trx_ids
Definition: ut0new.cc:63
 
static constexpr size_t n_auto
Definition: ut0new.h:448
 
PSI_memory_key mem_key_buf_buf_pool
Definition: ut0new.cc:49
 
constexpr size_t ut_len_without_extension(const char *file)
Find the length of the filename without its file extension.
Definition: ut0new.h:524
 
PSI_memory_key mem_key_undo_spaces
Definition: ut0new.cc:64
 
PSI_memory_key mem_key_ut_lock_free_hash_t
Definition: ut0new.cc:65
 
PSI_memory_key mem_key_clone
Memory key for clone.
Definition: ut0new.cc:52
 
PSI_memory_key mem_key_dict_stats_n_diff_on_level
Definition: ut0new.cc:55
 
PSI_memory_key mem_key_dict_stats_bg_recalc_pool_t
Definition: ut0new.cc:53
 
#define PSI_NOT_INSTRUMENTED
Definition: validate_password_imp.cc:42