> 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);
}

Reply via email to