Bukankah memori secara rawak membaca dan menulis Ia adalah medium fizikal yang berbeza daripada cakera keras mekanikal Jadi mengapa ia menjejaskan prestasi jika terdapat serpihan memori dalam memori? Apakah sebenarnya yang dimaksudkan oleh pemecahan memori ini?
Alokasi memori biasanya digunakan pada OS untuk sebahagian besar memori terlebih dahulu, dan kemudian menandakannya sebagai tidak diperuntukkan setiap kali
malloc()
时标记一小段为已分配,free()
bahagian kecil ini diperuntukkan.Susunan malloc/free secara amnya adalah sewenang-wenang, jadi selepas berbilang malloc/frees, memori yang diperuntukkan dan tidak diperuntukkan akan silih berganti, seperti
分配1 -- 未分配1 -- 分配2 -- 未分配2
, iaitu memori yang tidak diperuntukkan "berpecah" satu demi satu.Kelemahan pemecahan ingatan:
Pendudukan memori tambahan: Walaupun jumlah keseluruhan memori yang tidak diperuntukkan mencukupi, memori berterusan mungkin masih tidak dipisahkan Dalam kes ini, anda perlu memohon lebih banyak daripada OS
Menjejaskan cache: Cache adalah berdasarkan halaman, dan bahagian halaman yang tidak diperuntukkan juga menduduki cache
Cara terbaik ialah tidak menggunakan timbunan proses lalai sistem. Sebaliknya, mohon sendiri timbunan memori baharu. Data satu jenis diletakkan dalam timbunan. Ini sesuai untuk kepingan kecil data yang sering diminta dan dikeluarkan.
Anda juga boleh malloc sekeping data yang besar sendiri dahulu, dan kemudian gunakan kumpulan memori anda sendiri untuk mengurusnya.
Bagi yang pertama, pengurus fail Windows Explore berguna. Contohnya, struktur pepohon direktori yang dilalui diletakkan dalam timbunan berasingan HeapFree mengeluarkan keseluruhan timbunan pada satu masa, tanpa perlu melepaskan nod daun berulang kali.
Kedua, sebagai contoh, libjpeg sendiri mempunyai kolam memori khusus.
Anda boleh belajar tentang algoritma buddy
Ada juga PDF ni
Jika anda tidak boleh membukanya, pergi ke atas dinding
Saya ingin tahu kod sumber
malloc
实现就去看看dlmalloc
, ia tidak rumit