www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - [unsigned] No, you can't address full address space in D

reply Kagamin <spam here.lot> writes:
It doesn't even compile: http://dpaste.dzfl.pl/ec0f5183e42e
Feb 20 2016
next sibling parent reply Chris Wright <dhasenan gmail.com> writes:
On Sat, 20 Feb 2016 17:04:11 +0000, Kagamin wrote:

 It doesn't even compile: http://dpaste.dzfl.pl/ec0f5183e42e
Check the error. Add a `cast(size_t)` in there. Try again. That's still doomed to failure. You're not leaving space for the stack (which has preallocated address space) or application binary (which is memory mapped from the file and takes up address space). You're using the garbage collector, which has to allocate its own internal data structures somewhere. If you subtract those from your allocation request, you still won't see much success. There's no guarantee where in memory those items will be allocated, and if your system has ASLR turned on by default, it's even less predictable. If you tried a similar thing in C, you'd see the same problems.
Feb 20 2016
parent reply Steven Schveighoffer <schveiguy yahoo.com> writes:
On Saturday, 20 February 2016 at 17:21:42 UTC, Chris Wright wrote:
 That's still doomed to failure. You're not leaving space for 
 the stack (which has preallocated address space) or application 
 binary (which is memory mapped from the file and takes up 
 address space). You're using the garbage collector, which has 
 to allocate its own internal data structures somewhere.
Let's not forget that you need 18 exabytes of ram too. And you want it initialized? That's going to take a while ;) -Steve
Feb 20 2016
parent Chris Wright <dhasenan gmail.com> writes:
On Sat, 20 Feb 2016 18:07:59 +0000, Steven Schveighoffer wrote:

 On Saturday, 20 February 2016 at 17:21:42 UTC, Chris Wright wrote:
 That's still doomed to failure. You're not leaving space for the stack
 (which has preallocated address space) or application binary (which is
 memory mapped from the file and takes up address space). You're using
 the garbage collector, which has to allocate its own internal data
 structures somewhere.
Let's not forget that you need 18 exabytes of ram too.
Point. The GC uses calloc, which does happen to complain when I ask for vast amounts of memory. There are other ways of requesting address space, though, such as mmap(2).
Feb 20 2016
prev sibling parent rsw0x <anonymous anonymous.com> writes:
On Saturday, 20 February 2016 at 17:04:11 UTC, Kagamin wrote:
 It doesn't even compile: http://dpaste.dzfl.pl/ec0f5183e42e
This looks like it's a limit purely on the interface for allocating arrays from the GC. i.e, ubyte* ptr; ubyte arr = ptr[0 .. size_t.max]; compiles just fine
Feb 20 2016