From 5996eeb48fa6ce773003eacbc7e0b52ad5cc4d31 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 25 Feb 2019 23:15:51 +1100 Subject: py/persistentcode: Add a qstr window to save mpy files more efficiently. This is an implementation of a sliding qstr window used to reduce the number of qstrs stored in a .mpy file. The window size is configured to 32 entries which takes a fixed 64 bytes (16-bits each) on the C stack when loading/saving a .mpy file. It allows to remember the most recent 32 qstrs so they don't need to be stored again in the .mpy file. The qstr window uses a simple least-recently-used mechanism to discard the least recently used qstr when the window overflows (similar to dictionary compression). This scheme only needs a single pass to save/load the .mpy file. Reduces mpy file size by about 25% with a window size of 32. --- tests/import/mpy_invalid.py | 1 + 1 file changed, 1 insertion(+) (limited to 'tests/import/mpy_invalid.py') diff --git a/tests/import/mpy_invalid.py b/tests/import/mpy_invalid.py index 6a4e116e7..6e9cbc9db 100644 --- a/tests/import/mpy_invalid.py +++ b/tests/import/mpy_invalid.py @@ -48,6 +48,7 @@ user_files = { '/mod0.mpy': b'', # empty file '/mod1.mpy': b'M', # too short header '/mod2.mpy': b'M\x00\x00\x00', # bad version + '/mod3.mpy': b'M\x00\x00\x00\x7f', # qstr window too large } # create and mount a user filesystem -- cgit v1.2.3