mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-04 22:49:32 +03:00
update for new dynamic direction on windows 64-bit
This commit is contained in:
parent
f646cc925d
commit
c228ecefd8
19 changed files with 218 additions and 88 deletions
|
@ -90,10 +90,18 @@
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<ExceptionHandling>false</ExceptionHandling>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<SupportJustMyCode>false</SupportJustMyCode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent />
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>COPY /Y $(SolutionDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -103,14 +111,20 @@
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\..\include</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<ExceptionHandling>false</ExceptionHandling>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
|
<SupportJustMyCode>false</SupportJustMyCode>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<EntryPointSymbol>
|
<EntryPointSymbol>
|
||||||
</EntryPointSymbol>
|
</EntryPointSymbol>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
|
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent />
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>COPY /Y $(SolutionDir)..\..\bin\mimalloc-redirect.dll $(OutputPath)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -128,7 +142,11 @@
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>COPY /Y $(SolutionDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -150,9 +168,21 @@
|
||||||
</EntryPointSymbol>
|
</EntryPointSymbol>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PostBuildEvent>
|
||||||
|
<Command>COPY /Y $(SolutionDir)..\..\bin\mimalloc-redirect.dll $(OutputPath)</Command>
|
||||||
|
</PostBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\test\main-override.cpp" />
|
<ClCompile Include="..\..\test\main-override.c">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\test\main-override.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="mimalloc-override.vcxproj">
|
<ProjectReference Include="mimalloc-override.vcxproj">
|
||||||
|
|
|
@ -18,5 +18,8 @@
|
||||||
<ClCompile Include="..\..\test\main-override.cpp">
|
<ClCompile Include="..\..\test\main-override.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\test\main-override.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -70,21 +70,25 @@
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.dll</TargetExt>
|
<TargetExt>.dll</TargetExt>
|
||||||
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.dll</TargetExt>
|
<TargetExt>.dll</TargetExt>
|
||||||
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.dll</TargetExt>
|
<TargetExt>.dll</TargetExt>
|
||||||
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.dll</TargetExt>
|
<TargetExt>.dll</TargetExt>
|
||||||
|
<TargetName>mimalloc</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
@ -96,6 +100,7 @@
|
||||||
<PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;_MBCS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
<PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;_MBCS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<SupportJustMyCode>false</SupportJustMyCode>
|
<SupportJustMyCode>false</SupportJustMyCode>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
|
@ -106,8 +111,7 @@
|
||||||
</Message>
|
</Message>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<Link>
|
<Link>
|
||||||
<EntryPointSymbol>DllEntry</EntryPointSymbol>
|
<AdditionalDependencies>../../bin/mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
</IgnoreSpecificDefaultLibraries>
|
</IgnoreSpecificDefaultLibraries>
|
||||||
<ModuleDefinitionFile>
|
<ModuleDefinitionFile>
|
||||||
|
@ -124,6 +128,7 @@
|
||||||
<PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;_MBCS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
<PreprocessorDefinitions>MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;_MBCS;%(PreprocessorDefinitions);</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<SupportJustMyCode>false</SupportJustMyCode>
|
<SupportJustMyCode>false</SupportJustMyCode>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
|
@ -134,8 +139,7 @@
|
||||||
</Message>
|
</Message>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<Link>
|
<Link>
|
||||||
<EntryPointSymbol>DllEntry</EntryPointSymbol>
|
<AdditionalDependencies>../../bin/mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
</IgnoreSpecificDefaultLibraries>
|
</IgnoreSpecificDefaultLibraries>
|
||||||
<ModuleDefinitionFile>
|
<ModuleDefinitionFile>
|
||||||
|
@ -156,12 +160,12 @@
|
||||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<EntryPointSymbol>DllEntry</EntryPointSymbol>
|
<AdditionalDependencies>../../bin/mimalloc-redirect32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<ModuleDefinitionFile>
|
<ModuleDefinitionFile>
|
||||||
</ModuleDefinitionFile>
|
</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -188,12 +192,12 @@
|
||||||
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<CompileAs>Default</CompileAs>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<EntryPointSymbol>DllEntry</EntryPointSymbol>
|
<AdditionalDependencies>../../bin/mimalloc-redirect.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalDependencies>kernel32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<ModuleDefinitionFile>
|
<ModuleDefinitionFile>
|
||||||
</ModuleDefinitionFile>
|
</ModuleDefinitionFile>
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -219,7 +223,18 @@
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\alloc-override-win.c" />
|
<ClCompile Include="..\..\src\alloc-override-win.c">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\alloc-override.c">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\alloc-posix.c" />
|
<ClCompile Include="..\..\src\alloc-posix.c" />
|
||||||
<ClCompile Include="..\..\src\alloc.c" />
|
<ClCompile Include="..\..\src\alloc.c" />
|
||||||
<ClCompile Include="..\..\src\heap.c" />
|
<ClCompile Include="..\..\src\heap.c" />
|
||||||
|
|
|
@ -46,9 +46,6 @@
|
||||||
<ClCompile Include="..\..\src\alloc-aligned.c">
|
<ClCompile Include="..\..\src\alloc-aligned.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\alloc-override-win.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\heap.c">
|
<ClCompile Include="..\..\src\heap.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -61,8 +58,14 @@
|
||||||
<ClCompile Include="..\..\src\memory.c">
|
<ClCompile Include="..\..\src\memory.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\alloc-override.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\alloc-posix.c">
|
<ClCompile Include="..\..\src\alloc-posix.c">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\alloc-override-win.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -11,8 +11,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override", "mimall
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override-test", "mimalloc-override-test.vcxproj", "{FEF7868F-750E-4C21-A04D-22707CC66879}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-override-test", "mimalloc-override-test.vcxproj", "{FEF7868F-750E-4C21-A04D-22707CC66879}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mimalloc-test-stress", "mimalloc-test-stress.vcxproj", "{FEF7958F-750E-4C21-A04D-22707CC66878}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
|
@ -53,14 +51,6 @@ Global
|
||||||
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.Build.0 = Release|x64
|
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x64.Build.0 = Release|x64
|
||||||
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.ActiveCfg = Release|Win32
|
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.ActiveCfg = Release|Win32
|
||||||
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.Build.0 = Release|Win32
|
{FEF7868F-750E-4C21-A04D-22707CC66879}.Release|x86.Build.0 = Release|Win32
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.ActiveCfg = Debug|Win32
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Debug|x86.Build.0 = Debug|Win32
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x64.Build.0 = Release|x64
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.ActiveCfg = Release|Win32
|
|
||||||
{FEF7958F-750E-4C21-A04D-22707CC66878}.Release|x86.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -70,21 +70,25 @@
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.lib</TargetExt>
|
<TargetExt>.lib</TargetExt>
|
||||||
|
<TargetName>mimalloc-static</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.lib</TargetExt>
|
<TargetExt>.lib</TargetExt>
|
||||||
|
<TargetName>mimalloc-static</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.lib</TargetExt>
|
<TargetExt>.lib</TargetExt>
|
||||||
|
<TargetName>mimalloc-static</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
<IntDir>$(SolutionDir)..\..\out\msvc-$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
|
||||||
<TargetExt>.lib</TargetExt>
|
<TargetExt>.lib</TargetExt>
|
||||||
|
<TargetName>mimalloc-static</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
|
|
|
@ -35,6 +35,7 @@ bool _mi_is_main_thread(void);
|
||||||
uintptr_t _mi_ptr_cookie(const void* p);
|
uintptr_t _mi_ptr_cookie(const void* p);
|
||||||
uintptr_t _mi_random_shuffle(uintptr_t x);
|
uintptr_t _mi_random_shuffle(uintptr_t x);
|
||||||
uintptr_t _mi_random_init(uintptr_t seed /* can be zero */);
|
uintptr_t _mi_random_init(uintptr_t seed /* can be zero */);
|
||||||
|
bool _mi_preloading(); // true while the C runtime is not ready
|
||||||
|
|
||||||
// os.c
|
// os.c
|
||||||
size_t _mi_os_page_size(void);
|
size_t _mi_os_page_size(void);
|
||||||
|
|
|
@ -197,6 +197,7 @@ mi_decl_export bool mi_heap_visit_blocks(const mi_heap_t* heap, bool visit_all_b
|
||||||
|
|
||||||
mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept;
|
mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept;
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
// Convenience
|
// Convenience
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
@ -245,14 +246,15 @@ mi_decl_export void mi_option_set(mi_option_t option, long value);
|
||||||
mi_decl_export void mi_option_set_default(mi_option_t option, long value);
|
mi_decl_export void mi_option_set_default(mi_option_t option, long value);
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------
|
||||||
// mi prefixed implementations of various posix, unix, and C++ allocation functions.
|
// mi prefixed implementations of various posix, Unix, Windows, and C++ allocation functions.
|
||||||
// -----------------------------------------------------------------------------------
|
// (This can be convenient when providing overrides of these functions.)
|
||||||
|
// --------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
mi_decl_export void* mi_recalloc(void* p, size_t count, size_t size) mi_attr_noexcept;
|
|
||||||
mi_decl_export size_t mi_malloc_size(const void* p) mi_attr_noexcept;
|
mi_decl_export size_t mi_malloc_size(const void* p) mi_attr_noexcept;
|
||||||
mi_decl_export size_t mi_malloc_usable_size(const void *p) mi_attr_noexcept;
|
mi_decl_export size_t mi_malloc_usable_size(const void *p) mi_attr_noexcept;
|
||||||
mi_decl_export void mi_cfree(void* p) mi_attr_noexcept;
|
mi_decl_export void mi_cfree(void* p) mi_attr_noexcept;
|
||||||
|
mi_decl_export void* mi__expand(void* p, size_t newsize) mi_attr_noexcept;
|
||||||
|
|
||||||
mi_decl_export int mi_posix_memalign(void** p, size_t alignment, size_t size) mi_attr_noexcept;
|
mi_decl_export int mi_posix_memalign(void** p, size_t alignment, size_t size) mi_attr_noexcept;
|
||||||
mi_decl_export int mi__posix_memalign(void** p, size_t alignment, size_t size) mi_attr_noexcept;
|
mi_decl_export int mi__posix_memalign(void** p, size_t alignment, size_t size) mi_attr_noexcept;
|
||||||
|
@ -263,6 +265,10 @@ mi_decl_export mi_decl_allocator void* mi_pvalloc(size_t size) mi_attr_noexcept
|
||||||
mi_decl_export mi_decl_allocator void* mi_aligned_alloc(size_t alignment, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2);
|
mi_decl_export mi_decl_allocator void* mi_aligned_alloc(size_t alignment, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size(2);
|
||||||
mi_decl_export mi_decl_allocator void* mi_reallocarray(void* p, size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2,3);
|
mi_decl_export mi_decl_allocator void* mi_reallocarray(void* p, size_t count, size_t size) mi_attr_noexcept mi_attr_malloc mi_attr_alloc_size2(2,3);
|
||||||
|
|
||||||
|
mi_decl_export void* mi_recalloc(void* p, size_t count, size_t size) mi_attr_noexcept;
|
||||||
|
mi_decl_export void* mi_aligned_recalloc(void* p, size_t size, size_t newcount, size_t alignment) mi_attr_noexcept;
|
||||||
|
mi_decl_export void* mi_aligned_offset_recalloc(void* p, size_t size, size_t newcount, size_t alignment, size_t offset) mi_attr_noexcept;
|
||||||
|
|
||||||
mi_decl_export void mi_free_size(void* p, size_t size) mi_attr_noexcept;
|
mi_decl_export void mi_free_size(void* p, size_t size) mi_attr_noexcept;
|
||||||
mi_decl_export void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept;
|
mi_decl_export void mi_free_size_aligned(void* p, size_t size, size_t alignment) mi_attr_noexcept;
|
||||||
mi_decl_export void mi_free_aligned(void* p, size_t alignment) mi_attr_noexcept;
|
mi_decl_export void mi_free_aligned(void* p, size_t alignment) mi_attr_noexcept;
|
||||||
|
|
|
@ -150,3 +150,14 @@ void* mi_realloc_aligned_at(void* p, size_t newsize, size_t alignment, size_t of
|
||||||
void* mi_realloc_aligned(void* p, size_t newsize, size_t alignment) mi_attr_noexcept {
|
void* mi_realloc_aligned(void* p, size_t newsize, size_t alignment) mi_attr_noexcept {
|
||||||
return mi_heap_realloc_aligned(mi_get_default_heap(), p, newsize, alignment);
|
return mi_heap_realloc_aligned(mi_get_default_heap(), p, newsize, alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* mi_aligned_offset_recalloc(void* p, size_t size, size_t newcount, size_t alignment, size_t offset) mi_attr_noexcept {
|
||||||
|
size_t newsize;
|
||||||
|
if (mi_mul_overflow(size,newcount,&newsize)) return NULL;
|
||||||
|
return mi_heap_realloc_zero_aligned_at(mi_get_default_heap(), p, newsize, alignment, offset, true );
|
||||||
|
}
|
||||||
|
void* mi_aligned_recalloc(void* p, size_t size, size_t newcount, size_t alignment) mi_attr_noexcept {
|
||||||
|
size_t newsize;
|
||||||
|
if (mi_mul_overflow(size, newcount, &newsize)) return NULL;
|
||||||
|
return mi_heap_realloc_zero_aligned(mi_get_default_heap(), p, newsize, alignment, true );
|
||||||
|
}
|
||||||
|
|
|
@ -98,11 +98,6 @@ static int __cdecl mi_setmaxstdio(int newmax);
|
||||||
// Microsoft allocation extensions
|
// Microsoft allocation extensions
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
|
||||||
static void* mi__expand(void* p, size_t newsize) {
|
|
||||||
void* res = mi_expand(p, newsize);
|
|
||||||
if (res == NULL) errno = ENOMEM;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef size_t mi_nothrow_t;
|
typedef size_t mi_nothrow_t;
|
||||||
|
|
||||||
|
|
|
@ -194,4 +194,5 @@ int posix_memalign(void** p, size_t alignment, size_t size) { return mi_posix_me
|
||||||
#pragma GCC visibility pop
|
#pragma GCC visibility pop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // MI_MALLOC_OVERRIDE & !_WIN32
|
#endif // MI_MALLOC_OVERRIDE && !_WIN32
|
||||||
|
|
||||||
|
|
|
@ -80,3 +80,14 @@ void* mi_reallocarray( void* p, size_t count, size_t size ) mi_attr_noexcept {
|
||||||
return newp;
|
return newp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void* mi__expand(void* p, size_t newsize) mi_attr_noexcept { // Microsoft
|
||||||
|
void* res = mi_expand(p, newsize);
|
||||||
|
if (res == NULL) errno = ENOMEM;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* mi_recalloc(void* p, size_t count, size_t size) mi_attr_noexcept { // Microsoft
|
||||||
|
size_t total;
|
||||||
|
if (mi_mul_overflow(count, size, &total)) return NULL;
|
||||||
|
return _mi_heap_realloc_zero(mi_get_default_heap(), p, total, true);
|
||||||
|
}
|
||||||
|
|
|
@ -393,12 +393,6 @@ void* mi_realloc(void* p, size_t newsize) mi_attr_noexcept {
|
||||||
return mi_heap_realloc(mi_get_default_heap(),p,newsize);
|
return mi_heap_realloc(mi_get_default_heap(),p,newsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* mi_recalloc(void* p, size_t count, size_t size) mi_attr_noexcept {
|
|
||||||
size_t total;
|
|
||||||
if (mi_mul_overflow(count, size, &total)) return NULL;
|
|
||||||
return _mi_heap_realloc_zero(mi_get_default_heap(),p,total,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void* mi_reallocn(void* p, size_t count, size_t size) mi_attr_noexcept {
|
void* mi_reallocn(void* p, size_t count, size_t size) mi_attr_noexcept {
|
||||||
return mi_heap_reallocn(mi_get_default_heap(),p,count,size);
|
return mi_heap_reallocn(mi_get_default_heap(),p,count,size);
|
||||||
}
|
}
|
||||||
|
@ -537,6 +531,7 @@ std_new_handler_t mi_get_new_handler() {
|
||||||
return _ZSt15get_new_handlerv();
|
return _ZSt15get_new_handlerv();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
// note: on windows we could dynamically link to `?get_new_handler@std@@YAP6AXXZXZ`.
|
||||||
std_new_handler_t mi_get_new_handler() {
|
std_new_handler_t mi_get_new_handler() {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,7 +172,7 @@ void mi_collect(bool force) mi_attr_noexcept {
|
||||||
----------------------------------------------------------- */
|
----------------------------------------------------------- */
|
||||||
|
|
||||||
mi_heap_t* mi_heap_get_default(void) {
|
mi_heap_t* mi_heap_get_default(void) {
|
||||||
mi_thread_init();
|
// mi_thread_init();
|
||||||
return mi_get_default_heap();
|
return mi_get_default_heap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
62
src/init.c
62
src/init.c
|
@ -373,6 +373,47 @@ void mi_thread_done(void) mi_attr_noexcept {
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
static void mi_process_done(void);
|
static void mi_process_done(void);
|
||||||
|
|
||||||
|
static bool os_preloading = true; // true until this module is initialized
|
||||||
|
static bool mi_redirected = false; // true if malloc redirects to mi_malloc
|
||||||
|
|
||||||
|
// Returns true if this module has not been initialized; Don't use C runtime routines until it returns false.
|
||||||
|
bool _mi_preloading() {
|
||||||
|
return os_preloading;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Communicate with the redirection module on Windows
|
||||||
|
#if defined(_WIN32) && defined(MI_SHARED_LIB)
|
||||||
|
mi_decl_export void _mi_redirect_init() {
|
||||||
|
// called on redirection
|
||||||
|
mi_redirected = true;
|
||||||
|
}
|
||||||
|
__declspec(dllimport) bool mi_allocator_init(const char** message);
|
||||||
|
__declspec(dllimport) void mi_allocator_done();
|
||||||
|
#else
|
||||||
|
static bool mi_allocator_init(const char** message) {
|
||||||
|
if (message != NULL) *message = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
static void mi_allocator_done() {
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Called once by the process loader
|
||||||
|
static void mi_process_load(void) {
|
||||||
|
os_preloading = false;
|
||||||
|
atexit(&mi_process_done);
|
||||||
|
mi_process_init();
|
||||||
|
//mi_stats_reset();
|
||||||
|
if (mi_redirected) _mi_verbose_message("malloc is redirected.\n");
|
||||||
|
|
||||||
|
// show message from the redirector (if present)
|
||||||
|
const char* msg = NULL;
|
||||||
|
mi_allocator_init(&msg);
|
||||||
|
if (msg != NULL) _mi_verbose_message(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the process; called by thread_init or the process loader
|
||||||
void mi_process_init(void) mi_attr_noexcept {
|
void mi_process_init(void) mi_attr_noexcept {
|
||||||
// ensure we are called once
|
// ensure we are called once
|
||||||
if (_mi_process_is_initialized) return;
|
if (_mi_process_is_initialized) return;
|
||||||
|
@ -389,15 +430,16 @@ void mi_process_init(void) mi_attr_noexcept {
|
||||||
_mi_heap_main.cookie = (uintptr_t)&_mi_heap_main ^ random;
|
_mi_heap_main.cookie = (uintptr_t)&_mi_heap_main ^ random;
|
||||||
#endif
|
#endif
|
||||||
_mi_heap_main.random = _mi_random_shuffle(random);
|
_mi_heap_main.random = _mi_random_shuffle(random);
|
||||||
|
mi_process_setup_auto_thread_done();
|
||||||
|
_mi_os_init();
|
||||||
#if (MI_DEBUG)
|
#if (MI_DEBUG)
|
||||||
_mi_verbose_message("debug level : %d\n", MI_DEBUG);
|
_mi_verbose_message("debug level : %d\n", MI_DEBUG);
|
||||||
#endif
|
#endif
|
||||||
atexit(&mi_process_done);
|
mi_thread_init();
|
||||||
mi_process_setup_auto_thread_done();
|
mi_stats_reset(); // only call stat reset *after* thread init (or the heap tld == NULL)
|
||||||
mi_stats_reset();
|
|
||||||
_mi_os_init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called when the process is done (through `at_exit`)
|
||||||
static void mi_process_done(void) {
|
static void mi_process_done(void) {
|
||||||
// only shutdown if we were initialized
|
// only shutdown if we were initialized
|
||||||
if (!_mi_process_is_initialized) return;
|
if (!_mi_process_is_initialized) return;
|
||||||
|
@ -413,7 +455,9 @@ static void mi_process_done(void) {
|
||||||
mi_option_is_enabled(mi_option_verbose)) {
|
mi_option_is_enabled(mi_option_verbose)) {
|
||||||
mi_stats_print(NULL);
|
mi_stats_print(NULL);
|
||||||
}
|
}
|
||||||
|
mi_allocator_done();
|
||||||
_mi_verbose_message("process done: 0x%zx\n", _mi_heap_main.thread_id);
|
_mi_verbose_message("process done: 0x%zx\n", _mi_heap_main.thread_id);
|
||||||
|
os_preloading = true; // don't call the C runtime anymore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -426,7 +470,7 @@ static void mi_process_done(void) {
|
||||||
UNUSED(reserved);
|
UNUSED(reserved);
|
||||||
UNUSED(inst);
|
UNUSED(inst);
|
||||||
if (reason==DLL_PROCESS_ATTACH) {
|
if (reason==DLL_PROCESS_ATTACH) {
|
||||||
mi_process_init();
|
mi_process_load();
|
||||||
}
|
}
|
||||||
else if (reason==DLL_THREAD_DETACH) {
|
else if (reason==DLL_THREAD_DETACH) {
|
||||||
mi_thread_done();
|
mi_thread_done();
|
||||||
|
@ -437,7 +481,7 @@ static void mi_process_done(void) {
|
||||||
#elif defined(__cplusplus)
|
#elif defined(__cplusplus)
|
||||||
// C++: use static initialization to detect process start
|
// C++: use static initialization to detect process start
|
||||||
static bool _mi_process_init(void) {
|
static bool _mi_process_init(void) {
|
||||||
mi_process_init();
|
mi_process_load();
|
||||||
return (_mi_heap_main.thread_id != 0);
|
return (_mi_heap_main.thread_id != 0);
|
||||||
}
|
}
|
||||||
static bool mi_initialized = _mi_process_init();
|
static bool mi_initialized = _mi_process_init();
|
||||||
|
@ -445,14 +489,14 @@ static void mi_process_done(void) {
|
||||||
#elif defined(__GNUC__) || defined(__clang__)
|
#elif defined(__GNUC__) || defined(__clang__)
|
||||||
// GCC,Clang: use the constructor attribute
|
// GCC,Clang: use the constructor attribute
|
||||||
static void __attribute__((constructor)) _mi_process_init(void) {
|
static void __attribute__((constructor)) _mi_process_init(void) {
|
||||||
mi_process_init();
|
mi_process_load();
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
// MSVC: use data section magic for static libraries
|
// MSVC: use data section magic for static libraries
|
||||||
// See <https://www.codeguru.com/cpp/misc/misc/applicationcontrol/article.php/c6945/Running-Code-Before-and-After-Main.htm>
|
// See <https://www.codeguru.com/cpp/misc/misc/applicationcontrol/article.php/c6945/Running-Code-Before-and-After-Main.htm>
|
||||||
static int _mi_process_init(void) {
|
static int _mi_process_init(void) {
|
||||||
mi_process_init();
|
mi_process_load();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
typedef int(*_crt_cb)(void);
|
typedef int(*_crt_cb)(void);
|
||||||
|
@ -467,5 +511,5 @@ static void mi_process_done(void) {
|
||||||
#pragma data_seg()
|
#pragma data_seg()
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#pragma message("define a way to call mi_process_init/done on your platform")
|
#pragma message("define a way to call mi_process_load on your platform")
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -114,6 +114,7 @@ bool mi_is_in_heap_region(const void* p) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
Commit from a region
|
Commit from a region
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -16,6 +16,10 @@ int mi_version(void) mi_attr_noexcept {
|
||||||
return MI_MALLOC_VERSION;
|
return MI_MALLOC_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <conio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
// Options
|
// Options
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
|
@ -104,7 +108,17 @@ static void mi_vfprintf( FILE* out, const char* prefix, const char* fmt, va_list
|
||||||
char buf[256];
|
char buf[256];
|
||||||
if (fmt==NULL) return;
|
if (fmt==NULL) return;
|
||||||
if (out==NULL) out = stdout;
|
if (out==NULL) out = stdout;
|
||||||
|
if (_mi_preloading()) return;
|
||||||
vsnprintf(buf,sizeof(buf)-1,fmt,args);
|
vsnprintf(buf,sizeof(buf)-1,fmt,args);
|
||||||
|
#ifdef _WIN32
|
||||||
|
// on windows with redirection, the C runtime uses us and we cannot call `fputs`
|
||||||
|
// while called from the C runtime itself, so use a non-locking option
|
||||||
|
if (out==stderr) {
|
||||||
|
if (prefix != NULL) _cputs(prefix);
|
||||||
|
_cputs(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (prefix != NULL) fputs(prefix,out);
|
if (prefix != NULL) fputs(prefix,out);
|
||||||
fputs(buf,out);
|
fputs(buf,out);
|
||||||
}
|
}
|
||||||
|
@ -174,21 +188,29 @@ static void mi_strlcat(char* dest, const char* src, size_t dest_size) {
|
||||||
dest[dest_size - 1] = 0;
|
dest[dest_size - 1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mi_option_init(mi_option_desc_t* desc) {
|
static const char* mi_getenv(const char* name) {
|
||||||
desc->init = DEFAULTED;
|
if (_mi_preloading()) return NULL; // don't call getenv too early
|
||||||
// Read option value from the environment
|
|
||||||
char buf[32];
|
|
||||||
mi_strlcpy(buf, "mimalloc_", sizeof(buf));
|
|
||||||
mi_strlcat(buf, desc->name, sizeof(buf));
|
|
||||||
#pragma warning(suppress:4996)
|
#pragma warning(suppress:4996)
|
||||||
char* s = getenv(buf);
|
const char* s = getenv(name);
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
|
char buf[64+1];
|
||||||
|
strncpy_s(buf,64,name,64); buf[64] = 0;
|
||||||
for (size_t i = 0; i < strlen(buf); i++) {
|
for (size_t i = 0; i < strlen(buf); i++) {
|
||||||
buf[i] = toupper(buf[i]);
|
buf[i] = toupper(name[i]);
|
||||||
}
|
}
|
||||||
#pragma warning(suppress:4996)
|
#pragma warning(suppress:4996)
|
||||||
s = getenv(buf);
|
s = getenv(buf);
|
||||||
}
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mi_option_init(mi_option_desc_t* desc) {
|
||||||
|
if (!_mi_preloading()) desc->init = DEFAULTED;
|
||||||
|
// Read option value from the environment
|
||||||
|
char buf[64];
|
||||||
|
mi_strlcpy(buf, "mimalloc_", sizeof(buf));
|
||||||
|
mi_strlcat(buf, desc->name, sizeof(buf));
|
||||||
|
const char* s = mi_getenv(buf);
|
||||||
if (s != NULL) {
|
if (s != NULL) {
|
||||||
mi_strlcpy(buf, s, sizeof(buf));
|
mi_strlcpy(buf, s, sizeof(buf));
|
||||||
for (size_t i = 0; i < strlen(buf); i++) {
|
for (size_t i = 0; i < strlen(buf); i++) {
|
||||||
|
|
|
@ -3,30 +3,29 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <mimalloc.h>
|
//#include <mimalloc.h>
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
mi_stats_reset();
|
//mi_stats_reset();
|
||||||
void* p1 = malloc(78);
|
void* p1 = malloc(78);
|
||||||
void* p2 = malloc(24);
|
void* p2 = malloc(24);
|
||||||
free(p1);
|
free(p1);
|
||||||
p1 = malloc(8);
|
p1 = malloc(8);
|
||||||
char* s = strdup("hello\n");
|
//char* s = strdup("hello\n");
|
||||||
free(p2);
|
free(p2);
|
||||||
p2 = malloc(16);
|
p2 = malloc(16);
|
||||||
p1 = realloc(p1, 32);
|
p1 = realloc(p1, 32);
|
||||||
free(p1);
|
free(p1);
|
||||||
free(p2);
|
free(p2);
|
||||||
free(s);
|
//free(s);
|
||||||
mi_collect(true);
|
//mi_collect(true);
|
||||||
|
|
||||||
/* now test if override worked by allocating/freeing across the api's*/
|
/* now test if override worked by allocating/freeing across the api's*/
|
||||||
p1 = mi_malloc(32);
|
//p1 = mi_malloc(32);
|
||||||
free(p1);
|
//free(p1);
|
||||||
p2 = malloc(32);
|
//p2 = malloc(32);
|
||||||
mi_free(p2);
|
//mi_free(p2);
|
||||||
|
|
||||||
mi_stats_print(NULL);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <mimalloc.h>
|
#include <mimalloc.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
|
@ -22,15 +23,17 @@ public:
|
||||||
~Test() { }
|
~Test() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
//mi_malloc_override();
|
||||||
mi_stats_reset();
|
mi_stats_reset();
|
||||||
atexit(free_p);
|
atexit(free_p);
|
||||||
void* p1 = malloc(78);
|
void* p1 = malloc(78);
|
||||||
void* p2 = malloc(24);
|
void* p2 = _aligned_malloc(24,16);
|
||||||
free(p1);
|
free(p1);
|
||||||
p1 = malloc(8);
|
p1 = malloc(8);
|
||||||
char* s = mi_strdup("hello\n");
|
char* s = _strdup("hello\n");
|
||||||
free(p2);
|
_aligned_free(p2);
|
||||||
p2 = malloc(16);
|
p2 = malloc(16);
|
||||||
p1 = realloc(p1, 32);
|
p1 = realloc(p1, 32);
|
||||||
free(p1);
|
free(p1);
|
||||||
|
@ -40,11 +43,7 @@ int main() {
|
||||||
delete t;
|
delete t;
|
||||||
t = new (std::nothrow) Test(42);
|
t = new (std::nothrow) Test(42);
|
||||||
delete t;
|
delete t;
|
||||||
int err = mi_posix_memalign(&p1,32,60);
|
|
||||||
if (!err) free(p1);
|
|
||||||
free(p);
|
free(p);
|
||||||
mi_collect(true);
|
|
||||||
mi_stats_print(NULL); // MIMALLOC_VERBOSE env is set to 2
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue