İstisnasız C ++ için gerçek dünyadaki herhangi bir vaka var mı? [kapalı]


40

In C ++ üzerinde C kullanın ve C ++ C üzerinde ne zaman? bir ifade var wrt. size / C ++ istisnalarını kodlamak için:

Jerry cevaplar (diğer hususların yanında):

(...) C ++ ile gerçekten küçük çalıştırılabilir dosyalar üretmek daha zor olma eğilimindedir. Gerçekten küçük sistemler için, nadiren çok fazla kod yazıyorsunuz, ve fazlası (...)

Bunun neden olacağını sordum, Jerry'nin cevap verdiği:

Asıl mesele, C ++ 'ın (en azından genellikle) çalıştırılabilir boyuta minimum değer ekleyen bir istisna işleme içermesidir. Çoğu derleyici özel durum işlemeyi devre dışı bırakmanıza izin verir, ancak sonucu yaptığınızda artık oldukça C ++ olmaz. (...)

teknik gerçek dünya düzeyinde gerçekten kuşku duymuyorum.


Bu nedenle , bir projenin bir dil olarak C ++ 'ı seçtiği ve ardından istisnaları devre dışı bırakmayı seçtiği gerçek dünya örneklerinden duymak istiyorum (tamamen meraktan) . (Yalnızca kullanıcı kodundaki istisnaları "kullanmayın" değil, bunları derleyicide devre dışı bırakın, böylece istisnalar alamaz veya yakalayamazsınız.) Bir proje neden bunu yapmayı seçti (hala C ++ kullanıyor, C değil, hayır istisnalar) - (teknik) nedenler nelerdi / nelerdi?


Zeyilname: Cevaplarını detaylandırmak isteyenler için istisnasızlıkların sonuçlarının nasıl ele alındığını detaylandırmak güzel olurdu:

  • STL koleksiyonları ( vector, ...) düzgün çalışmıyor (ayırma hatası bildirilemiyor)
  • new atamaz
  • Yapıcılar başarısız olamaz

1
JSF C ++. Jetler ve istisnalar karışmaz.
Kodlayıcı

1
İstisnalar ile ilgili bazı aydınlatıcı bilgiler (ve genel olarak C ++) 250bpm.com/blog:4
Ambroz Bizjak

1
@AmbrozBizjak - DeadMG'ye link verdiğiniz yazıya yapılan bir yorumdan alıntı yapacağım: alıntı: "Bana istisnaları anlamadığınız anlaşılıyor." Katılıyorum. Yazar, açıkça bu istisna ile ilgili verdikleri örneklere bakarak bir istisna sorununu çözmüştür.
Martin Ba

Yanıtlar:


35

Neredeyse tüm konsol oyunlarında C ++ 'da bugün istisnasız olarak devre dışı bırakılmış durum vardır. Aslında bu konsolları hedefleyen C ++ derleyicileri için varsayılan kurulumdur. Bazen bazı C ++ özelliklerinin, birden fazla devralma gibi bu derleyicilerde doğru çalışması garanti edilmez (örneğin, çok iyi bilinen bir konsol varsayılan derleyicisini düşünüyorum).


Ayrıca, bir başka örnek, C ++ 'da istisna olmadan gcc ve Arduino donanım SDK'sıdır ve sağlanan hiçbir STL gibi başka şeyler değildir .


