In some languages (such as C), arrays seem very simple to me. When allocating memory for these, all you need to do is pick a starting point in memory and then allocate the next
dataTypeSize * arrayLength bytes as reserved. Retrieving items just means looking at the memory address
startPoint + (index * dataTypeSize).
How is the memory managed when you could at any time append add an item to the end, or prepend an item to the beginning? Do you need to redefine space in memory every time the size changes?