daan
25246070ae
fix double free check in secure = 4 mode; inline _mi_ptr_cookie
2019-10-19 08:34:18 -07:00
daan
2affdbbd2e
stronger secure mode when defining MI_SECURE=4: checks for double free, corrupted free list, and invalid pointer frees. Performance is impacted but not too much -- more perf testing is needed
2019-10-18 18:11:04 -07:00
daan
4b15e2ed97
merge from dev
2019-10-17 18:24:35 -07:00
daan
fdfa6ed260
fix warnings at high warning level in msvc
2019-10-17 16:56:57 -07:00
daan
5de851a84d
update page_flags to have more portable definition
2019-10-17 16:48:16 -07:00
daan
26c27fbf58
use uint8_t bit fields, and improve portability of page_flags type
2019-10-17 12:07:26 -07:00
Johannes Schindelin
559688ec64
Suppress warning about unnamed struct
...
This prevents MSVC complaining with
warning C4201: nonstandard extension used: nameless struct/union
The struct might seem unnecessary to the occasional reader (it did seem
so to this commit's author), but it is not! It is required to align the
fields to a boundary, which is verified by the test suite. Removing that
"unnecessary" `struct` results in this failure:
1: Test command: mimalloc-test-api
[...]
1: test: malloc-zero... mimalloc: assertion failed: at src/page.c:591, mi_page_init
1: assertion: "!mi_page_has_aligned(page)"
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-10-17 20:43:18 +02:00
Johannes Schindelin
e747a6f3a6
Use unsigned
for bit-field variables
...
It is actually non-standard to use `bool` with a bit-field quantifier,
and VS 2019 complains about this.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-10-17 20:43:18 +02:00
daan
f3a162f095
pick better umul_overflow variant based on size_t size
2019-10-17 09:52:10 -07:00
daan
4609537b8a
pick better umul_overflow variant based on intptr size
2019-10-17 09:47:12 -07:00
Daan Leijen
114d05cd76
bump to version 1.1
2019-10-07 09:54:23 -07:00
daan
60efb62155
make secure a build option only
2019-09-17 17:31:42 -07:00
daan
33f4ec4ac6
put new-delete overrides in separate header file
2019-09-15 19:19:00 -07:00
daan
6896408ab1
fix definition of mi_recalloc_tp
2019-09-11 20:49:18 -07:00
daan
24777f6a91
limit aligned allocation to power-of-two alignment
2019-09-11 17:49:28 -07:00
Daan Leijen
1909cfb346
refine mi_os_good_alloc_size and use it for huge pages (to ensure realloc is bounded as in #153
2019-09-10 13:26:51 -07:00
daan
ce81af1119
use mi_is_power_of_two when possible (pr #118 )
2019-09-09 08:12:50 -07:00
daan
23155c5d71
add recursion guard to deferred callback
2019-09-09 08:02:41 -07:00
daan
3bbc047ba6
reserve huge pages returns actual number of pages reserved
2019-09-04 12:26:02 -07:00
daan
6c43ae2bde
add later thread-done invokation; add mi_is_redirected call
2019-09-04 12:00:41 -07:00
daan
a6a956c589
add back zero initialized re-allocation
2019-09-03 10:57:39 -07:00
daan
7a91368108
pass page to block_zero_init and extend to block_size
2019-09-03 10:11:24 -07:00
daan
d1bd1644d5
support zero-initialized memory detection
2019-09-02 13:16:52 -07:00
daan
d6e35ffd83
Merge branch 'dev' into dev-exp
2019-09-02 10:10:08 -07:00
daan
8ef8ddecc5
Merge branch 'master' into dev
2019-09-02 09:53:34 -07:00
Carlo Marcelo Arenas Belón
0e35ec3879
avoid deadlock with OpenBSD
2019-09-01 01:06:01 -07:00
daan
f35f643508
merge from dev
2019-08-29 09:52:22 -07:00
daan
7bf12c7b5f
make output function configurable; remove <stdio.h> from standard includes
2019-08-29 09:42:50 -07:00
daan
4819d3f78f
expose mi_stats_merge function
2019-08-29 09:01:00 -07:00
daan
d381fcd9fa
rename lazy to eager_commit_delay
2019-08-28 12:09:23 -07:00
daan
9af51506a6
track commit and is_large status more precisely
2019-08-28 11:58:30 -07:00
daan
23b5593af6
Merge branch 'dev' of https://github.com/microsoft/mimalloc into dev
2019-08-27 16:40:47 -07:00
David Carlier
b72a2d9659
macOS: anonymous page ID make it as env var.
2019-08-27 19:17:41 +01:00
daan
db8d443ae6
track more precisely if memory is fixed or committed
2019-08-26 22:45:26 -07:00
daan
25dca38ef9
merge from dev-win
2019-08-26 12:47:16 -07:00
daan
f0a12699c2
remove atomic_iread
2019-08-26 12:42:25 -07:00
daan
a654732d99
merge from dev new atomics
2019-08-26 12:30:03 -07:00
daan
2c19388bcf
initialize mimalloc options at process load
2019-08-26 11:44:41 -07:00
daan
7ce9c02fd4
make cas weak use release memory order; improve free assembly
2019-08-26 08:20:26 -07:00
daan
5c7c106d62
strengthen some atomic operations for weak memory models
2019-08-26 08:11:58 -07:00
daan
e8664001f7
Use standard _Atomic declarations and clean up atomic operations
2019-08-25 22:59:12 -07:00
daan
b0e38d5697
merge from dev-win
2019-08-25 13:12:57 -07:00
daan
23c35f4aba
merge from dev
2019-08-25 13:07:07 -07:00
daan
b86c851cca
put segment cache behind an option and disable by default
2019-08-25 12:35:14 -07:00
daan
a431d80fc3
better object sizes for large objects
2019-08-25 10:20:03 -07:00
daan
6f5492cef8
enable initial lazy commit and optional decommit to reduce commit charge with many threads
2019-08-24 15:00:55 -07:00
daan
612b2cc9b7
clean up segment slice handling
2019-08-24 12:20:32 -07:00
daan
cce38bc147
more conservative setting to avoid internal fragmentation
2019-08-24 07:32:23 -07:00
daan
082f012a91
merge from dev-win
2019-08-23 21:56:28 -07:00
daan
d3224d0bba
Merge branch 'dev' into dev-win
2019-08-23 21:42:32 -07:00
daan
6c6fcad242
remove threadid from pages and keep page flags separate (cherry picked)
2019-08-23 21:42:24 -07:00
daan
15552eba79
ensure volatile declaration for abandoned_next field
2019-08-23 21:39:27 -07:00
daan
acde83543f
remove threadid from pages and keep page flags separate
2019-08-23 14:08:00 -07:00
daan
b511309709
ensure volatile declaration for abandoned_next field
2019-08-23 13:44:43 -07:00
daan
5c912f16d4
merge from remote
2019-08-21 11:35:09 -07:00
daan
a3c4b1c95b
merge from dev-win
2019-08-21 11:18:05 -07:00
daan
71121a7457
Merge branch 'dev-win' into dev-exp
2019-08-21 11:12:25 -07:00
daan
e7bd8c5d14
merge with dev-win
2019-08-21 11:11:40 -07:00
Daan Leijen
eb25093b13
fix mi_cdecl for older clang versions
2019-08-21 09:40:57 -07:00
Daan Leijen
12257e5bc1
fix thread-id reset on page abandonment
2019-08-21 08:09:28 -07:00
Daan Leijen
cc6d14c55b
fix thread-id reset on page abandonment
2019-08-21 08:06:40 -07:00
daan
cd52d0a6d9
merge dev-win
2019-08-20 17:31:46 -07:00
daan
86d4ded831
Merge branch 'dev' into dev-exp
2019-08-20 08:27:46 -07:00
daan
a5071eb510
Merge branch 'dev' into dev-win
2019-08-20 07:50:03 -07:00
daan
03d994648a
better option interface: option_enable, option_disable, and option_set_enabled
2019-08-20 07:47:50 -07:00
daan
7a2e0df5ea
merge from dev
2019-08-20 07:37:46 -07:00
daan
d52e4039b6
remove the reset_discards option
2019-08-20 07:06:11 -07:00
daan
79487dbedf
add checks for right option order
2019-08-20 06:58:51 -07:00
daan
05631ebfc4
Merge branch 'dev' into dev-win
2019-08-19 21:23:04 -07:00
daan
13ef8a049b
allow larger large objects to better use segment space
2019-08-19 21:22:09 -07:00
daan
770e752578
fix parameter order on mul_overflow to fix static analysis warnings (pr #125 )
2019-08-19 19:15:04 -07:00
daan
228c5e5507
allow larger large objects to better use segment space
2019-08-19 18:20:51 -07:00
daan
0e639addb0
add environment option to reserve huge pages upfront
2019-08-19 14:14:50 -07:00
daan
5b2f4184b3
Merge branch 'dev' into dev-exp
2019-08-19 11:37:39 -07:00
daan
42dedb00ec
initial implementation of mi_os_reserve_huge_pages
2019-08-19 11:10:06 -07:00
Daan Leijen
fb12f298ca
merge from dev-win, fix small object size check
2019-08-16 19:14:08 -07:00
Daan Leijen
367fb046ec
Merge branch 'dev' into dev-win
2019-08-16 18:40:56 -07:00
Daan Leijen
069c26dbab
fix small object size check in mi_segment_page_alloc
2019-08-16 18:40:30 -07:00
Daan Leijen
91497e8d2d
whitespace and warning fix
2019-08-16 17:49:49 -07:00
daan
a0b4ac2f66
new segment allocation; good results with Qas service
2019-08-15 23:19:52 -07:00
daan
f2ba95bc64
first working version of new segment allocation
2019-08-15 22:00:42 -07:00
daan
6ee248b012
wip: fixing bugs in new segment allocation
2019-08-15 14:40:15 -07:00
daan
f2bafbc57f
wip: new segment allocation
2019-08-15 11:49:56 -07:00
daan
bbd81bbbd1
wip: new segment allocation with flexible large objects
2019-08-15 00:46:45 -07:00
daan
6d11e59250
fix to avoid potential linear behavior in page collect
2019-08-14 07:46:38 -07:00
daan
f35c2c5201
improve message printing from redirection module
2019-08-11 16:38:58 -07:00
daan
0fd898315c
per thread region search index
2019-08-11 12:15:13 -07:00
daan
2e924150ae
further layout improvement for msvc code generation
2019-08-11 11:30:24 -07:00
daan
7b105c4810
improve layout of page for x64
2019-08-11 10:31:00 -07:00
daan
dbe010f2d4
add huge and giant stats; increase bins
2019-08-10 20:51:37 -07:00
daan
737b05cc25
remove unused fields from OS thread local data
2019-08-10 17:50:27 -07:00
daan
ed785253bf
restructure the page flags to use explicit masks
2019-08-10 17:48:00 -07:00
daan
74a5c17178
update order of options; make eager_region_commit 0 on windows by default
2019-08-10 15:44:55 -07:00
daan
2fee6f98d7
Merge branch 'master' into dev
2019-08-10 15:23:43 -07:00
daan
b1938530af
fix comment
2019-08-09 14:31:45 -07:00
daan
7b16aa9302
remove accidental commit of different size bins experiment
2019-08-09 11:22:38 -07:00
daan
442bad9190
add good-fit for allowing larger blocks in smaller segments
2019-08-09 11:18:38 -07:00
daan
5e56b40fe6
improve page flags handling
2019-08-08 17:18:49 -07:00
daan
6596e970a5
move in_full and has_aligned into page threadid for a single test in mi_free
2019-08-08 15:23:18 -07:00
daan
55778d2fe4
improved stats
2019-08-08 11:36:13 -07:00
daan
189ad0f81d
small optimizations, use bitwise aligne
2019-07-23 15:00:13 -07:00
daan
66b8c37ab3
ensure C++ compilation on windows
2019-07-23 15:00:13 -07:00
daan
219d46ff0c
update test files and overriding
2019-07-23 15:00:13 -07:00
daan
6d9fab5af4
trailing id after #endif
2019-07-23 15:00:13 -07:00
Jim Huang
b5e26bedb1
Enforce strict include-what-you-use policy
...
The include-what-you-use (IWYU) policy is beneficial to faster
compilation and fewer recompilations. Many build tools, such as GNU make,
provide a mechanism for automatically figuring out what .h files a .cc
file depends on. These mechanisms typically look at #include lines. When
unnecessary #includes are listed, the build system is more likely to
recompile in cases where it is not necessary.
With the enforcement, header file <include/mimalloc.h> no longer
includes <stdlib.h>.
Reference:
https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/WhyIWYU.md
2019-07-23 14:59:57 -07:00
Jim Huang
8dba36bcec
Use checked unsigned multiplication extension of GCC/Clang
...
Most processors have carry flags which they set on addition overflow, so
it is a good idea to access them whenever possible. Most of them also
have widening multiply instructions that can be used to detect overflow
of the non-widening version. Both GCC and Clang offer a way to detect an
overflow for security critical applications.
Reference:
https://clang.llvm.org/docs/LanguageExtensions.html#checked-arithmetic-builtins
2019-07-23 14:59:49 -07:00
Daan
ade118e23d
Merge pull request #88 from jserv/gcc-builtin-umul-overflow
...
Use checked unsigned multiplication extension of GCC/Clang
2019-07-22 09:28:38 -07:00
daan
81a7ae33e7
fix order of options
2019-07-19 09:26:22 -07:00
daan
33aa5d92fa
fix to overrides on windows
2019-07-18 21:20:18 -07:00
daan
93c8a5b693
full overriding api supported
2019-07-18 21:12:40 -07:00
daan
306a542336
add mimalloc-override header file and use C++ compilation with msvc
2019-07-18 20:28:29 -07:00
daan
c228ecefd8
update for new dynamic direction on windows 64-bit
2019-07-18 18:59:32 -07:00
daan
f646cc925d
add is_in_heap_region function
2019-07-17 15:37:36 -07:00
daan
72d8608333
avoid thread over-allocation on initial region allocations
2019-07-15 17:35:43 -07:00
daan
7ea9cf8d1f
add region collection
2019-07-15 14:53:03 -07:00
daan
08e0f14c2a
document experimental options
2019-07-15 14:32:54 -07:00
Jim Huang
afd981d008
Use checked unsigned multiplication extension of GCC/Clang
...
Most processors have carry flags which they set on addition overflow, so
it is a good idea to access them whenever possible. Most of them also
have widening multiply instructions that can be used to detect overflow
of the non-widening version. Both GCC and Clang offer a way to detect an
overflow for security critical applications.
Reference:
https://clang.llvm.org/docs/LanguageExtensions.html#checked-arithmetic-builtins
2019-07-16 05:28:59 +08:00
Daan
ad45dbf0e5
Merge pull request #32 from jedisct1/wasm
...
Port to WebAssembly
2019-07-15 11:03:46 -07:00
daan
08c873c250
Merge branch 'dev' into dev-exp
2019-07-14 20:35:01 -07:00
daan
461b8aed80
more complete C++ support for compliance and performance
2019-07-14 19:56:33 -07:00
Frank Denis
9129ab0f64
Port to WebAssembly
2019-07-15 02:22:41 +02:00
daan
8dc0b5345b
Merge branch 'dev' into dev-exp
2019-07-14 16:50:38 -07:00
daan
49ceb4d018
refactor delayed_free code
2019-07-14 16:48:53 -07:00
daan
5ad2effb39
use standard compliant compilation of the thread_free atomic field
2019-07-14 16:20:27 -07:00
Daan
b09af48a68
Merge pull request #93 from JulianATA/dev-exp
...
Fix typo numbes -> number
2019-07-14 14:33:37 -07:00
daan
84a292538c
merge with medium pages
2019-07-12 20:39:29 -07:00
daan
a927c07de9
merge medium pages
2019-07-12 20:27:56 -07:00
daan
42cf5e1580
reintroduce support for medium size pages
2019-07-12 20:11:39 -07:00
daan
8a6b474fa0
merge from dev
2019-07-11 16:32:11 -07:00
daan
a932e43650
experiment with larger small pages
2019-07-11 15:44:37 -07:00
daan
9e9208eae8
Merge branch 'dev' into dev-win
2019-07-11 15:22:09 -07:00
daan
1fdb4b288f
more eager handling of non-local frees
2019-07-11 15:21:57 -07:00
daan
6deea16d2d
add segment count to internal statistics
2019-07-10 19:54:46 -07:00
daan
224951695a
enable non eager commit
2019-07-10 07:24:56 -07:00
daan
46a9e51f74
enable non eager-commit flag
2019-07-10 07:17:21 -07:00
daan
3192ca4682
merge with dev-win
2019-07-09 23:34:17 -07:00
daan
3009a7b1fe
support non- eager_commit; on larson reduces commit charge 10x, but other benchmarks often see no improvement
2019-07-09 21:34:56 -07:00
daan
0314373d93
add reset_decommit, reset_discard options; maintain more statistics
2019-07-09 20:24:00 -07:00
Julian Fang
5928f12b15
Fix typo numbes -> number
2019-07-10 08:38:58 +08:00
daan
35b590de21
Merge branch 'dev' into dev-exp
2019-07-09 15:12:18 -07:00
daan
8ef37e6c0b
update atomic exchange memory model annotations for unix
2019-07-09 14:56:43 -07:00
daan
129149977d
Merge branch 'dev' into dev-exp
2019-07-08 17:45:04 -07:00
daan
8203f3dcfa
add full heap aligned allocation api (issue #52 ); remove rezalloc (issue #63 ); add mi_version
2019-07-08 17:17:07 -07:00
daan
493dfc4b82
merge with dev
2019-07-08 15:42:42 -07:00
daan
56bdb2c2f3
add more const declarations (pr #79 )
2019-07-08 12:00:59 -07:00
daan
7f0137a617
Fix compilation error with MSVC C++
2019-07-07 21:59:53 -07:00
daan
7e743dfb58
fix C++ compilation warnings with VisualStudio 2017
2019-07-07 18:52:12 -07:00
daan
c3528203b5
fix compilation with C++, fix overrides in C++ to adhere to the spec (issue #26 )
2019-07-07 18:11:21 -07:00
daan
dd59a917ce
Expose mi prefixed public standard implementations of various posix, unix, and c++ allocation functions. See issue #75
2019-07-07 13:44:33 -07:00
daan
983c96a238
Merge branch 'dev' into dev-exp
2019-07-04 14:46:53 -07:00
daan
6abdc5f5a3
do not enable verbose by default in the debug build; add trace messages for verbose level 2
2019-07-04 09:28:22 -07:00
daan
663769c512
merge dev branch
2019-07-03 18:12:55 -07:00
daan
5c0ffe9865
merge back changes to OS module from 'dev-exp'
2019-07-02 17:17:03 -07:00
daan
8cb36c62e6
merge with dev branch
2019-07-02 16:44:35 -07:00
daan
aeff1db32b
Fixing interpose on macOS
2019-07-02 12:49:28 -07:00
daan
d35fc6cdc4
PR#66 by kickunderscore to ensure consistent small block alignment
2019-07-02 08:46:50 -07:00
daan
06bcea1761
Initial commit of separate memory region layer and improved large OS pages support, see 'memory.c'
2019-07-02 07:23:24 -07:00
daan
d6901558cd
enable large OS page support on Windows
2019-06-28 22:35:57 -07:00
daan
12d756e7b2
fix page count of heap when absorbing
2019-06-27 13:32:44 -07:00
Julian Fang
c19d3a27a8
Remove underscore prefixes to match c lanuguage standard
2019-06-26 12:57:13 +08:00
daan
fac0d4b409
fix passing void as argument
2019-06-25 20:06:34 -07:00
daan
654bcd7049
Merge branch 'master' into dev
2019-06-25 19:57:45 -07:00
daan
9ba53d3e2b
fix missing prototype for heap_alloc_small
2019-06-25 19:57:21 -07:00
Frank Denis
236cd2e65c
fn() is not a valid C prototype
2019-06-25 12:16:36 +02:00
daan
c1226611c6
Merge branch 'master' into dev
2019-06-24 18:13:04 -07:00
daan
a16d95375f
remove lock code from atomics (as it is unused)
2019-06-24 17:54:41 -07:00
Daan
8e244f6616
Merge pull request #33 from dscho/fix-prototypes
...
Use `void` in the signatures of parameter-less functions
2019-06-24 17:49:50 -07:00
Johannes Schindelin
464efa80b0
Fix prototypes of parameter-less functions
...
GCC does want to complain about parameter-less functions declared
without the recommended `void` as parameter list.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2019-06-24 17:03:33 +02:00
daan
cd7aa0ce83
improve handling of huge pages in the cache
2019-06-23 23:15:42 -07:00
daan
43568fa422
ensure huge pages are part of the segment cache to avoid mmap calls
2019-06-23 21:37:43 -07:00
Jim Huang
a667971cbf
Apple rebrands "OS X" as "macOS"
...
In 2012, with the release of OS X 10.8 Mountain Lion, the name of the
system was shortened from Mac OS X to OS X. In 2016, with the release
of macOS 10.12 Sierra, the name was changed from OS X to macOS to
streamline it with the branding of Apple's other primary operating
systems: iOS, watchOS, and tvOS.
Reference: https://en.wikipedia.org/wiki/MacOS
2019-06-24 10:15:50 +08:00
Daan
fab7329c7a
Merge pull request #24 from jserv/clarify-license
...
Clarify top-level license file
2019-06-23 10:47:38 -07:00
Daan
902b8ba639
Merge pull request #31 from jserv/fix-typo-again
...
Fix typo in comments
2019-06-23 10:46:00 -07:00
Jim Huang
78c7a1f349
Fix typo in comments
2019-06-24 01:40:28 +08:00
Daan
f3cea2c22a
Merge pull request #19 from jserv/arm-aarch64-tls-register
...
Support ARM/Aarch64 TLS register fastpath
2019-06-23 10:39:28 -07:00
Jim Huang
b1d299b35b
Clarify top-level license file
...
To be consistent with other Microsoft open source projects, each source
file points to the file "LICENSE" in top-level directory.
2019-06-23 19:53:34 +08:00
Jim Huang
77991fccee
Implement ARM/Aarch64 atomic_yield fastpath
2019-06-23 16:53:49 +08:00
Jim Huang
3841b32f9d
Support ARM/Aarch64 TLS register fastpath
...
Tested with Ubuntu Linux 18.04 LTS running on Marvell/Cavium ThunderX,
which consists of Armv8 based processors.
2019-06-23 16:30:20 +08:00
Daan Leijen
79bfe52255
fix accidental delete
2019-06-22 11:50:03 -07:00
Daan Leijen
e52ca3bfa9
possible fix for ARM linux compilation
2019-06-22 11:33:18 -07:00
Sungmann Cho
def97b0fd1
Fix spelling errors
...
aligment -> alignment
purgable -> purgeable
thead -> thread
2019-06-23 00:09:11 +09:00
daan
26a874eb3f
initial checkin
2019-06-19 16:26:12 -07:00