embeddedartistry / libmemory

Embedded systems memory management library. Implementations for malloc(), free(), and other useful memory management functions
https://embeddedartistry.com
MIT License
216 stars 44 forks source link

Support C11 free() #51

Open phillipjohnston opened 5 years ago

phillipjohnston commented 5 years ago

With aligned_alloc() in the C11 standard, free() is called to free memory, rather than an equivalent aligned_free().

We should update our library with some logic that can be used to correctly call aligned_free() if free() is used instead.

phillipjohnston commented 4 years ago

Maybe we waste a few extra bytes in the aligned space... need a "magic" marker that indicates that this was allocated by aligned_malloc(). If the sentinel matches, then we call the aligned version.

belmeopmenieuwesim commented 4 years ago

👍 I would be all for this. It is good to mimic how GLIBC behaves. And I don't think the costs outweigh the benefit

michaeljclark commented 8 months ago

I implemented this in https://github.com/embeddedartistry/libmemory/pull/91 but it is mostly just posted for review at this moment as it needs more testing. I tried it out in emu test_0007_smp.exe where I use it to allocate save restore space for AVX registers using XSAVE/XRSTOR and that will fault if memory is not 64-byte aligned, and it appears to work, but I have not done exhaustive testing yet.