16 #ifndef dealii_memory_consumption_h
17 #define dealii_memory_consumption_h
28 #include <type_traits>
92 inline std::enable_if_t<std::is_fundamental_v<T>, std::size_t>
101 template <
typename T>
102 inline std::enable_if_t<!(std::is_fundamental_v<T> || std::is_pointer_v<T>),
119 template <
typename T>
127 template <
typename T, std::
size_t w
idth>
165 template <
typename T>
189 template <
typename T, std::
size_t N>
201 template <
typename T,
int N>
219 template <
typename A,
typename B>
232 template <
typename T>
241 template <
typename T>
250 template <
typename T>
261 template <
typename T>
262 inline std::enable_if_t<std::is_fundamental_v<T>, std::size_t>
273 if (
string ==
nullptr)
279 return sizeof(char) * (strlen(
string) + 1);
285 template <
typename T>
289 return sizeof(std::complex<T>);
294 template <
typename T, std::
size_t w
idth>
306 return sizeof(s) + s.size();
311 template <
typename T>
316 if (std::is_fundamental_v<T> || std::is_pointer_v<T>)
318 return v.capacity() *
sizeof(
T) +
sizeof(v);
322 std::size_t mem =
sizeof(std::vector<T>);
323 for (
unsigned int i = 0; i < v.size(); ++i)
327 mem += (v.capacity() - v.size()) *
sizeof(
T);
334 template <
typename T, std::
size_t N>
339 if (std::is_fundamental_v<T> || std::is_pointer_v<T>)
346 for (std::size_t i = 0; i !=
N; ++i)
354 template <
typename T,
int N>
359 for (
unsigned int i = 0; i <
N; ++i)
369 return v.capacity() / 8 +
sizeof(v);
374 template <
typename A,
typename B>
383 template <
typename T>
392 template <
typename T>
396 return sizeof(std::shared_ptr<T>);
401 template <
typename T>
405 return sizeof(std::unique_ptr<T>);
410 template <
typename T>
411 inline std::enable_if_t<!(std::is_fundamental_v<T> || std::is_pointer_v<T>),
415 return t.memory_consumption();
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)