Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
d891452a
Commit
d891452a
authored
Feb 27, 2015
by
Damien George
Browse files
py: Add MICROPY_MALLOC_USES_ALLOCATED_SIZE to allow simpler malloc API.
parent
e104acdb
Changes
6
Hide whitespace changes
Inline
Side-by-side
py/malloc.c
View file @
d891452a
...
...
@@ -109,7 +109,11 @@ void *m_malloc0(size_t num_bytes) {
return
ptr
;
}
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
void
*
m_realloc
(
void
*
ptr
,
size_t
old_num_bytes
,
size_t
new_num_bytes
)
{
#else
void
*
m_realloc
(
void
*
ptr
,
size_t
new_num_bytes
)
{
#endif
void
*
new_ptr
=
realloc
(
ptr
,
new_num_bytes
);
if
(
new_ptr
==
NULL
&&
new_num_bytes
!=
0
)
{
return
m_malloc_fail
(
new_num_bytes
);
...
...
@@ -129,7 +133,11 @@ void *m_realloc(void *ptr, size_t old_num_bytes, size_t new_num_bytes) {
return
new_ptr
;
}
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
void
*
m_realloc_maybe
(
void
*
ptr
,
size_t
old_num_bytes
,
size_t
new_num_bytes
)
{
#else
void
*
m_realloc_maybe
(
void
*
ptr
,
size_t
new_num_bytes
)
{
#endif
void
*
new_ptr
=
realloc
(
ptr
,
new_num_bytes
);
#if MICROPY_MEM_STATS
// At first thought, "Total bytes allocated" should only grow,
...
...
@@ -149,7 +157,11 @@ void *m_realloc_maybe(void *ptr, size_t old_num_bytes, size_t new_num_bytes) {
return
new_ptr
;
}
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
void
m_free
(
void
*
ptr
,
size_t
num_bytes
)
{
#else
void
m_free
(
void
*
ptr
)
{
#endif
free
(
ptr
);
#if MICROPY_MEM_STATS
MP_STATE_MEM
(
current_bytes_allocated
)
-=
num_bytes
;
...
...
py/misc.h
View file @
d891452a
...
...
@@ -61,19 +61,32 @@ typedef unsigned int uint;
#else
#define m_new_obj_with_finaliser(type) m_new_obj(type)
#endif
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
#define m_renew(type, ptr, old_num, new_num) ((type*)(m_realloc((ptr), sizeof(type) * (old_num), sizeof(type) * (new_num))))
#define m_renew_maybe(type, ptr, old_num, new_num) ((type*)(m_realloc_maybe((ptr), sizeof(type) * (old_num), sizeof(type) * (new_num))))
#define m_del(type, ptr, num) m_free(ptr, sizeof(type) * (num))
#define m_del_obj(type, ptr) (m_del(type, ptr, 1))
#define m_del_var(obj_type, var_type, var_num, ptr) (m_free(ptr, sizeof(obj_type) + sizeof(var_type) * (var_num)))
#else
#define m_renew(type, ptr, old_num, new_num) ((type*)(m_realloc((ptr), sizeof(type) * (new_num))))
#define m_renew_maybe(type, ptr, old_num, new_num) ((type*)(m_realloc_maybe((ptr), sizeof(type) * (new_num))))
#define m_del(type, ptr, num) ((void)(num), m_free(ptr))
#define m_del_var(obj_type, var_type, var_num, ptr) ((void)(var_num), m_free(ptr))
#endif
#define m_del_obj(type, ptr) (m_del(type, ptr, 1))
void
*
m_malloc
(
size_t
num_bytes
);
void
*
m_malloc_maybe
(
size_t
num_bytes
);
void
*
m_malloc_with_finaliser
(
size_t
num_bytes
);
void
*
m_malloc0
(
size_t
num_bytes
);
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
void
*
m_realloc
(
void
*
ptr
,
size_t
old_num_bytes
,
size_t
new_num_bytes
);
void
*
m_realloc_maybe
(
void
*
ptr
,
size_t
old_num_bytes
,
size_t
new_num_bytes
);
void
m_free
(
void
*
ptr
,
size_t
num_bytes
);
#else
void
*
m_realloc
(
void
*
ptr
,
size_t
new_num_bytes
);
void
*
m_realloc_maybe
(
void
*
ptr
,
size_t
new_num_bytes
);
void
m_free
(
void
*
ptr
);
#endif
void
*
m_malloc_fail
(
size_t
num_bytes
);
#if MICROPY_MEM_STATS
...
...
py/mpconfig.h
View file @
d891452a
...
...
@@ -112,6 +112,12 @@
#define MICROPY_MODULE_DICT_SIZE (1)
#endif
// Whether realloc/free should be passed allocated memory region size
// You must enable this if MICROPY_MEM_STATS is enabled
#ifndef MICROPY_MALLOC_USES_ALLOCATED_SIZE
#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (0)
#endif
// Number of bytes used to store qstr length
// Dictates hard limit on maximum Python identifier length, but 1 byte
// (limit of 255 bytes in an identifier) should be enough for everyone
...
...
py/objarray.c
View file @
d891452a
...
...
@@ -373,7 +373,7 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
if
(
len_adj
>
0
)
{
if
(
len_adj
>
o
->
free
)
{
// TODO: alloc policy; at the moment we go conservative
o
->
items
=
m_re
alloc
(
o
->
items
,
(
o
->
len
+
o
->
free
)
*
item_sz
,
(
o
->
len
+
len_adj
)
*
item_sz
);
o
->
items
=
m_re
new
(
byte
,
o
->
items
,
(
o
->
len
+
o
->
free
)
*
item_sz
,
(
o
->
len
+
len_adj
)
*
item_sz
);
o
->
free
=
0
;
}
mp_seq_replace_slice_grow_inplace
(
o
->
items
,
o
->
len
,
...
...
unix/mpconfigport.h
View file @
d891452a
...
...
@@ -43,6 +43,7 @@
#define MICROPY_ENABLE_GC (1)
#define MICROPY_ENABLE_FINALISER (1)
#define MICROPY_STACK_CHECK (1)
#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (1)
#define MICROPY_MEM_STATS (1)
#define MICROPY_DEBUG_PRINTERS (1)
#define MICROPY_HELPER_REPL (1)
...
...
windows/mpconfigport.h
View file @
d891452a
...
...
@@ -39,6 +39,7 @@
#define MICROPY_ENABLE_GC (1)
#define MICROPY_ENABLE_FINALISER (1)
#define MICROPY_STACK_CHECK (1)
#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (1)
#define MICROPY_MEM_STATS (1)
#define MICROPY_DEBUG_PRINTERS (1)
#define MICROPY_HELPER_REPL (1)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment