You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using first-fit-top as the default allocator I am seeing memory leaks when using allocating stl objects (like std::vector). The reason is that those objects are calling operator delete without length information. The call basically gets discarded in
How is this supposed to work? The only option I see is using a default allocator that can deallocate without being given the size information. But that would rule out using any of the three memory resources provided with micro os.
Or should I always have to specify an allocator when using stl objects, like std::vector<T,allocator_stateless_polymorphic_synchronized<T, scheduler::lockable, get_default_resource>> But what is the use of the definitions of operator delete then?
Hi @LnnrtS, thank you for raising this issue. It looks like I overlooked some of the details.
The memory allocators will be reworked in the next release of µOS++, to match the new standard definitions. Work is scheduled to start in a few weeks time, after all build tools will be ready.
For now, please feel free to use any workaround that works for you. At first sight I would make a shorter alias of the allocator, and pass it to stl objects.
Please leave this issue open, and let me know your workaround.
Any other comments and suggestions for improving µOS++ are welcomed, here or in the project forum.
I ended up defining my custom container types as the std ones allocator type set to the one provided by µOS++.
Just for curiosity: Could you elaborate a bit more on how the standard definitions changed? I see that std::allocator<T> is still calling operator delete(ptr). So the memory resources need to be changed to remember the size to deallocate for a specific pointer?
When using
first-fit-top
as the default allocator I am seeing memory leaks when using allocating stl objects (likestd::vector
). The reason is that those objects are callingoperator delete
without length information. The call basically gets discarded inmicro-os-plus-iii/src/libcpp/new.cpp
Line 339 in 1ea30f6
How is this supposed to work? The only option I see is using a default allocator that can deallocate without being given the size information. But that would rule out using any of the three memory resources provided with micro os.
Or should I always have to specify an allocator when using stl objects, like
std::vector<T,allocator_stateless_polymorphic_synchronized<T, scheduler::lockable, get_default_resource>>
But what is the use of the definitions ofoperator delete
then?free()
does the same btwmicro-os-plus-iii/src/libc/stdlib/malloc.cpp
Line 369 in 1ea30f6
The text was updated successfully, but these errors were encountered: