1. Arrays declared with a fixed size limit the program size, while dynamically allocated arrays using heap memory allow the size to be determined at runtime. 2. The heap segment is used for dynamic memory allocation using functions like malloc() and new to request memory from the operating system as needed. 3. Deallocation of dynamically allocated memory is required using free() and delete to avoid memory leaks and ensure memory is returned to the operating system.