İyi ya da kötü, bazı teknik nedenler var, her neyse, benim tavsiyem değil, duyduğum nedenler:

  1. Konsolların çoğu, sınırlı bellek ve işlem süresi olan gömülü sistemlerdir. Belki gelecekteki konsollarda bu kadar doğru olmayacak, ama şu anki olanlar bir PC ile karşılaştırıldığında hala kısıtlayıcı. Bazı portatif konsollar, NDS gibi herhangi bir akıllı telefondan programlamak için ahlaki olarak daha zordur. İstisna özelliği, kullanmasanız bile bellek ve biraz da yüksek hız maliyeti sağlar. Kendinizi kontrol edebilirsiniz, PC'de bile doğru.
  2. Konsoldaki video oyunları çökemez. Herhangi bir çarpma veya çıkmazdan, herhangi bir göstericiden kaçınacak şekilde test edilmelidirler. Bu yüzden konsol üreticileri oyunların yayınlanmadan önce yoğun bir şekilde kontrol edilmelerini istiyor. Bu aynı zamanda istisna yönetiminin konsol oyunu durumunda gerçekten kullanışlı olmayan bir maliyet getirdiği anlamına gelir. Örneğin akıllı telefonlarda daha iyidir, çünkü kurtarmanın bir yolu olabilir veya sorunu e-postayla göndermek için bazı kodlar ekleyebilirsiniz. Çoğu konsol gibi kapalı platformlar buna izin vermez. Dolayısıyla, bir istisna sistemi gerçekten de gerekli değildir. "Sadece düzgün çalışmasını sağlamalısın". ;)
  3. İstisna yönetimi, hatalara ve çökmelere izin vermediğiniz zaman, bir hata yönetimi stratejisi uygulamanız gerektiği anlamına gelir. Bu tür bir sistem, birisinin yararlı olması için çok zaman harcayacağı kadar karmaşık olabilir. Oyun geliştiricilerinin çökmelerde faydalı olacağı düşünülen özellikler üzerinde çalışmak için lüksleri yok ...
  4. Derleyici buna izin vermiyor (henüz). Evet, oldu.

Bence istisnalar oyunlarda bile faydalı olabilir ama bu konsol oyunlarında bunun gerçekten kullanışlı olmadığını gösteriyor.


Güncelleme:

Buraya şaşırtıcı başka bir örnek daha ekliyorum: LLVM / CLang , aşağıdaki nedenlerden dolayı istisna veya RTTI kullanmıyor :

Kod ve yürütülebilir boyutu küçültmek amacıyla, LLVM, RTTI (örn. Dynamic_cast <>) veya istisnalar kullanmaz. Bu iki dil özelliği, kod tabanında özel durumlar asla kullanılmasa veya RTTI bir sınıf için kullanılmasa bile, çalıştırılabilir şişkinliğe neden olan "yalnızca kullandıklarınız için ödeme yaparsınız" genel C ++ ilkesini ihlal eder. Bu nedenle, kodları küresel olarak kapatıyoruz.

Bununla birlikte, LLVM, isa <>, cast <> ve dyn_cast <> gibi şablonlar kullanan el yapımı bir RTTI biçimini geniş ölçüde kullanır. Bu RTTI formu tercih edilir ve herhangi bir sınıfa eklenebilir. Ayrıca, dynamic_cast <> 'den büyük ölçüde daha verimlidir.

CLang derleme hızı ve açık hatalar ile tanınır, aynı zamanda gerçekten kolay takip edilebilen bir kodu olan nadir bir derleyicisidir.


9
(3): ne olursa olsun, bir hata yönetimi stratejisine ihtiyacınız var (2). Sorunlar ortaya çıkacak ve konsol yazılımınızın yumuşak ve zarafetle başarısız olması gerekiyor. İstisnalardan kaçınmanın, bunu daha da kolaylaştırdığı bana göre açık değil.
David Thornley

6
Hataların gerektiği gibi ele alındığı ve "istisnai" olayların olmadığı sıkı kontrol edilen çalışma ortamı ortamlarının tüm harika örnekleri.
Patrick Hughes,

1
@DavidThornley Konsolun sisteminin bir çeşit hatayı yöneteceğini varsaydığın için değil. Belki PS3 veya XBox'ta olacaktır, ancak konsol oluşturucunun testlerini geçmesine izin verilmeyecek. Neyse, çoğu gelişmiş konsolun ürün yazılımı, düşündüğünüz kadar esnek değildir. Bir konsol oyununun hemen hemen tüm konsol donanımına erişimi olması gerekir, bu yüzden bir konsolda çalışan bir oyunun neredeyse konsolun "işletim sistemi" olduğu gibi düşünebilirsiniz ... daha güçlü konsollarımız var, daha az doğru. Bu yüzden bazı davalarda garip göründüğüne katılıyorum.
Klaim

2
Bu iyi bir cevap, ayrıca bir istisna oluşturup kullanıcıya bir hata sunsa bile, D-pad ile ne yapması gerektiğini söyleyelim. Son kullanıcı için tek gerçek çözüm bir yeniden başlatma.
anon

2
Folly örneğini kaldırdım çünkü ekibindeki birileri NO EXCEPTION'ın “istisna kullanma” değil “kurallara istisna” olmadığı anlamına geldiğini söyledi. Bakınız permalink.gmane.org/gmane.comp.lib.boost.devel/231377
Klaim

9

Jerry söyledi: ... sonuç oldukça C ++ artık değil benim metafor o iken, olduğu açıkça C ++, sadece biraz daha farklı bir lehçesi programları diğer formları, kongre ve yazılı stilleri kullanmak için.

İşte onları devre dışı bırakmak için başlıca nedenlerim:

İkili Uyumluluk

Dil ve çeviri sınırlarını geçmek, evrensel olarak iyi tanımlanmamış veya tanımlanmamış. Programınızın tanımlanmış davranış alanı içinde çalışacağını garanti etmek istiyorsanız, modül çıkış noktalarındaki istisnaları karantinaya almanız gerekir.

Çalıştırılabilir Boyut

İşte yazdığım, istisnasız ve özel durumların etkinleştirildiği bir şekilde yazılan bir istisna içermeyen programın ikili boyutları:

İstisnalar olmadan:

  • çalıştırılabilir + bağımlılıklar: 330
  • son soyulmuş çalıştırılabilir (sürüm derlemesi): 37

İstisnalar hariç:

  • çalıştırılabilir + bağımlılıklar: 380
  • son soyulmuş çalıştırılabilir (sürüm derlemesi): 44

Hatırlatma: Bu, sıfır atma / yakalama içeren bir kütüphane ve program koleksiyonudur. Derleyici bayrak yapar C ++ standart kütüphanesinde özel durumları etkinleştirin. Bu nedenle, gerçek dünyadaki maliyet bu örnekte% 19'dan fazladır.

Derleyici: elma gcc4.2 + llvm. MB cinsinden boyutlar.

hız

"Sıfır maliyet istisnaları" terimine rağmen, hiçbir şey atmadığında bile bazı ek yükler eklerler. Yukarıdaki durumda, performans açısından kritik bir programdır (Sinyal İşleme, Üretim, Sunum, Dönüşümler, büyük veri kümeleri / sinyalleri vb.). Bu tasarımda istisnalar gerekli bir özellik değilken, performans çok önemlidir.

Program Doğruluk

Tuhaf bir neden gibi görünüyor ... Eğer fırlatma bir seçenek değilse, programınızın doğru şekilde çalışmasını sağlamak için nispeten katı, doğru, iyi test edilmiş programlar yazmanız ve istemcilerin arayüzleri doğru kullanmaları (bana kötü bir argüman verirseniz veya yaparsanız) Bir hata kodunu kontrol etmiyorsanız, o zaman UB) hak ediyorsunuz. Sonuç? Uygulama kalitesi büyük ölçüde iyileşir ve sorunlar hızla çözülür.

Basitlik

