Comments (6)
Completely understand, take your time and gather feedback from others before deciding on this.
One way to keep the API lean, is to not provide two versions of each allocation function in the "Extended" API, one returning void*
, and one returning void*,size_t
, but instead to only provide functions returning void*,size_t
. This should be ok as long as the API returning void*,size_t
does not impose a cost over the one that only returns void*
. This allows users to just discard the size_t if they are not interested on it.
I don't know how hard it is to make sure that returning two words does not incur a performance impact over just returning one word. AFAICT, as long as the API has to compute the "good size" internally any ways, it shouldn't have an impact, at least on all ABIs that allow for two return registers. On ABIs that do not support this, returning the two words might require passing the struct
via memory. I don't know of any ABI that works like this, so I can't tell you how much of a difference this makes.
from mimalloc.
Thanks for the suggestion! Currently, mimalloc provides two functions for this, mi_usable_size
and mi_good_size
, see:
https://github.com/microsoft/mimalloc/blob/master/include/mimalloc.h#L107
I think it is better to have these as separate functions to avoid duplicating all allocation API functions.
Soon, I'll have the full doxygen docs online that gives an easier overview of the whole API
Thanks!
from mimalloc.
Yes, I'm currently using mi_good_size
followed by an allocation function for that.
This means that mimalloc
allocation functions are only called with "good" sizes. If mimalloc
ever supports reporting statistics, e.g., to allow users to tune size classes, the information reported for my applications would be useless, because they would all appear to be using the size classes perfectly.
Also, with the mi_good_size
+ allocation API approach, the size class of the allocation is computed twice, once in mi_good_size
, and another time inside the allocation API. This isn't significant, but is unnecessary.
One way to solve this is to not expose a mi_good_size
function, but instead, have all allocation APIs return both the pointer to the allocation and the allocation size. Most ABIs provide two return registers, so if the allocation function computes the size class, returning it alongside the pointer to the allocation does not really incur a cost. If for whatever reason an execution path within the allocation API does not need to compute the size class, one can always conservatively return the requested size.
from mimalloc.
P0901 provides another view on this issue. It makes IMO a strong case against providing either mi_usable_size
or mi_good_size
.
from mimalloc.
Nice reference, and a good argument. I am worried about how many extra versions of each allocation function we get though; mimalloc is supposed to stay "lean and mean" so I am hesitant on this issue and need to consider it further.
from mimalloc.
Any update on this ?
from mimalloc.
Related Issues (20)
- Override malloc in dynamically loaded dll on Windows
- Mimalloc attempts to allocate 33 MB shortly after thread start, prints spurious warning when it fails
- Any way to know how much memory was freed but not yet purged?
- The performance of mimalloc is unexpectedly lower than that of the system's built-in allocator. HOT 3
- Use MADV_FREE in FreeBSD HOT 4
- mimalloc.cmake has hard-coded paths
- Shutdown issues using heap bound to arena, `mi_collect`
- What interface is redirected _expand_base
- mi_malloc didn't return NULL while no memory available
- Multiple debug print statements and hugepages mapped HOT 1
- When will release the next version?
- Why is `mimalloc-redirect` closed-source? HOT 1
- Unused variable from heap alloc code
- Crash on start on OSX with v2.0.9 HOT 1
- "mimalloc-obj" is not in any export set
- alloc-override.c uses wrong type for std::nothrow_t argument in C++ operator new overrides HOT 1
- Allocate from heap from different threads HOT 3
- Mimalloc detects wrong libatomic for static linking
- Windows Server 2019 kernel CPU time
- ASAN crash in `mi_checked_ptr_segment` when freeing memory from `abi::__cxa_demangle`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mimalloc.