druntime's PAGESIZE
Jacob Carlborg
doob at me.com
Sun Nov 1 13:09:48 UTC 2020
On 2020-10-31 20:06, Denis Feklushkin wrote:
> Looks like some of these values are redundant:
>
> src/rt/lifetime.d
> 31: PAGESIZE = 4096,
>
> src/gc/pooltable.d
> 181: enum PAGESIZE = 4096;
>
> src/gc/impl/conservative/gc.d
> 1133:{ PAGESIZE = 4096,
>
> This is correct? Which ones are related to each other? Which ones can be
> freely changed so that nothing (silently) breaks?
These are not correct. When I ported D to iOS I had to deal with this.
The page size on iOS (and derived platforms) is 16K. It did change it in
a few places where it broke the unit tests (or otherwise failed). I
added two new symbols to `pageSize` and `minimumPageSize` [1]. The
difference is that `minimumPageSize` is a compile time known value and
might not be correct. `pageSize` is a runtime value which is initialized
early in the startup phase. It's always correct since it gets the page
size from the OS. `minimumPageSize` is discouraged, we might remove it.
I did a search through druntime and Phobos for the value `4096` and it
appears quite a lot. I don't know how many of these values have to match
the page size (i.e. for correctness) how many of these should ideally
match the page size (i.e. for performance) or how many of these refer to
something else (or it won't matter for performance or correctness).
I fixed all the places that was required to get the unit tests in
druntime and Phobos to pass. If that means we're all good (at least for
correctness) or that we don't have enough unit test coverage, I don't know.
[1]
https://github.com/dlang/druntime/blob/4d68a910d74b3156b350701c08a97cf587da887a/src/core/memory.d#L181-L250
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list