mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-06 23:39:31 +03:00
update documentation
This commit is contained in:
parent
9a5189aa83
commit
5c8721f0b8
1 changed files with 28 additions and 17 deletions
45
readme.md
45
readme.md
|
@ -56,6 +56,7 @@ Enjoy!
|
||||||
|
|
||||||
### Releases
|
### Releases
|
||||||
|
|
||||||
|
* 2019-11-22, `v1.2.0`: stable release 1.2: bug fixes, improved secure mode.
|
||||||
* 2019-10-07, `v1.1.0`: stable release 1.1.
|
* 2019-10-07, `v1.1.0`: stable release 1.1.
|
||||||
* 2019-09-01, `v1.0.8`: pre-release 8: more robust windows dynamic overriding, initial huge page support.
|
* 2019-09-01, `v1.0.8`: pre-release 8: more robust windows dynamic overriding, initial huge page support.
|
||||||
* 2019-08-10, `v1.0.6`: pre-release 6: various performance improvements.
|
* 2019-08-10, `v1.0.6`: pre-release 6: various performance improvements.
|
||||||
|
@ -138,6 +139,10 @@ target_link_libraries(myapp PUBLIC mimalloc-static)
|
||||||
```
|
```
|
||||||
to link with the static library. See `test\CMakeLists.txt` for an example.
|
to link with the static library. See `test\CMakeLists.txt` for an example.
|
||||||
|
|
||||||
|
For best performance in C++ programs, it is also recommended to override the
|
||||||
|
global `new` and `delete` operators. For convience, mimalloc provides
|
||||||
|
[mimalloc-new-delete.h](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h) which does this for you -- just include it in
|
||||||
|
a single(!) source file in your project.
|
||||||
|
|
||||||
You can pass environment variables to print verbose messages (`MIMALLOC_VERBOSE=1`)
|
You can pass environment variables to print verbose messages (`MIMALLOC_VERBOSE=1`)
|
||||||
and statistics (`MIMALLOC_SHOW_STATS=1`) (in the debug version):
|
and statistics (`MIMALLOC_SHOW_STATS=1`) (in the debug version):
|
||||||
|
@ -188,18 +193,18 @@ or via environment variables.
|
||||||
- `MIMALLOC_SHOW_STATS=1`: show statistics when the program terminates.
|
- `MIMALLOC_SHOW_STATS=1`: show statistics when the program terminates.
|
||||||
- `MIMALLOC_VERBOSE=1`: show verbose messages.
|
- `MIMALLOC_VERBOSE=1`: show verbose messages.
|
||||||
- `MIMALLOC_SHOW_ERRORS=1`: show error and warning messages.
|
- `MIMALLOC_SHOW_ERRORS=1`: show error and warning messages.
|
||||||
- `MIMALLOC_LARGE_OS_PAGES=1`: use large OS pages when available; for some workloads this can significantly
|
- `MIMALLOC_LARGE_OS_PAGES=1`: use large OS pages when available; for some workloads this can significantly
|
||||||
improve performance. Use `MIMALLOC_VERBOSE` to check if the large OS pages are enabled -- usually one needs
|
improve performance. Use `MIMALLOC_VERBOSE` to check if the large OS pages are enabled -- usually one needs
|
||||||
to explicitly allow large OS pages (as on [Windows][windows-huge] and [Linux][linux-huge]). However, sometimes
|
to explicitly allow large OS pages (as on [Windows][windows-huge] and [Linux][linux-huge]). However, sometimes
|
||||||
the OS is very slow to reserve contiguous physical memory for large OS pages so use with care on systems that
|
the OS is very slow to reserve contiguous physical memory for large OS pages so use with care on systems that
|
||||||
can have fragmented memory.
|
can have fragmented memory.
|
||||||
- `MIMALLOC_EAGER_REGION_COMMIT=1`: on Windows, commit large (256MiB) regions eagerly. On Windows, these regions
|
- `MIMALLOC_EAGER_REGION_COMMIT=1`: on Windows, commit large (256MiB) regions eagerly. On Windows, these regions
|
||||||
show in the working set even though usually just a small part is committed to physical memory. This is why it
|
show in the working set even though usually just a small part is committed to physical memory. This is why it
|
||||||
turned off by default on Windows as it looks not good in the task manager. However, in reality it is always better
|
turned off by default on Windows as it looks not good in the task manager. However, in reality it is always better
|
||||||
to turn it on as it improves performance and has no other drawbacks.
|
to turn it on as it improves performance and has no other drawbacks.
|
||||||
- `MIMALLOC_RESERVE_HUGE_OS_PAGES=N`: where N is the number of 1GiB huge OS pages. This reserves the huge pages at
|
- `MIMALLOC_RESERVE_HUGE_OS_PAGES=N`: where N is the number of 1GiB huge OS pages. This reserves the huge pages at
|
||||||
startup and can give quite a performance improvement on long running workloads. Usually it is better to not use
|
startup and can give quite a performance improvement on long running workloads. Usually it is better to not use
|
||||||
`MIMALLOC_LARGE_OS_PAGES` in combination with this setting. Just like large OS pages, use with care as reserving
|
`MIMALLOC_LARGE_OS_PAGES` in combination with this setting. Just like large OS pages, use with care as reserving
|
||||||
contiguous physical memory can take a long time when memory is fragmented. Still experimental.
|
contiguous physical memory can take a long time when memory is fragmented. Still experimental.
|
||||||
|
|
||||||
[linux-huge]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/sect-oracle_9i_and_10g_tuning_guide-large_memory_optimization_big_pages_and_huge_pages-configuring_huge_pages_in_red_hat_enterprise_linux_4_or_5
|
[linux-huge]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/tuning_and_optimizing_red_hat_enterprise_linux_for_oracle_9i_and_10g_databases/sect-oracle_9i_and_10g_tuning_guide-large_memory_optimization_big_pages_and_huge_pages-configuring_huge_pages_in_red_hat_enterprise_linux_4_or_5
|
||||||
|
@ -211,7 +216,7 @@ Overriding the standard `malloc` can be done either _dynamically_ or _statically
|
||||||
|
|
||||||
## Dynamic override
|
## Dynamic override
|
||||||
|
|
||||||
This is the recommended way to override the standard malloc interface.
|
This is the recommended way to override the standard malloc interface.
|
||||||
|
|
||||||
### Linux, BSD
|
### Linux, BSD
|
||||||
|
|
||||||
|
@ -244,29 +249,29 @@ resolved to the _mimalloc_ library.
|
||||||
Note that certain security restrictions may apply when doing this from
|
Note that certain security restrictions may apply when doing this from
|
||||||
the [shell](https://stackoverflow.com/questions/43941322/dyld-insert-libraries-ignored-when-calling-application-through-bash).
|
the [shell](https://stackoverflow.com/questions/43941322/dyld-insert-libraries-ignored-when-calling-application-through-bash).
|
||||||
|
|
||||||
Note: unfortunately, at this time, dynamic overriding on macOS seems broken but it is actively worked on to fix this
|
Note: unfortunately, at this time, dynamic overriding on macOS seems broken but it is actively worked on to fix this
|
||||||
(see issue [`#50`](https://github.com/microsoft/mimalloc/issues/50)).
|
(see issue [`#50`](https://github.com/microsoft/mimalloc/issues/50)).
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
On Windows you need to link your program explicitly with the mimalloc
|
On Windows you need to link your program explicitly with the mimalloc
|
||||||
DLL and use the C-runtime library as a DLL (using the `/MD` or `/MDd` switch).
|
DLL and use the C-runtime library as a DLL (using the `/MD` or `/MDd` switch).
|
||||||
Moreover, you need to ensure the `mimalloc-redirect.dll` (or `mimalloc-redirect32.dll`) is available
|
Moreover, you need to ensure the `mimalloc-redirect.dll` (or `mimalloc-redirect32.dll`) is available
|
||||||
in the same folder as the mimalloc DLL at runtime (as it as referred to by the mimalloc DLL).
|
in the same folder as the main `mimalloc-override.dll` at runtime (as it is a dependency).
|
||||||
The redirection DLL's ensure all calls to the C runtime malloc API get redirected to mimalloc.
|
The redirection DLL ensures that all calls to the C runtime malloc API get redirected to
|
||||||
|
mimalloc (in `mimalloc-override.dll`).
|
||||||
|
|
||||||
To ensure the mimalloc DLL is loaded at run-time it is easiest to insert some
|
To ensure the mimalloc DLL is loaded at run-time it is easiest to insert some
|
||||||
call to the mimalloc API in the `main` function, like `mi_version()`
|
call to the mimalloc API in the `main` function, like `mi_version()`
|
||||||
(or use the `/INCLUDE:mi_version` switch on the linker). See the `mimalloc-override-test` project
|
(or use the `/INCLUDE:mi_version` switch on the linker). See the `mimalloc-override-test` project
|
||||||
for an example on how to use this.
|
for an example on how to use this.
|
||||||
|
|
||||||
The environment variable `MIMALLOC_DISABLE_REDIRECT=1` can be used to disable dynamic
|
The environment variable `MIMALLOC_DISABLE_REDIRECT=1` can be used to disable dynamic
|
||||||
overriding at run-time. Use `MIMALLOC_VERBOSE=1` to check if mimalloc successfully redirected.
|
overriding at run-time. Use `MIMALLOC_VERBOSE=1` to check if mimalloc was successfully redirected.
|
||||||
|
|
||||||
(Note: in principle, it should be possible to patch existing executables
|
(Note: in principle, it is possible to patch existing executables
|
||||||
that are linked with the dynamic C runtime (`ucrtbase.dll`) by just putting the mimalloc DLL into
|
that are linked with the dynamic C runtime (`ucrtbase.dll`) by just putting the `mimalloc-override.dll` into the import table (and putting `mimalloc-redirect.dll` in the same folder)
|
||||||
the import table (and putting `mimalloc-redirect.dll` in the same folder)
|
Such patching can be done for example with [CFF Explorer](https://ntcore.com/?page_id=388)).
|
||||||
Such patching can be done for example with [CFF Explorer](https://ntcore.com/?page_id=388)).
|
|
||||||
|
|
||||||
|
|
||||||
## Static override
|
## Static override
|
||||||
|
@ -282,6 +287,12 @@ object file. For example:
|
||||||
> gcc -o myprogram mimalloc-override.o myfile1.c ...
|
> gcc -o myprogram mimalloc-override.o myfile1.c ...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Another way to override statically that works on all platforms, is to
|
||||||
|
link statically to mimalloc (as shown in the introduction) and include a
|
||||||
|
header file in each source file that re-defines `malloc` etc. to `mi_malloc`.
|
||||||
|
This is provided by [`mimalloc-override.h`](https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-override.h). This only works reliably though if all sources are
|
||||||
|
under your control or otherwise mixing of pointers from different heaps may occur!
|
||||||
|
|
||||||
|
|
||||||
# Performance
|
# Performance
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue