summaryrefslogtreecommitdiffstatshomepage
path: root/py/malloc.c
Commit message (Collapse)AuthorAge
* py: Add verbose debug compile-time flag MICROPY_DEBUG_VERBOSE.Stefan Naumann2017-08-15
| | | | It enables all the DEBUG_printf outputs in the py/ source code.
* all: Use the name MicroPython consistently in commentsAlexander Steffen2017-07-31
| | | | | There were several different spellings of MicroPython present in comments, when there should be only one.
* py/gc: Add MICROPY_GC_CONSERVATIVE_CLEAR option to always zero memory.Damien George2016-08-26
| | | | | | | | | There can be stray pointers in memory blocks that are not properly zero'd after allocation. This patch adds a new config option to always zero all allocated memory (via gc_alloc and gc_realloc) and hence help to eliminate stray pointers. See issue #2195.
* py/malloc: Provide a proper malloc-based implementation of realloc_ext.Damien George2016-02-23
|
* py: Improve allocation policy of qstr data.Damien George2015-07-14
| | | | | | | | | | | | | | | | | | | | Previous to this patch all interned strings lived in their own malloc'd chunk. On average this wastes N/2 bytes per interned string, where N is the number-of-bytes for a quanta of the memory allocator (16 bytes on 32 bit archs). With this patch interned strings are concatenated into the same malloc'd chunk when possible. Such chunks are enlarged inplace when possible, and shrunk to fit when a new chunk is needed. RAM savings with this patch are highly varied, but should always show an improvement (unless only 3 or 4 strings are interned). New version typically uses about 70% of previous memory for the qstr data, and can lead to savings of around 10% of total memory footprint of a running script. Costs about 120 bytes code size on Thumb2 archs (depends on how many calls to gc_realloc are made).
* py: Add MICROPY_MALLOC_USES_ALLOCATED_SIZE to allow simpler malloc API.Damien George2015-03-03
|
* py: Put all global state together in state structures.Damien George2015-01-07
| | | | | | This patch consolidates all global variables in py/ core into one place, in a global structure. Root pointers are all located together to make GC tracing easier and more efficient.
* py: Move to guarded includes, everywhere in py/ core.Damien George2015-01-01
| | | | Addresses issue #1022.
* py: Make gc.enable/disable just control auto-GC; alloc is still allowed.Damien George2014-10-31
| | | | | | gc.enable/disable are now the same as CPython: they just control whether automatic garbage collection is enabled or not. If disabled, you can still allocate heap memory, and initiate a manual collection.
* py: Clean up edge cases of malloc/realloc/free.Damien George2014-10-23
|
* py: For malloc and vstr functions, use size_t exclusively for int type.Damien George2014-09-25
| | | | | | It seems most sensible to use size_t for measuring "number of bytes" in malloc and vstr functions (since that's what size_t is for). We don't use mp_uint_t because malloc and vstr are not Micro Python specific.
* py: Include mpconfig.h before all other includes.Paul Sokolovsky2014-06-21
| | | | | | It defines types used by all other headers. Fixes #691.
* Add license header to (almost) all files.Damien George2014-05-03
| | | | | | | Blanket wide to all .c and .h files. Some files originating from ST are difficult to deal with (license wise) so it was left out of those. Also merged modpyb.h, modos.h, modstm.h and modtime.h in stmhal/.
* py, gc: Only zero out the extra bytes at the end of the heap chunk.Damien George2014-04-26
| | | | | This is a small optimisation to zero out only the additional bytes that the caller did not ask for.
* py, gc: Zero out newly allocated blocks in the GC.Damien George2014-04-25
| | | | | | | | | | | | | | | | | | | | | | | | Also add some more debugging output to gc_dump_alloc_table(). Now that newly allocated heap is always zero'd, maybe we just make this a policy for the uPy API to keep it simple (ie any new implementation of memory allocation must zero all allocations). This follows the D language philosophy. Before this patch, a previously used memory block which had pointers in it may still retain those pointers if the new user of that block does not actually use the entire block. Eg, if I want 5 blocks worth of heap, I actually get 8 (round up to nearest 4). Then I never use the last 3, so they keep their old values, which may be pointers pointing to the heap, hence preventing GC. In rare (or maybe not that rare) cases, this leads to long, unintentional "linked lists" within the GC'd heap, filling it up completely. It's pretty rare, because you have to reuse exactly that memory which is part of this "linked list", and reuse it in just the right way. This should fix issue #522, and might have something to do with issue #510.
* py: Check explicitly for memory allocation failure in parser.Damien George2014-04-10
| | | | | | Previously, a failed malloc/realloc would throw an exception, which was not caught. I think it's better to keep the parser free from NLR (exception throwing), hence this patch.
* py: Add emergency exception object for when heap allocation fails.Damien George2014-04-10
|
* Improve GC finalisation code; add option to disable it.Damien George2014-04-05
|
* Merge pull request #425 from iabdalkader/delDamien George2014-04-05
|\ | | | | Implement del
| * Implement delmux2014-04-03
| |
* | py: Add m_malloc_fail function to handle memory allocation error.Damien George2014-04-04
|/ | | | A malloc/realloc fail now throws MemoryError.
* py: Fix up so that it can compile without float.Damien George2014-04-02
|
* py: Clean up includes.xbe2014-03-17
| | | | Remove unnecessary includes. Add includes that improve portability.
* py: Remove name of var arg from macros with var args.Damien George2014-02-26
|
* Make DEBUG_printf() a proper function, implementation is port-dependent.Paul Sokolovsky2014-02-16
| | | | | In particular, unix outputs to stderr, to allow to run testsuite against micropython built with debug output (by redirecting stderr to /dev/null).
* Replace global "static" -> "STATIC", to allow "analysis builds". Part 2.Paul Sokolovsky2014-02-12
|
* Generalize malloc-via-gc-heap support, make it available to unix port.Paul Sokolovsky2014-02-11
|
* Get rid of calloc().Paul Sokolovsky2014-02-10
| | | | | If there's malloc and memset, then there's no need for calloc, especially if we need to implement it ourselves.
* realloc(): Log original memory ptr too.Paul Sokolovsky2014-01-30
| | | | To alloc complete memory alloc flow tracing.
* stm: Add optional memory debugging output.Damien George2014-01-29
|
* Rename default config file to mpconfig.h, and port's to mpconfigport.h.Paul Sokolovsky2014-01-03
| | | | mpconfig.h will automatically pull mpconfigport.h.
* Make it possible to turn off collecting memory stats (MICROPY_MEM_STATS).Paul Sokolovsky2014-01-03
|
* Add new alloc metric: peak_bytes_allocated.Paul Sokolovsky2014-01-03
| | | | This is just max value of current_bytes_allocated seen.
* Add new alloc metric: current_bytes_allocated.Paul Sokolovsky2014-01-03
| | | | Unlike total_bytes_allocated, this tracks m_free()'s too.
* m_realloc: Account only allocation size difference in total_bytes_allocated.Paul Sokolovsky2014-01-03
|
* Change memory allocation API to require size for free and realloc.Damien2013-12-29
|
* Fix func decls with no arguments: () -> (void).Damien2013-10-23
|
* Initial commit.Damien2013-10-04