Matthew Parkinson
37afe9d079
Clang format
2019-04-29 11:02:47 +01:00
Matthew Parkinson
f88bcdbf58
Made alloc_chunk typed
...
Alloc_chunk now allocates and calls the constructor.
2019-04-29 11:02:47 +01:00
Matthew Parkinson
2d831920ea
Factored casting in external pointer calculation
2019-04-29 11:02:47 +01:00
Matthew Parkinson
a8618b0892
Use uintptr_t in signature for pagemap
...
We don't follow the pointers passed into the pagemap directly, but
instead use them to calculate indexs into the pagemap. Use uintptr_t
means it is easier to perform address arithmetic, and not have casts
back to void* everywhere.
2019-04-29 11:02:47 +01:00
Matthew Parkinson
47428a096c
Removing some casts and uses of void*
2019-04-29 11:02:47 +01:00
Matthew Parkinson
4faf9f3bee
Use fewer header files
...
Removing some includes to reduce the code that is dragged in.
2019-04-29 11:02:47 +01:00
David Chisnall
7f057f308f
Fix inverted logic in the type check.
2019-04-11 17:31:44 +01:00
David Chisnall
9b3641df91
Address Matt's review comments.
2019-04-11 17:08:16 +01:00
David Chisnall
785766b129
Move constants into the right file.
...
Document them while we're moving them.
2019-04-11 16:57:12 +01:00
David Chisnall
cd8ba18191
Delete some dead code that's difficult to use correctly.
2019-04-11 16:55:05 +01:00
David Chisnall
9d24f7e24f
Fix callers of renamed function.
2019-04-11 10:42:50 +01:00
David Chisnall
a64cc5562f
Remove indirection in the common case.
...
Rather than unconditionally storing a pointer to the pagemap and
initialising this with a global, we now provide a choice of three
compile-time options for how the pagemap should be accessed.
2019-04-11 10:33:52 +01:00
David Chisnall
29aa8ef67e
Give up on new making CI support recent clang-format.
...
Revert to 6.0 and use that locally to insert an extra blank line to make
CI happy...
2019-04-10 13:25:43 +01:00
David Chisnall
c673926d15
Add missing const.
...
No idea why this only raised an error with cl.exe, it was wrong on all
platforms.
2019-04-10 13:13:09 +01:00
David Chisnall
ad0a22e571
Add missing doc comments.
2019-04-10 12:49:02 +01:00
David Chisnall
2442dc4f3f
[NFI] clang-format
2019-04-10 12:43:04 +01:00
David Chisnall
d0fefb8641
Don't always refer to the global pagemap.
...
If you're creating a new allocator and the pagemap comes from a library
that exports the pagemap accessor function but not the pagemap symbol,
you need to be able to replace this.
2019-04-10 11:57:02 +01:00
David Chisnall
a93f43fd2f
Add some type safety to other pagemap accesses.
...
Introduce a descriptor for the pagemap config and check that the source
descriptor is compatible with the destination type.
2019-04-09 15:52:38 +01:00
rschust
51fbdf3a44
ZeroMem should not be a part of pal_consts.h
2019-04-09 13:56:22 +01:00
rschust
71900ef947
Created pal_consts.h. New exported functions are now prefixed with "snmalloc_".
2019-04-09 13:56:22 +01:00
rschust
f0d18760fe
Exporting the global pagemap and the default memory provider's reserve function in order to support shared allocators
2019-04-09 13:56:22 +01:00
David Chisnall
45a31e75d1
Add some comments.
2019-02-25 12:54:16 +00:00
David Chisnall
6a5359b177
Pull aligned allocation out of the PAL.
...
The PAL can now advertise that it supports aligned allocation. If it
does not, then the memory provider will do the alignment for it.
This change still leaves the PAL responsible for systematic testing, but
it should now be much easier to lift that out.
2019-02-25 12:54:16 +00:00
David Chisnall
d6e89b7c60
Fix Matt's code review comments.
2019-02-25 11:27:53 +00:00
David Chisnall
01bd77b356
Remove some ugly templated things.
...
Replace them with some very simple constexpr things. This is what the
code used to look like, but it appears that I fundamentally
misunderstood why it didn't work. This version should be a lot more
maintainable.
2019-02-25 11:27:53 +00:00
David Chisnall
4036e54879
[NFC] clang-format.
2019-02-25 11:27:53 +00:00
David Chisnall
1892538ad1
Clean up PAL feature detection API.
2019-02-25 11:27:53 +00:00
David Chisnall
5adba34d60
Make clang happy.
2019-02-25 11:27:53 +00:00
David Chisnall
a24e6270cc
Provide a generic PAL feature detection mechanism.
...
We can support up to 64 optional features, currently only one is used.
2019-02-25 11:27:53 +00:00
David Chisnall
80630a359f
Clean up interface to the low memory notifications.
...
- Rename MemoryProviderState to PAL to reflect what is now is.
- Hide calls to the PAL's low memory functions behind something that
returns a default value if they're not implemented.
2019-02-25 11:27:53 +00:00
David Chisnall
e2a12802d5
Hide the low memory notification PAL code.
2019-02-25 11:27:53 +00:00
David Chisnall
f6349092c9
Remove debugging define.
...
This was enabled so CI would run it. It probably should be enabled for
some testing, but via CMake, not like this.
2019-02-25 11:27:53 +00:00
David Chisnall
6af4c97726
Explicitly qualify a method.
...
Either clang or cl has a bug: cl accepts the unqualified (inherited)
method name, clang rejects it. Both accept the qualified name.
2019-02-25 11:27:53 +00:00
David Chisnall
71cfb6da1e
[NFC] clangformat
2019-02-25 11:27:53 +00:00
David Chisnall
e5d330ec7a
Fix the tests.
2019-02-25 11:27:53 +00:00
David Chisnall
66cec23b23
Initial cut at a lazy decommit strategy.
...
This does not deallocate memory until the OS tells us that we are short
on memory, then tries to decommit all of the cached chunks (except for
the first page, used for the linked lists).
Nowhere near enough testing to commit to master yet!
2019-02-25 11:27:53 +00:00
Matthew Parkinson
d588e8ecb1
Updated to match documentation.
2019-02-19 15:00:55 +00:00
Matthew Parkinson
aac2b9212e
Merge pull request #21 from plietar/smart-next
...
Place the next pointer at a different place on every object.
2019-02-19 09:04:23 +00:00
Paul Liétar
ffe496dd18
Address review comments.
2019-02-18 21:29:32 +00:00
Paul Liétar
4ac3421487
Place the next pointer at a different place on every object.
...
This limits the collision in cache buckets, especially for larger objects.
2019-02-18 14:22:50 +00:00
David Chisnall
c47eed1922
Tweaks to end bounds checking.
...
Introduce a `OnePastEnd` option for the pointer immediately after the
end of the allocation. This simplifies some of the logic in callers,
where they wants to say 'is base + length safe to use?'.
Also restructure some of the other logic somewhat.
2019-02-15 20:05:00 +01:00
Matthew Parkinson
5e149b083f
One more constexpr
2019-02-15 17:43:27 +00:00
Matthew Parkinson
8698f87018
Added some constexpr to some ifs.
2019-02-15 16:12:38 +00:00
Matthew Parkinson
ac8e5e4e5b
Fix comment to represent current PAL API.
2019-02-15 09:24:01 +00:00
Matthew Parkinson
adeecfb0f1
Added bug fix to alignment of using.
2019-02-14 20:08:04 +00:00
Paul Liétar
79b432ddab
Fix the condition on when to allocate a new block.
...
Previously we would pretty much always allocate a new block for each
allocator, making them 16MiB aligned.
2019-02-12 12:47:22 +00:00
Matthew Parkinson
731757b29c
Merge pull request #13 from Microsoft/matt-refactor
...
Simplification around remote allocation
2019-02-06 11:25:07 +00:00
Matthew Parkinson
f3897dd3e0
Code review feedback.
2019-02-05 16:57:09 +00:00
Matthew Parkinson
83c55fe5da
Simplify remote allocator.
...
Don't store the sizeclass, as we can find it easily, and already are
going to touch though cache lines in the common case.
2019-02-05 13:27:19 +00:00
Matthew Parkinson
122a5de811
Refactor code to correctly handle low bits of allocator ID.
2019-02-05 13:11:55 +00:00