Para mahasiswa yang belajar C setelah belajar beberapa bahasa lain (seperti PHP dan Java) biasanya akan kesulitan, karena di C alokasi memori harus diperhatikan dengan sangat detail. Bahkan setiap string harus dialokasi manual. Anda juga harus tahu dengan tepat apakah suatu objek berada di heap atau stack (dalam C *objek* adalah suatu lokasi memori yang bernama).
Detail-detail alokasi memori dan dealokasi memori biasanya tidak dibutuhkan lagi dalam aneka bahasa modern (Java, semua bahasa berhasis .NET, python, php, dsb) karena adanya fitur garbage collection. Tapi Anda akan salah jika menanggap pengetahuan mengenai alokasi dan dealokasi memori tidak diperlukan lagi.
Jika Anda memiliki sebuah list, tree, atau struktur data lain di mana satu objek merefer ke objek lain, dan objek tersebut merefer ke objek lain lagi, maka Anda mulai harus berhati-hati. Jika ternyata masih ada objek yang memegang reference ke “ujung” struktur data (root tree, atau elemen pertama list), maka seluruh elemen yang berhubungan tidak akan dilepaskan.
Garbage collection juga memiliki kelemahan: sifatnya tidak deterministik, kita tidak tahu kapan garbage collection akan dilakukan (sangat tergantung pada komponen yang melakukan garbage collection). Efek pengumpulan sampah di saat yang tidak diinginkan adalah kinerja aplikasi akan terganggu.
Efek lain yang buruk adalah: ketika garbage collection dilakukan, biasanya semua thread harus dihentikan sementara. Ini berarti bahwa kinerja aplikasi bisa sangat terganggu di saat yang tidak diharapkan.
Jadi jika Anda masih mempertanyakan kenapa harus belajar alokasi memori, dan mengapa mahasiswa masih perlu diajari bahasa C, berarti Anda belum paham benar mengenai garbage collection.