İstisna işleme uygulamaları çoğu zaman güncel tutulmaz. Ayrıca bir çok karmaşıklık ekler çünkü bir uygulamada birçok çıkış dizisine sahip olabilir. Müşteri tarafından köpüren ve işlenen küçük bir iyi tanımlanmış, yazılı, çıkış stratejileri kümesi kullandıklarında oldukça karmaşık programları okumak ve sürdürmek daha kolaydır. Diğer durumlarda, uygulamalar zaman içinde daha fazla atış yapabilir veya bağımlılıkları bunları ortaya koyabilir. Müşteriler, tüm bu çıkışlara karşı kolayca veya uygun şekilde savunamazlar. Çok sayıda kütüphane yazıp güncellerim, sıklıkla evrim ve gelişme olur. Bunların istisna çıkış dizileriyle (büyük bir kod tabanında) tümüyle senkronize kalmaya çalışılması, zamanın iyi bir şekilde kullanılmayacağına ve muhtemelen çok fazla gürültü ve zahmete neden olacaktır. Artan program doğruluğu ve daha fazla test nedeniyle,

Tarihçe / Mevcut Kod

Bazı durumlarda, tarihsel nedenlerle asla tanıtılmadılar. Mevcut bir kod temeli onları kullanmadı, programları değiştirmek insan yıllarını alabilir ve sözleşmelerde ve uygulamalarda örtüşme nedeniyle bakım yapmayı gerçekten çirkin hale getirebilirdi.

Downsides

Tabii ki, dezavantajları var, en büyüğü: Diğer kütüphanelerle uyumsuzluk (ikili dahil) ve bu modele uyması için iyi miktarda program uygulamanız gerekeceği gerçeği.


+1 mükemmel bilgi! (Sadelik paragrafı ile aynı fikirde olmasam da)
Martin Ba

Yalnızca başarısız yapıcılar varsa ve tahsisatınızı nasıl işlerseniz (- başarısızlık) ilginç olurdu.
Martin Ba

@Martin 1) Anlaşmazlık oldukça iyi. Çoğu devin, birçok nedenden dolayı istisnaları devre dışı bırakma konusunda hemfikir olmadığını anlıyorum. Basit olması için program doğruluğu ile birlikte gelir. Sorunların / geçersiz devletlerin uzaklara gitmesine izin verilmiyor. Bu, arızaları kontrol ettikleri ve incelikle çıktıkları anlamına gelir. jheriko'nun postası bunu tekrar ediyor.
justin,

1
@ Martin 2b) tahsisi biraz daha karmaşıktır. İlk olarak, yığın tahsislerinin sayısı, sayısında azalır ve büyüklüğünde artar - başlangıçta nispeten az sayıda yığın tahsisi vardır. İkinci olarak, tahsisatlar özel tahsisatçılardan geçer. Tahsisatçı için başlangıçta tahsis edilmemişse (örneğin mallociadeler 0), tahsisatçı while (1)bir bağlam anahtarına sahip olana girer , ardından tahsisat için başka bir deneme yapılır. Bu kod tabanında, tahsisatçı aracılığıyla yeni olanın 0 döndürebileceği, ancak yeni uygulamanın iyi çalıştığı eskiden. (devam)
justin

2
evet, özel ayırıcı arayüzleri üzerinde stl uyumlu bir sarıcı var. teknik olarak, program sürümde iptal edilmeyecek; bağlam anahtarları tanıtacaktır (örneğin, başka bir iş parçacığının çalışmasına izin vererek, bir miktar hafızayı boşaltacağını umar), yeniden dener ve başarısız olursa günlüğe kaydeder - sonsuza dek. birim testleri günlerce sorunsuz çalışabilir. tek gerçek tehdit, çoğu istenmeden yakalanacak olan büyük tahsislerdir. Yine, sistemin başarısızlık oranları da bu noktada radarda; Bu tür bir senaryoda çekirdek uygulamadan önce başarısız olma ihtimalleri vardır.
justin

7

Google , çoğunlukla tarihsel nedenlerden dolayı, C ++ Stil Rehberindeki istisnaları onaylamaz :

Yüz yüzünde, istisnalar kullanmanın yararları, özellikle yeni projelerde maliyetleri ağır basmaktadır. Ancak, mevcut kod için, istisnaların getirilmesinin tüm bağımlı kodlar üzerinde etkileri vardır. İstisnalar yeni bir projenin ötesine yayılabilirse, yeni projeyi mevcut istisnasız kodla bütünleştirmek de sorunlu hale gelir. Google’daki mevcut C ++ kodlarının çoğu istisnalarla ilgilenmeye hazır olmadığından, istisnalar ortaya çıkaran yeni kodu kabul etmek nispeten zordur.

Google’ın mevcut kodunun istisnai toleranslı olmadığı göz önüne alındığında, istisnaların kullanım maliyetleri, yeni bir projedeki maliyetlerden biraz daha fazladır. Dönüşüm süreci yavaş ve hataya açık olurdu. Hata kodları ve iddialar gibi istisnalar için mevcut alternatiflerin önemli bir yük getirdiğine inanmıyoruz.

İstisnaların kullanılmamasına karşı tavsiyemiz, felsefi veya ahlaki gerekçelerle değil pratik olanları temel almaktadır. Açık kaynaklı projelerimizi Google'da kullanmak istediğimiz ve bu projeler istisnalar kullanıyorsa, bunu yapmak zor olduğu için, Google açık kaynaklı projelerindeki istisnalar konusunda da tavsiyede bulunmamız gerekiyor. Her şeyi baştan tekrar yapmak zorunda kalsaydık, işler muhtemelen farklı olurdu.

Windows kodu için bu kuralın (punto amaçlanmamıştır) bir istisnası vardır.

(Editörün vurgusu)


5

Qt neredeyse hiçbir zaman istisnalar kullanmaz. Qt cinsinden hatalar hata kodları ve sinyallerle belirtilmiştir. Resmen belirtilen nedeni:

Qt başlatıldığında, Qt tarafından desteklenmesi gereken tüm derleyiciler için istisnalar mevcut değildi. Bugün API'leri tutarlı tutmaya çalışıyoruz, bu nedenle istisnaları kullanmayan bir geçmişi olan modüller, genellikle istisnalar kullanılarak yeni kodlar almaz.

QT neden bu kadar az istisna kullanıyor?

Bugün, Qt'nin ortak bir eleştirisi istisna emniyetinin tamamlanmadığı yönündedir.


1
Teşekkürler. İyi bilgi, çoğu QT kod üssünün muhtemelen derleyicide özel durumları olup olmadığını merak etmeme rağmen ...
Martin Ba

4

Symbian C ++ (bazı Nokia cep telefonlarında kullanılır), istisnalar kullanmaz, en azından doğrudan kullanmaz, çünkü C ++ derleyicileri Symbian ilk geliştirildiğinde bunları güvenilir bir şekilde uygulamadı.


1
Bu Symbian'ın modern versiyonları için geçerli değil. Symbian TRAP'ları ve yaprakları gerçek C ++ istisnaları olarak uygulanır , ancak Symbian'ın EPOC32 ve daha eski sürümleri başka yöntemlere dayanır (doğru hatırlıyorsam setjmp / longjmp).
otto

1
@OttoHarju: "En azından doğrudan değil" derken demek istediğim bu.
Keith Thompson

3

İstisnaları / asla kullanmam / kullanmam. Bunun bir çok nedeni var, ancak iki ana sebep, sağlam kod üretmeleri için onlara hiçbir zaman ihtiyaç duymamamı ve çalışma zamanında performansı düşürmeleri.

İstisnaları kullanarak ve devre dışı bırakan üretim kodu üzerinde çalıştım - istisnalara izin veren kod aynı şekilde daha kötüydü. Bazı yerlerde, çok ağır, performans karşıtı ve hata ayıklaması zor olan hata yönetimi yerine gerçek akış kontrolü için istisnalar kullanılıyordu. Genel olarak, istisna doldurulmuş koddaki hata ayıklama sorunları istisnasız koddan daha zordu - kısmen istisna mekanizmasının yığına ve gerçek zorluklarına bağlı olarak, ancak daha fazlası olarak teşvik edilen tembel kod nedeniyle istisna işlemesi olması sonucu.

