Now I have an algorithm for dynamically allocating memory on an array:
Yes, List
uses a T[]
internally to hold your objects.
As far as I remember from the .NET 4.0 source code, before adding new objects, it ensures that the array has enough capacity to hold the new number of objects. If the existing array cannot hold the new number of objects, it is replaced by a new array of double the size and all the objects and all the existing references are copied to the new array.