Neden bir varsayılan new ve delete operatörleri yerini alacak?
Nedennew
delete
operatörler new
delete
?
Bu son derece aydınlatıcı C SSS Overloading new and delete devamı:
Operator overloading.
Bu SSS izlemek bir giriş
How should I write ISO C standard conformant custom new
and delete
operators?
(Not: Bu Stack Overflow's C FAQ için bir giriş olarak tasarlanmıştır. Eğer bu formda bir SSS sağlama fikri tenkit etmek istiyorsanız, o zaman the posting on meta that started all this bunu yapmak için bir yer olurdu. Cevaplar soru izlenen C chatroom nereye SSS fikir başladı ilk başta, bu da senin cevabın çok muhtemel alın okuyun o kim buldu bu fikri.)
CEVAP
Nedenlerle bir dizi için new
delete
operatörler yerine, yani bir deneyin olabilir:
Kullanım Hataları Tespit Etmek İçin:
Hangi new
delete
hatalı kullanımı ile ilgili korkunç yaratıklar neden olabilir bir kaç yolu vardırTanımsız Davranış&Bellek sızıntısı.
Her ilgili örnekler şunlardır:
Birden fazla new
ed hafızası delete
kullanarak ve bellek delete
arama new
kullanarak ayrılmış.
new
tahsis adres ve aşırı operatör listesi delete
tutabilirsiniz aşırı yüklü operatör listesinden adresleri kaldırabilirsiniz, o zaman kolay gibi kullanım hataları tespit etmek için.
Benzer şekilde, programlama hataları çeşitli yol açabilirveri taşması(tahsis edilen bir blok ötesinde yazar) veunderruns(tahsis edilen bir blok başlangıcı öncesinde yazılı).
new
olabilir Aşırı yüklü operatör aşırı tahsis ve blok koymak bayt bilinen kalıpları ("imza") önce ve bellek istemcileri için kullanılabilir. Aşırı yüklü operatör silerse imzalar hala sağlam olup olmadığını görmek için kontrol edebilirsiniz.
Böylece kontrol ederek, eğer bu imza değil, sağlam olarak belirleyen bir taşma veya altında işletilen oluştu bir ara sırasında hayatını ayrılan blok ve operatör silebilir günlük bu gerçeği ile birlikte, değer kusurlu işaretçi, böylece yardım sağlayan iyi bir tanılama bilgileri.
Verimliliği(hız ve bellek) Geliştirmek için:
new
delete
operatörler gayet iyi herkes, ama kimse için en iyi şekilde çalışmak. Bu davranış, genel amaçlı kullanım için tasarlanmış olmalarından kaynaklanıyor. Sabit ayırma ve kısa ömürlü nesneler, çok sayıda kaldırma programı süresince mevcut ayırma kalıpları birkaç blok dinamik ayırma arasında değişen karşılamak için var. En sonunda, operatör Derleyiciler ile new
delete
gemi operatörü orta-of-the-road bir strateji.
Eğer iyi bir anlayış programınızın dinamik bellek kullanım şekilleri, genellikle özel sürümleri yeni operatör ve operatör silmek daha iyi performans (daha hızlı performans, ya da ihtiyaç az bellek P)varsayılan olanlar. Sen ne yapıyorsun emin değilseniz tabii ki, bu bile inceliklerini anlayabilecek musun yoksa hiç denemeyin) yapmak için iyi bir fikir değildir.
Kullanım İstatistiklerini Toplamak İçin:
Uygulama/program dinamik ayırma nasıl kullandığı hakkında bilgi toplamak gerekir #2, belirtildiği gibi verimliliği artırmak için new
delete
değiştirmeyi düşünmeden önce. Hakkında bilgi toplamak isteyebilirsiniz:
Ayırma blok dağılımı
Yaşam süreleri dağılımı
Ayırma düzeni () veya FIFO FIFO ya da rastgele
Anlayış kullanım şekilleri zaman içinde,dinamik hafıza vb kullanılan azami miktar bir süre değiştirir.
Bazen de, kullanım bilgileri gibi toplamak gerekir:
Bir sınıf, nesneleri dinamik olarak saymak
Nesneleri dinamik ayırma vb kullanılarak oluşturulan sayısını kısıtlamak.
Tüm bu bilgiler özel new
delete
değiştirme ve aşırı new
delete
tanı toplama düzeneği ekleyerek toplanabilir.
new
yetersiz bellek uyumu telafi etmek için:
Birçok bilgisayar mimarileri belirli türdeki veri adresleri belli türden bellekte yerleştirilmesi gerekir. Örneğin, bir mimarlık gerektirebilir göstericiler meydana gideren bir çoklu dört (yani, dört baytlık hizalanmış) veya iki katına gerekir meydana gideren bir çoklu sekiz (yani, sekiz baytlık hizalı). Bu tür kısıtlamalar uyulmaması-zamanında donanım özel durumlara yol açabilir. Diğer mimariler daha bağışlayıcı ve performansı azaltır ama çalışmak için izin verebilir.Bazı Derleyiciler ile birlikte 28* *operatör sekiz baytlık dynamic çıkma garantisi yok
çiftlerde ayırma. Böyle durumlarda, yerine varsayılan operatör new
ile bir garanti sekiz baytlık olabilir büyük verim artışları program performans ve olabilir iyi bir neden için değiştirmek new
delete
operatörler.
Küme ile ilgili birbirine yakın nesneler:
Bu özellikle veri yapıları genellikle birlikte kullanılan ve istediğin gibi küçült frekans sayfa hataları üzerinde çalışırken veri, mantıklı oluşturmak için ayrı bir yığın veri yapılarını yani onlar kümelenmiş birlikte olarak birkaç sayfa olarak mümkün. new
delete
özel Yerleştirme sürümleri mümkün gibi kümeleme elde etmek için yapabilirsiniz.
Alışılmamış davranış elde etmek için:
Bazen operatörler, yeni ve Sil derleyici tarafından sağlanan sürümleri teklif bilmediğimiz bir şey yapmak istiyorum.
Örneğin: uygulama veri güvenliğini artırmak için sıfır ile ayırmanın bellek üzerine yazar 34* *özel bir operatör yazabilirsiniz.
Neden git ileri varsayılan olarak birl...
Neden modern Perl varsayılan olarak UT...
Neden artış önlemek (&; " quot;) v...
Neden Python ve -- operatörleri var mı...
Neden yapar .NET use banker'varsa...