Skip to content

Commit 5aa740c

Browse files
committed
modgc: Add mem_free()/mem_alloc() methods.
Return free/allocated memory on GC heap.
1 parent e973acd commit 5aa740c

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

py/modgc.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,27 @@ STATIC mp_obj_t gc_enable(void) {
6161
}
6262
MP_DEFINE_CONST_FUN_OBJ_0(gc_enable_obj, gc_enable);
6363

64+
STATIC mp_obj_t gc_mem_free(void) {
65+
gc_info_t info;
66+
gc_info(&info);
67+
return MP_OBJ_NEW_SMALL_INT((machine_uint_t)info.free);
68+
}
69+
MP_DEFINE_CONST_FUN_OBJ_0(gc_mem_free_obj, gc_mem_free);
70+
71+
STATIC mp_obj_t gc_mem_alloc(void) {
72+
gc_info_t info;
73+
gc_info(&info);
74+
return MP_OBJ_NEW_SMALL_INT((machine_uint_t)info.used);
75+
}
76+
MP_DEFINE_CONST_FUN_OBJ_0(gc_mem_alloc_obj, gc_mem_alloc);
77+
6478
STATIC const mp_map_elem_t mp_module_gc_globals_table[] = {
6579
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_gc) },
6680
{ MP_OBJ_NEW_QSTR(MP_QSTR_collect), (mp_obj_t)&gc_collect_obj },
6781
{ MP_OBJ_NEW_QSTR(MP_QSTR_disable), (mp_obj_t)&gc_disable_obj },
6882
{ MP_OBJ_NEW_QSTR(MP_QSTR_enable), (mp_obj_t)&gc_enable_obj },
83+
{ MP_OBJ_NEW_QSTR(MP_QSTR_mem_free), (mp_obj_t)&gc_mem_free_obj },
84+
{ MP_OBJ_NEW_QSTR(MP_QSTR_mem_alloc), (mp_obj_t)&gc_mem_alloc_obj },
6985
};
7086

7187
STATIC const mp_obj_dict_t mp_module_gc_globals = {

py/qstrdefs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,8 @@ Q(gc)
377377
Q(collect)
378378
Q(disable)
379379
Q(enable)
380+
Q(mem_free)
381+
Q(mem_alloc)
380382
#endif
381383

382384
#if MICROPY_PY_BUILTINS_PROPERTY

0 commit comments

Comments
 (0)