From f540091c6ad3f817df7c86b1da83508b8be65e86 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 5 Aug 2021 21:21:38 -0400 Subject: [PATCH] COMP: Use mallinfo2 when available MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To address: [2026/8057] Building CXX object Modules/Core/Common/src/CMakeFiles/ITKCommon.dir/itkMemoryUsageObserver.cxx.o /home/matt/src/ITK/Modules/Core/Common/src/itkMemoryUsageObserver.cxx: In member function ‘virtual itk::MemoryUsageObserverBase::MemoryLoadType itk::MallinfoMemoryUsageObserver::GetMemoryUsage()’: /home/matt/src/ITK/Modules/Core/Common/src/itkMemoryUsageObserver.cxx:450:36: warning: ‘mallinfo mallinfo()’ is deprecated [-Wdeprecated-declarations] 450 | struct mallinfo minfo = mallinfo(); | ^ In file included from /home/matt/src/ITK/Modules/Core/Common/src/itkMemoryUsageObserver.cxx:37: /usr/include/malloc.h:118:24: note: declared here 118 | extern struct mallinfo mallinfo (void) __THROW __MALLOC_DEPRECATED; | ^~~~~~~~ --- .../Common/CMake/itkCheckHasMallinfo2.cxx | 16 ++++++++++++++ Modules/Core/Common/CMakeLists.txt | 5 +++++ .../Common/include/itkMemoryUsageObserver.h | 2 +- Modules/Core/Common/src/itkConfigure.h.in | 2 ++ .../Common/src/itkMemoryUsageObserver.cxx | 21 +++++++++++++++++-- 5 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 Modules/Core/Common/CMake/itkCheckHasMallinfo2.cxx diff --git a/Modules/Core/Common/CMake/itkCheckHasMallinfo2.cxx b/Modules/Core/Common/CMake/itkCheckHasMallinfo2.cxx new file mode 100644 index 00000000000..fad21fa6a04 --- /dev/null +++ b/Modules/Core/Common/CMake/itkCheckHasMallinfo2.cxx @@ -0,0 +1,16 @@ +#include + +int +main() +{ + /** Test whether mallinfo is available. This depends on the C library + * implementation. */ + + struct mallinfo2 minfo = mallinfo2(); + + if (minfo.uordblks > 0) + { + return 0; + } + return 1; +} diff --git a/Modules/Core/Common/CMakeLists.txt b/Modules/Core/Common/CMakeLists.txt index f125ca28a87..9496a4795b5 100644 --- a/Modules/Core/Common/CMakeLists.txt +++ b/Modules/Core/Common/CMakeLists.txt @@ -72,6 +72,11 @@ try_compile(ITK_HAS_MALLINFO ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasMallinfo.cxx ) +try_compile(ITK_HAS_MALLINFO2 + ${ITK_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasMallinfo2.cxx + ) + try_compile(ITK_HAS_FEENABLEEXCEPT ${ITK_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/CMake/itkCheckHasFeenableexcept.cxx diff --git a/Modules/Core/Common/include/itkMemoryUsageObserver.h b/Modules/Core/Common/include/itkMemoryUsageObserver.h index 3a2bef834bb..c37afc290b5 100644 --- a/Modules/Core/Common/include/itkMemoryUsageObserver.h +++ b/Modules/Core/Common/include/itkMemoryUsageObserver.h @@ -124,7 +124,7 @@ class ITKCommon_EXPORT SysResourceMemoryUsageObserver : public MemoryUsageObserv GetMemoryUsage() override; }; -# if defined(ITK_HAS_MALLINFO) +# if defined(ITK_HAS_MALLINFO) || defined(ITK_HAS_MALLINFO2) /** \class MallinfoMemoryUsageObserver * \brief The MallinfoMemoryUsageObserver * \ingroup ITKCommon diff --git a/Modules/Core/Common/src/itkConfigure.h.in b/Modules/Core/Common/src/itkConfigure.h.in index 04f73bf646b..2d6a109ff82 100644 --- a/Modules/Core/Common/src/itkConfigure.h.in +++ b/Modules/Core/Common/src/itkConfigure.h.in @@ -104,6 +104,8 @@ // defined if the C library as the mallinfo struct #cmakedefine ITK_HAS_MALLINFO +// defined if the C library as the mallinfo2 struct +#cmakedefine ITK_HAS_MALLINFO2 // defined if feenableexcept is available #cmakedefine ITK_HAS_FEENABLEEXCEPT diff --git a/Modules/Core/Common/src/itkMemoryUsageObserver.cxx b/Modules/Core/Common/src/itkMemoryUsageObserver.cxx index 94a87853daf..68a0c3466ec 100644 --- a/Modules/Core/Common/src/itkMemoryUsageObserver.cxx +++ b/Modules/Core/Common/src/itkMemoryUsageObserver.cxx @@ -33,7 +33,7 @@ #if !defined(WIN32) && !defined(_WIN32) # include // getrusage() -# if defined(ITK_HAS_MALLINFO) +# if defined(ITK_HAS_MALLINFO) || defined(ITK_HAS_MALLINFO2) # include // mallinfo() # endif // ITK_HAS_MALLINFO #endif // !defined(WIN32) && !defined(_WIN32) @@ -438,7 +438,24 @@ SysResourceMemoryUsageObserver::GetMemoryUsage() return 0; } -# if defined(ITK_HAS_MALLINFO) +# if defined(ITK_HAS_MALLINFO2) + +/** ---- Mallinfo Memory Usage Observer ---- */ + +MallinfoMemoryUsageObserver::~MallinfoMemoryUsageObserver() = default; + +MemoryUsageObserverBase::MemoryLoadType +MallinfoMemoryUsageObserver::GetMemoryUsage() +{ + struct mallinfo2 minfo = mallinfo2(); + + auto mem = static_cast(static_cast(minfo.uordblks) / 1024.0); + + return mem; +} + +// No mallinfo2, fallback to mallinfo +# elif defined(ITK_HAS_MALLINFO) /** ---- Mallinfo Memory Usage Observer ---- */