Previously, we had -DCVC4_CONTEXT_MEMORY_MANAGER that needed to be added as a compile flag
to use the context memory manager (which we want by default). This makes compiling with
other build systems cumbersome because you have to know about the flag.
This commit replaces the -DCVC4_CONTEXT_MEMORY_MANAGER flag with a -DCVC4_DEBUG_CONTEXT_MEMORY_MANAGER
flag that does the opposite (in absence of the flag, we use the context memory manager).
Additionally, the commit fixes a memory leak in the debug context memory manager (the
destructor did not clean up the allocations).
])
fi
-AC_MSG_CHECKING([whether to use the context memory manager])
+AC_MSG_CHECKING([whether to use the debug context memory manager])
-AC_ARG_ENABLE([context-memory-manager],
- [AS_HELP_STRING([--disable-context-memory-manager],
- [do not use the context memory manager])])
+AC_ARG_ENABLE([debug-context-memory-manager],
+ [AS_HELP_STRING([--enable-debug-context-memory-manager],
+ [use the debug context memory manager])])
-if test -z "${enable_context_memory_manager+set}"; then
- enable_context_memory_manager=yes
+if test -z "${enable_debug_context_memory_manager+set}"; then
+ enable_debug_context_memory_manager=no
fi
-AC_MSG_RESULT([$enable_context_memory_manager])
+AC_MSG_RESULT([$enable_debug_context_memory_manager])
-if test "$enable_context_memory_manager" = yes; then
- CVC4CPPFLAGS="${CVC4CPPFLAGS:+$CVC4CPPFLAGS }-DCVC4_CONTEXT_MEMORY_MANAGER"
+if test "$enable_debug_context_memory_manager" = yes; then
+ CVC4CPPFLAGS="${CVC4CPPFLAGS:+$CVC4CPPFLAGS }-DCVC4_DEBUG_CONTEXT_MEMORY_MANAGER"
fi
AC_MSG_CHECKING([whether to include statistics are turned on in libcvc4])
namespace CVC4 {
namespace context {
-#ifdef CVC4_CONTEXT_MEMORY_MANAGER
+#ifndef CVC4_DEBUG_CONTEXT_MEMORY_MANAGER
void ContextMemoryManager::newChunk() {
}
}
-#endif /* CVC4_CONTEXT_MEMORY_MANAGER */
+#endif /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */
} /* CVC4::context namespace */
} /* CVC4 namespace */
namespace CVC4 {
namespace context {
-#ifdef CVC4_CONTEXT_MEMORY_MANAGER
+#ifndef CVC4_DEBUG_CONTEXT_MEMORY_MANAGER
/**
* Region-based memory manager for contexts. Calls to newData provide memory
};/* class ContextMemoryManager */
-#else /* CVC4_CONTEXT_MEMORY_MANAGER */
+#else /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */
+
+#warning \
+ "Using the debug version of ContextMemoryManager, expect performance degradation"
/**
* Dummy implementation of the ContextMemoryManager for debugging purposes. Use
- * the configure flag "--disable-context-memory-manager" to use this
+ * the configure flag "--enable-debug-context-memory-manager" to use this
* implementation.
*/
class ContextMemoryManager
}
ContextMemoryManager() { d_allocations.push_back(std::vector<char*>()); }
+ ~ContextMemoryManager()
+ {
+ for (const auto& levelAllocs : d_allocations)
+ {
+ for (auto alloc : levelAllocs)
+ {
+ free(alloc);
+ }
+ }
+ }
void* newData(size_t size)
{
std::vector<std::vector<char*>> d_allocations;
}; /* ContextMemoryManager */
-#endif /* CVC4_CONTEXT_MEMORY_MANAGER */
+#endif /* CVC4_DEBUG_CONTEXT_MEMORY_MANAGER */
/**
* An STL-like allocator class for allocating from context memory.