16MB static arrays again...

Tomer Filiba via Digitalmars-d digitalmars-d at puremagic.com
Wed Aug 24 02:08:16 PDT 2016


On Wednesday, 24 August 2016 at 08:34:24 UTC, rikki cattermole 
wrote:
> You're welcome to fix optlink 
> https://github.com/DigitalMars/optlink
> Or write a whole new linker.
>
> Of course there is no reason to not change this for -m32mscoff 
> and -m64 on Windows at least that I am aware of.

I'm running on linux with gold linker. No such issues. But the 
point is totally different -- if it's a linker issue, let the 
linker fail. Not the compiler.

Anyway, #FML:

struct BigArray(T, size_t N) {
     mixin((){
         enum arraySizeLimit = 16*1024*1024 - 1;
         enum numFullChunks = (T.sizeof * N) / arraySizeLimit;
         enum elemsPerFullChunk = arraySizeLimit / T.sizeof;
         enum elemsPerLastChunk = N - numFullChunks * 
elemsPerFullChunk;
         static assert (elemsPerLastChunk <= elemsPerFullChunk);

         string s = "";
         size_t covered;
         foreach(i; 0 .. numFullChunks) {
             s ~= "T[%s] arr%s;\n".format(elemsPerFullChunk, i);
         }
         s ~= "T[%s] arr%s;\n".format(elemsPerLastChunk, 
numFullChunks);
         return s;
     }());

     enum length = N;

     @property T* ptr() {
         return arr0.ptr;
     }

     @property T[] slice() {
         return arr0.ptr[0 .. N];
     }
     alias slice this;
}


More information about the Digitalmars-d mailing list