Because memory allocation can be expensive and cause run-time performance to suffer on a frame by frame basis. Often we also know our data, and can preallocate or recycle objects to avoid dynamic memory allocation which helps with performance. Preallocating and using a custom allocator may also help us tag where we are using memory, and help us debug later on.