unix: Enable MICROPY_GC_SPLIT_HEAP on coverage build.
With a new option to evenly split the GC heap over multiple areas. This adds code coverage for gc_add() and code associated with MICROPY_GC_SPLIT_HEAP.
This commit is contained in:
parent
4a48531803
commit
d2e4cf00cc
@ -477,8 +477,22 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
|||||||
pre_process_options(argc, argv);
|
pre_process_options(argc, argv);
|
||||||
|
|
||||||
#if MICROPY_ENABLE_GC
|
#if MICROPY_ENABLE_GC
|
||||||
|
#if !MICROPY_GC_SPLIT_HEAP
|
||||||
char *heap = malloc(heap_size);
|
char *heap = malloc(heap_size);
|
||||||
gc_init(heap, heap + heap_size);
|
gc_init(heap, heap + heap_size);
|
||||||
|
#else
|
||||||
|
assert(MICROPY_GC_SPLIT_HEAP_N_HEAPS > 0);
|
||||||
|
char *heaps[MICROPY_GC_SPLIT_HEAP_N_HEAPS];
|
||||||
|
long multi_heap_size = heap_size / MICROPY_GC_SPLIT_HEAP_N_HEAPS;
|
||||||
|
for (size_t i = 0; i < MICROPY_GC_SPLIT_HEAP_N_HEAPS; i++) {
|
||||||
|
heaps[i] = malloc(multi_heap_size);
|
||||||
|
if (i == 0) {
|
||||||
|
gc_init(heaps[i], heaps[i] + multi_heap_size);
|
||||||
|
} else {
|
||||||
|
gc_add(heaps[i], heaps[i] + multi_heap_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MICROPY_ENABLE_PYSTACK
|
#if MICROPY_ENABLE_PYSTACK
|
||||||
@ -729,7 +743,13 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
|||||||
#if MICROPY_ENABLE_GC && !defined(NDEBUG)
|
#if MICROPY_ENABLE_GC && !defined(NDEBUG)
|
||||||
// We don't really need to free memory since we are about to exit the
|
// We don't really need to free memory since we are about to exit the
|
||||||
// process, but doing so helps to find memory leaks.
|
// process, but doing so helps to find memory leaks.
|
||||||
|
#if !MICROPY_GC_SPLIT_HEAP
|
||||||
free(heap);
|
free(heap);
|
||||||
|
#else
|
||||||
|
for (size_t i = 0; i < MICROPY_GC_SPLIT_HEAP_N_HEAPS; i++) {
|
||||||
|
free(heaps[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// printf("total bytes = %d\n", m_get_total_bytes_allocated());
|
// printf("total bytes = %d\n", m_get_total_bytes_allocated());
|
||||||
|
@ -120,6 +120,10 @@
|
|||||||
#define MICROPY_EMIT_ARM (1)
|
#define MICROPY_EMIT_ARM (1)
|
||||||
#endif
|
#endif
|
||||||
#define MICROPY_ENABLE_GC (1)
|
#define MICROPY_ENABLE_GC (1)
|
||||||
|
// Number of heaps to assign if MICROPY_GC_SPLIT_HEAP=1
|
||||||
|
#ifndef MICROPY_GC_SPLIT_HEAP_N_HEAPS
|
||||||
|
#define MICROPY_GC_SPLIT_HEAP_N_HEAPS (1)
|
||||||
|
#endif
|
||||||
#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (1)
|
#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (1)
|
||||||
#define MICROPY_MEM_STATS (1)
|
#define MICROPY_MEM_STATS (1)
|
||||||
#define MICROPY_DEBUG_PRINTERS (1)
|
#define MICROPY_DEBUG_PRINTERS (1)
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
|
|
||||||
// Enable additional features.
|
// Enable additional features.
|
||||||
#define MICROPY_DEBUG_PARSE_RULE_NAME (1)
|
#define MICROPY_DEBUG_PARSE_RULE_NAME (1)
|
||||||
|
#define MICROPY_GC_SPLIT_HEAP (1)
|
||||||
|
#define MICROPY_GC_SPLIT_HEAP_N_HEAPS (4)
|
||||||
#define MICROPY_TRACKED_ALLOC (1)
|
#define MICROPY_TRACKED_ALLOC (1)
|
||||||
#define MICROPY_FLOAT_HIGH_QUALITY_HASH (1)
|
#define MICROPY_FLOAT_HIGH_QUALITY_HASH (1)
|
||||||
#define MICROPY_REPL_EMACS_WORDS_MOVE (1)
|
#define MICROPY_REPL_EMACS_WORDS_MOVE (1)
|
||||||
|
Loading…
Reference in New Issue
Block a user