İstisnaların kendilerinde / performansla ilgilenmiyorsanız / ve doğru bir şey yapmak için vaktiniz yoksa ciddi bir yanlışlık yoktur - bunlar hata yönetimi için bir dil özelliği ve uygun hata yönetimi için iyi bir alternatiftir. Bununla birlikte, hataları ele almanın neredeyse her zaman / daha iyi / yolları vardır - kendi mantığınız gibi (bunun üzerinde durmak zor - neredeyse sağduyudur). Bu sizin hatanız değilse, ancak bir kütüphaneden geliyorsa (örneğin standart kütüphane), istisnaların seçimine saygı duymanız veya bir miktar çökme yapmanız gerekir, ancak bu seçimi her zaman sorgularım. İstisnaların aslında en iyi çözüm olduğu bir durum hiç görmedim.

İddialar daha fazla hata ayıklanabilir, hata kodları daha az ağırdır ... ikisi arasında, eğer doğru kullanılırsa daha hızlı olan kodları okumak, hata ayıklamak ve bakımını yapmak daha kolaydır. Her yönüyle kazanır ...


1
Hayır! İstisnaları kötüye kullanmak daha kolaydır, ancak bu istisnalar dışında iyi çalışır. En azından, tüm işlevlerinizin istisnai güvenlikli olması şartıyla, en azından neden olduğu kadar kolaydır (ve bu, genellikle yine de yapmanız gereken tüm kaynaklar için RTTI kullanma meselesidir). Hata kodlarının doğru şekilde yapılması çok sıkıcı olabilir ve programınızın bir hata işleme kodu yığınına gömülmesiyle sonuçlanabilir; Bu durumda, istisnalar daha iyidir. Unutma, senden farklı şeyler yapıyorum, doğru şeyler yapmayı umursamadığımın kesin bir kanıtı değil.
David Thornley

... RTTI'nın neden kötü olduğunu ve bunun da başka bir hikaye olduğunu düşünüyorum - gördüğüm her derleyicideki yerleşik RTTI bilhassa yenilebilir - eğer RTTI'ya ihtiyacınız varsa. Her şey bağlamla ilgili olsa da - RTTI ve istisnalar gibi şeyler RAD ve kurumsal uygulamalar için harika olabilir - yüksek performanslı (örneğin oyunlar) bilgisayar dünyasında yeri yok. Daha önce kapatılabilecekleri herhangi bir hedefi kullanan bir yapım oyun motorunu hiç görmedim ...
jheriko

2
Üzgünüm - RAII demek istediğim bu. Bunu kullanmıyorsanız, sadece istisnalar berbatlaşmayacak. (Ancak, dinamik yayınlar işimde çok iyi çalışıyor ve performansla ilgilenmek zorundayım.)
David Thornley

