SORU
22 AĞUSTOS 2011, PAZARTESİ


Neden bir varsayılan new ve delete operatörleri yerini alacak?

Nedengerekirbir varsayılan operatör yerine bir özel new 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: cevap Scott Meyers dersler Daha Etkili C dayanır .
(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
22 AĞUSTOS 2011, PAZARTESİ


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 newed 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bart Baker

    Bart Baker

    1 Aralık 2006
  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • How It Should Have Ended

    How It Shoul

    5 Mart 2007