mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-07 15:59:32 +03:00
Merge branch 'dev3' into dev3-bin
This commit is contained in:
commit
3f9a5e15fc
9 changed files with 46 additions and 3 deletions
|
@ -25,6 +25,23 @@ There are four requirements to make the overriding work well:
|
||||||
list of the final executable (so it can intercept all potential allocations).
|
list of the final executable (so it can intercept all potential allocations).
|
||||||
You can use `minject -l <exe>` to check this if needed.
|
You can use `minject -l <exe>` to check this if needed.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
┌──────────────┐
|
||||||
|
│ Your Program │
|
||||||
|
└────┬─────────┘
|
||||||
|
│
|
||||||
|
│ mi_version() ┌───────────────┐ ┌───────────────────────┐
|
||||||
|
├──────────────►│ mimalloc.dll ├────►│ mimalloc-redirect.dll │
|
||||||
|
│ └──────┬────────┘ └───────────────────────┘
|
||||||
|
│ ▼
|
||||||
|
│ malloc() etc. ┌──────────────┐
|
||||||
|
├──────────────►│ ucrtbase.dll │
|
||||||
|
│ └──────────────┘
|
||||||
|
│
|
||||||
|
│
|
||||||
|
└──────────────► ...
|
||||||
|
```
|
||||||
|
|
||||||
For best performance on Windows with C++, it
|
For best performance on Windows with C++, it
|
||||||
is also recommended to also override the `new`/`delete` operations (by including
|
is also recommended to also override the `new`/`delete` operations (by including
|
||||||
[`mimalloc-new-delete.h`](../include/mimalloc-new-delete.h)
|
[`mimalloc-new-delete.h`](../include/mimalloc-new-delete.h)
|
||||||
|
|
|
@ -164,6 +164,9 @@
|
||||||
<TargetExt>.lib</TargetExt>
|
<TargetExt>.lib</TargetExt>
|
||||||
<TargetName>mimalloc</TargetName>
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
|
|
|
@ -160,6 +160,9 @@
|
||||||
<TargetExt>.dll</TargetExt>
|
<TargetExt>.dll</TargetExt>
|
||||||
<TargetName>mimalloc</TargetName>
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -148,6 +148,9 @@
|
||||||
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -148,6 +148,9 @@
|
||||||
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -148,6 +148,9 @@
|
||||||
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -148,6 +148,9 @@
|
||||||
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -148,6 +148,9 @@
|
||||||
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(ProjectDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Vcpkg">
|
||||||
|
<VcpkgEnabled>false</VcpkgEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
|
|
@ -296,12 +296,16 @@ void _mi_page_map_register(mi_page_t* page) {
|
||||||
|
|
||||||
void _mi_page_map_unregister(mi_page_t* page) {
|
void _mi_page_map_unregister(mi_page_t* page) {
|
||||||
mi_assert_internal(_mi_page_map != NULL);
|
mi_assert_internal(_mi_page_map != NULL);
|
||||||
|
mi_assert_internal(page != NULL);
|
||||||
|
mi_assert_internal(_mi_is_aligned(page, MI_PAGE_ALIGN));
|
||||||
|
mi_assert_internal(_mi_page_map != NULL);
|
||||||
|
if mi_unlikely(_mi_page_map == NULL) return;
|
||||||
// get index and count
|
// get index and count
|
||||||
size_t slice_count;
|
size_t slice_count;
|
||||||
size_t sub_idx;
|
size_t sub_idx;
|
||||||
const size_t idx = mi_page_map_get_idx(page, &sub_idx, &slice_count);
|
const size_t idx = mi_page_map_get_idx(page, &sub_idx, &slice_count);
|
||||||
// unset the offsets
|
// unset the offsets
|
||||||
mi_page_map_set_range(page, idx, sub_idx, slice_count);
|
// mi_page_map_set_range(NULL, idx, sub_idx, slice_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _mi_page_map_unregister_range(void* start, size_t size) {
|
void _mi_page_map_unregister_range(void* start, size_t size) {
|
||||||
|
@ -311,9 +315,10 @@ void _mi_page_map_unregister_range(void* start, size_t size) {
|
||||||
mi_page_map_set_range(NULL, idx, sub_idx, slice_count); // todo: avoid committing if not already committed?
|
mi_page_map_set_range(NULL, idx, sub_idx, slice_count); // todo: avoid committing if not already committed?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the empty page for the NULL pointer to match the behaviour of `_mi_ptr_page`
|
||||||
mi_page_t* _mi_safe_ptr_page(const void* p) {
|
mi_page_t* _mi_safe_ptr_page(const void* p) {
|
||||||
if mi_unlikely(p >= mi_page_map_max_address) return NULL;
|
if mi_unlikely(p >= mi_page_map_max_address) return NULL;
|
||||||
|
if (p == NULL) return (mi_page_t*)&_mi_page_empty; // to match `_mi_ptr_page` (see `mi_free` as well)
|
||||||
size_t sub_idx;
|
size_t sub_idx;
|
||||||
const size_t idx = _mi_page_map_index(p,&sub_idx);
|
const size_t idx = _mi_page_map_index(p,&sub_idx);
|
||||||
if mi_unlikely(!mi_page_map_is_committed(idx,NULL)) return NULL;
|
if mi_unlikely(!mi_page_map_is_committed(idx,NULL)) return NULL;
|
||||||
|
@ -323,7 +328,7 @@ mi_page_t* _mi_safe_ptr_page(const void* p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept {
|
mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept {
|
||||||
return (_mi_safe_ptr_page(p) != NULL);
|
return (p != NULL && _mi_safe_ptr_page(p) != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue