Class MemoryMonitor¶
- Defined in File gaussian_extractor.h 
Class Documentation¶
- 
class MemoryMonitor¶
- Thread-safe memory usage tracking and limiting system. - The MemoryMonitor class provides centralized memory usage tracking to prevent the application from exceeding system memory limits during intensive processing. It uses atomic operations for thread-safe tracking and provides both current and peak usage statistics. - Features¶- Thread-safe memory usage tracking 
- Configurable memory limits with safety margins 
- Peak usage tracking for performance analysis 
- Integration with system memory detection 
- Automatic memory limit calculation based on thread count 
 - Usage Pattern¶- Create MemoryMonitor with desired limit 
- Check can_allocate() before large allocations 
- Call add_usage() when allocating memory 
- Call remove_usage() when freeing memory 5. Monitor current and peak usage for optimization 
 - Note - All methods are thread-safe and can be called from multiple threads simultaneously without external synchronization - Public Functions - 
explicit MemoryMonitor(size_t max_memory_mb = DEFAULT_MEMORY_MB)¶
- Constructor with memory limit specification. - Creates a memory monitor with the specified limit. The limit should account for other system processes and leave sufficient free memory. - Parameters:
- max_memory_mb – Maximum memory usage limit in megabytes 
 
 - 
bool can_allocate(size_t bytes)¶
- Check if a memory allocation would exceed the limit. - Thread-safe check that should be called before large allocations to prevent memory exhaustion. - Parameters:
- bytes – Number of bytes to potentially allocate 
- Returns:
- true if allocation is safe, false if it would exceed limit 
 
 - 
void add_usage(size_t bytes)¶
- Record memory allocation in usage tracking. - Updates current usage atomically and tracks peak usage. Should be called immediately after successful allocation. - Parameters:
- bytes – Number of bytes allocated 
 
 - 
void remove_usage(size_t bytes)¶
- Record memory deallocation in usage tracking. - Updates current usage atomically. Should be called when memory is freed or objects are destroyed. - Parameters:
- bytes – Number of bytes freed 
 
 - 
size_t get_current_usage() const¶
- Get current memory usage. - Returns:
- Current memory usage in bytes 
 
 - 
size_t get_peak_usage() const¶
- Get peak memory usage since monitor creation. - Returns:
- Peak memory usage in bytes 
 
 - 
size_t get_max_usage() const¶
- Get configured memory limit. - Returns:
- Maximum allowed memory usage in bytes 
 
 - 
void set_memory_limit(size_t max_memory_mb)¶
- Update memory limit during runtime. - Allows dynamic adjustment of memory limits based on system conditions or user preferences. - Parameters:
- max_memory_mb – New memory limit in megabytes 
 
 - Public Static Functions - 
static size_t get_system_memory_mb()¶
- Detect system memory capacity. - Platform-specific detection of available system memory for automatic limit calculation. - Returns:
- Total system memory in megabytes 
 
 - 
static size_t calculate_optimal_memory_limit(unsigned int thread_count, size_t system_memory_mb = 0)¶
- Calculate optimal memory limit for given thread count. - Calculates a safe memory limit that accounts for: - System memory capacity 
- Number of processing threads 
- Memory overhead for other processes 
- Safety margins for system stability 
 - Parameters:
- thread_count – Number of threads that will be processing 
- system_memory_mb – Total system memory (0 = auto-detect) 
 
- Returns:
- Recommended memory limit in megabytes