summaryrefslogtreecommitdiffstatshomepage
path: root/py/bc.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-10-25 15:07:02 +0100
committerDamien George <damien.p.george@gmail.com>2014-10-25 20:23:13 +0100
commit1084b0f9c21b093618da4494508dec9ca8467e35 (patch)
treee21a6e19240346b6a449b432cbf961d7839fba4b /py/bc.h
parentfcff4663dd5bd33eed931c7731fd133f49551b4b (diff)
downloadmicropython-1084b0f9c21b093618da4494508dec9ca8467e35.tar.gz
micropython-1084b0f9c21b093618da4494508dec9ca8467e35.zip
py: Store bytecode arg names in bytecode (were in own array).
This saves a lot of RAM for 2 reasons: 1. For functions that don't have default values, var args or var kw args (which is a large number of functions in the general case), the mp_obj_fun_bc_t type now fits in 1 GC block (previously needed 2 because of the extra pointer to point to the arg_names array). So this saves 16 bytes per function (32 bytes on 64-bit machines). 2. Combining separate memory regions generally saves RAM because the unused bytes at the end of the GC block are saved for 1 of the blocks (since that block doesn't exist on its own anymore). So generally this saves 8 bytes per function. Tested by importing lots of modules: - 64-bit Linux gave about an 8% RAM saving for 86k of used RAM. - pyboard gave about a 6% RAM saving for 31k of used RAM.
Diffstat (limited to 'py/bc.h')
-rw-r--r--py/bc.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/py/bc.h b/py/bc.h
index 6cda15b046..058eaba401 100644
--- a/py/bc.h
+++ b/py/bc.h
@@ -53,7 +53,7 @@ mp_uint_t mp_decode_uint(const byte **ptr);
mp_vm_return_kind_t mp_execute_bytecode(mp_code_state *code_state, volatile mp_obj_t inject_exc);
void mp_setup_code_state(mp_code_state *code_state, mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args);
-void mp_bytecode_print(const void *descr, const byte *code, mp_uint_t len);
+void mp_bytecode_print(const void *descr, mp_uint_t n_total_args, const byte *code, mp_uint_t len);
void mp_bytecode_print2(const byte *code, mp_uint_t len);
// Helper macros to access pointer with least significant bit holding a flag