> Date: Wed, 1 Apr 2020 07:42:53 -0700 > From: Jason Thorpe <thor...@me.com> > > If PAGE_SIZE is ostensibly a vsize_t / size_t, why not define it as (1U << > PAGE_SHIFT)?
Without running the following program, can you tell me what it will print? It might work to define PAGE_SIZE to be ((size_t)1 << PAGE_SHIFT) but the consequences are not immediately clear to me (and might be tricky on, e.g., i386pae). #include <inttypes.h> #include <stdint.h> #include <stdio.h> #define PAGE_SIZE_S (1 << 12) #define PAGE_SIZE_U (1u << 12) uint64_t addr = 0x7fffffff01234567; int main(void) { printf("%"PRIx64"\n", addr & ~(PAGE_SIZE_S - 1)); printf("%"PRIx64"\n", addr & ~(PAGE_SIZE_U - 1)); fflush(stdout); return ferror(stdout); }