İlginç bir konu: İstisnaların daha özlü bir hata kodlama işlemine izin verdiğini düşünüyorum, ancak hata kodları daha güçlü çünkü yerel olarak hataları ele alıyorlar (istisnalar yakalanmadan önce çağrı yığınını kabarlayabilirken, arayan kodunda hemen dönüş kodunu kontrol edebilirsiniz. ve bazen yakalanmazlar, çarpışma ile sonuçlanırlar.
Giorgio

3

Gelen Müşterek Saldırı avcı C ++ kodlama standardı Bjarne ve arkadaşları tarafından. diğer bir deyişle, savaş uçaklarının zorlu gerçek zamanlı gereklilikleri nedeniyle istisnalar yasaklanmıştır.

JSF ++, gerçek zamanlı ve güvenlik açısından kritik öneme sahip uygulamalar içindir (uçuş kontrol yazılımı). Bir hesaplama çok uzun sürerse, biri ölebilir. Bu nedenle, yanıt sürelerini garanti etmemiz gerekiyor ve şu anki takım desteği seviyesiyle birlikte, istisnalar için yapamayız. Bu bağlamda, ücretsiz mağaza tahsisatı bile yasaklandı! Aslında, JSF ++ hata yönetimi için öneriler, istisnaları kullanarak, işleri doğru yapmak için araçlara sahip olduğumuz günü öngören istisnaların kullanımını simüle eder.

Bjarne C ++ SSS bölümünden alıntılanmıştır .

Unutmayın, C ++ muhtemelen tüm dillerdeki en geniş yazılım çeşitliliğini çalıştırıyor ...


JSF ++ ayrıca "yeni" (yeni yerleşim dışında) ve "delete" kullanımını yasaklar. "İstisnasız yeni başarısızlıkla nasıl başa
çıkacaksınız?" Sorusunun bir cevabı da hangisidir

@ Kol: Evet. Bkz. "Bu bağlamda, ücretsiz mağaza tahsisi bile yasak!" Yukarıda.
Macke,

2

C ++ kütüphane tasarımında bir nevi önemli. Çoğu zaman bir C-arayüzü ile istemciye 3. parti kütüphanenizden bir istisna atmak çok kötüdür. Kütüphaneniz fırlarsa, hiç atılma garantisi olmadığı için (müşterinin istisnalar için bir kısıtlama için sahip olduğu sebeplerden dolayı) kullanmış olacağı bir dizi müşteriyi kesiyorsunuz.

Şahsen çok kötü olmayan bir şey olduğunda takıma "bir istisna atma" dendiğinde istismara uğramış istisnalar gördüm. Elbette burada hatayı görüyorsunuz - istisna, kimse ne yapılacağına karar vermeden önce kodda atıldı. Bu proje, birkaç kez atıldı ve bu derin fırlamalar ara sıra geri çekildi.


1

Belki bu konuda, Embedded C ++ 'dan bahsetmeye değer . Gömülü C ++, gömülü sistemler için tasarlanmış (belli ki yeterince açık) bir C ++ çeşididir. Temel olarak, (diğer şeylerin yanı sıra) şablonlar, ad alanları ve istisna işleme kaldırılmış olarak C ++ 'nın uygun bir alt kümesidir.

EC ++ yeniyken biraz sıçramasına rağmen, çoğunlukla oldukça sessiz kaldıklarını da eklemeliyim. İnsanların ilgisini kaybettiğinden veya ilk girişimlerinin o kadar mükemmel olduğundan emin değilim, kimsenin on yıldan fazla bir süre onunla uğraşmak için herhangi bir sebep görmemesi.<closed captioning for the humor impaired>Yeah, right!</closed captioning>


Sorular ve Cevaplar - caravan.net/ec2plus/question.html - Çok ölü olduğunu söyleyebilirim.
Martin Ba

1

İyi bir örnek çekirdek modu programlamadır.

Orada C ++ 'ı temizleyici kodu için ancak istisnasız olarak kullanabilirsiniz. Onlar için çalışma zamanı kitaplığı yok ve istisna işleme çekirdekte çok sınırlı yığın belleği kullanıyor (Windows NT çekirdeğindeki C ++ istisnalarını denedim ve istisna atma ve çözme kullanılabilir yığının yarısını yiyor - yığın taşması elde etmek çok kolay ve tüm sistemi çökertmek).

Genelde kendi newve deleteişleçlerinizi tanımlarsınız . Ayrıca oldukça kullanışlı bir placement newve c ++ 11 değer referansları buldum . İstisnalara dayanan hiçbir STL veya diğer C ++ kullanıcı modu kütüphanesi kullanılamaz.


0

Çalıştırılabilir belleği düşük tutmaya çalışırken. Genellikle gömülü (veya mobil) sistemlerde yapılır. Masaüstleri uygulamaları için hiçbir zaman ihtiyaç duyulmadığı halde sunucularda, web sunucusu veya sql için mümkün olduğunca fazla ram isteyip istemediğiniz düşünülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.