Re: 32 bit pointers on X86_64 architecture

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

 




On Jun 24, 2008, at 12:49 PM, John Fine wrote:
<snip>


I'd like to have 64 bit code, but for a specific library I'm writing cache behaviour would improve if pointers were smaller. Pointers to code would stay at 8 bytes.
I can't tell whether you are asking for more than would be practical without changing GCC itself.

I don't think it is implemented, but it is certainly within the capabilities of the compiler/linker combo.

What I had in mind was to have pointers to just a few specific data types be 32 bit and in all the source code accessing those data types I would need to declare pointers as xxx_ptr instead of xxx*

Each xxx would then be given a fixed (source code) assignment to one of a few pools, and each pool would be allocated 4GB of virtual address space at program startup (which doesn't become actual virtual memory until used).

Then you need appropriate override of new (I don't know those details myself without a little research) to get xxx object allocated into the pools and of course the source code must never use xxx_ptr pointing to and xxx objects allocated on the stack (function locals).

I'm fine with overriding new, but this doesn't accomplish much: pointers would still be 8 bytes. Clearly you could store the 32 lsbs and recreate the full pointer
before dereferencing it, but it is not what I'm after.

If GCC dowsn't support this mode (and I couldn't find anything in the documentation)
How could it? Even if you force the heap to be contained that way, what about the stack and static memory? It would be very hard to force all those together into one 4GB area.

Well, stack and static memory are laid out by the linker, so a modified linker script would do.

I'm thinking about using the linker scripts for forcing all data/ heap to be in 2Gb
Stack as well?

Sure. Although in my specific case I could live without: most user code would live
in user-level threads whose stacks are actually heap-allocated.
There's only one corner case if the user decides to provide his own main(): that would
use the machine stack.

<snip>

Thanks,

	Maurizio



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux