lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


AMD64 is architecturally limited to 56-bit physical addresses and 48-bit sign extended virtual addresses at present.

Individual microarchitectures must all support the 48-bit virtual addressing, but can have smaller physical address spaces. Some Atoms, for example, only have 32-bit physical addressing support.
17 June 2013 02:37

My understanding is that this limitation is on virtual addresses
(physical addresses are often even _more_limited).

-miles

17 June 2013 00:02
Thats physical addresses .. I think the poster was talking about virtual addresses (that is, before the virtual address translation).

--Tim



16 June 2013 08:14
Coda Highland wrote:


The hardware itself is physically limited to 48-bits.  Each page is 4kB, plus there are 4 layers of page tables, bringing the total up to 48 bits.

The processors throw an exception on a memory access if bits 63-48 don't match bit 47.

This is all baked into silicon
16 June 2013 07:53
On Sat, Jun 15, 2013 at 10:35 PM, Miles Bader <miles@gnu.org> wrote:
Coda Highland <chighland@gmail.com> writes:
The problem is that on modern OSes, you can't assume that you can
fit a 64-bit pointer in 48 bits.
My impression was that current implementations of the x86-64
architecture only use 48 bits of addresses, requiring the upper 16
bits to be identical.  Has this changed with very recent
implementations?
Unless I'm wrong, ASLR isn't restricted to 48 bits. Virtual memory
allocation can use whatever addresses it wants.

This is (part of) why LuaJIT demands to use the low 2GB.
Yeah the 2GB limitation is a huge lose... but that's obviously a lot
more restrictive than necessary...
Well, there are ways around it in LuaJIT.

/s/ Adam

16 June 2013 06:35
Coda Highland <chighland@gmail.com> writes:
The problem is that on modern OSes, you can't assume that you can
fit a 64-bit pointer in 48 bits.
My impression was that current implementations of the x86-64
architecture only use 48 bits of addresses, requiring the upper 16
bits to be identical.  Has this changed with very recent
implementations?

This is (part of) why LuaJIT demands to use the low 2GB.
Yeah the 2GB limitation is a huge lose... but that's obviously a lot
more restrictive than necessary...

-miles