> On Apr 4, 2017, at 10:07 PM, Jürgen Hestermann <juergen.hesterm...@gmx.de> 
> wrote:
> 
> Am 2017-04-04 um 15:40 schrieb Ryan Joseph:
> > I’m glad I asked because of arrays of pointers is bad news for performance.
> 
> I don't think that you will notice a performance issue with dynamic arrays 
> (though it highly depends on the sizes and levels you use...)

As I understand it accessing continuous blocks of memory in tight loops 
increases the chance that it will be in cache L1/L2 cache. It’s probably 
trivial for my use but I’m making some game code which is highly performance 
sensitive and I’m trying to learn some best practices when writing data types. 
I watched a couple presentations from a compiler engineer from Google (works on 
clang and LLVM) that explained how this worked and it’s something worth 
learning and paying attention to imo.

> 
> > Does SetLength on a single level dynamic array not even allocate a 
> > continuous block of memory?
> 
> Yes, it does (as explained in all the other mails).
> A (dynamic) array of integer will be allocated as a single block by SetLength.
> So if you only have one level of a dynamic array as in
> 
> var MyArray : array of integer;
> 
> then SetLength(MyArray,1000) will allocate a single block of 1000 integers.
> But with
> 
> var MyArray : array of array of integer;
> 
> SetLength(MyArray,1000);
> 
> will allocate a single block of 1000 pointers (to an array of integer each).
> Then, SetLength(MyArray[0],1000) will allocate one (!) block of 1000 integers.
> SetLength(MyArray[1],1000) will allocate another block of 1000 integers and 
> so on….

I was allocating using SetLength(MyArray, 3, 3, 3) for a 3x3x3 matrix for 
example. Maybe it depends on the memory manager and the state of heap but if 
you called early in the programs execution it should be allocate all that 
memory in one block I would think. 

Another bottle neck of not using arrays of pointers is you need to perform some 
math if you want to know which element 2,2,2 is. I’m probably getting in over 
my head now. :)


Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to