mirror of
https://github.com/micropython/micropython.git
synced 2026-01-07 12:40:15 +01:00
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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
mod0 ValueError incompatible .mpy file
|
||||
mod1 ValueError incompatible .mpy file
|
||||
mod2 ValueError incompatible .mpy file
|
||||
mod3 ValueError incompatible .mpy file
|
||||
|
||||
Reference in New Issue
Block a user