SORU
28 AĞUSTOS 2015, Cuma


Eğer çeşitli platformlarda dağıtıyorsanız tanımsız davranış, yalnızca bir sorunu var mı?

Konuşmalarının çoğutanımsız davranış(SNS) bunu yapmak için bazı platformlar vardır hakkında konuşmak veya bazı Derleyiciler bunu.

Tek bir platform ve tek bir derleyici (aynı sürüm) ilgilenen ve yıllardır onları kullanarak olacak biliyorsanız ne?

Hiçbir şey ama kodu değişiyor ve İK uygulama tanımlı değil.

Bir kere İK olan kişinin mimarisi ve derleyici ve test edebilir mi sandınız ki o günden sonra ne olursa olsun derleyici mi ile İK ilk kez olacak mı her zaman?

Not:Biliyorumtanımsız davranış, çok kötü bir durumama ne zaman ben işaret İK kod yazan biri olarak bu durum, sordular bu, ve ben yoktu bir şey daha söylemek daha, eğer sen şimdiye kadar yükseltin ya da bağlantı noktası, tüm İK olacak çok pahalı düzeltmek için.

CEVAP
28 AĞUSTOS 2015, Cuma


OS değişiklikler, zararsız sistem değişiklikleri (farklı donanım versiyonu!), ya da derleyici değişiklikleri neden daha önce "" İK çalışmıyor. çalışıyor olabilir

Ama o daha kötü.

Bazen bir değişiklik için ilgisiz bir derleme birimi, ya da uzakta kodu aynı derleme birimi, neden daha önce "çalışan" İK için değil; örnek olarak, iki satır içi işlevleri veya yöntemleri ile farklı tanımlar ama aynı imza. Sessizce bağlama sırasında atılan birdir ve tamamen zararsız kod değişiklikleri göz ardı edilir hangi değiştirebilir.

Bir bağlamda çalışan kod birden farklı bir bağlamda kullandığınızda aynı derleyici çalışma, işletim sistemi ve donanım durduramaz. Buna bir örnek, güçlü yumuşatma; derlenmiş koda Bir nokta, ama ne zaman (bağlantı zamanı! muhtemelen) inlined aradığında işe yarayabilir ihlal kod anlamı değiştirebilir.

Kodunuzu, eğer bir parça daha büyük bir proje, koşullu çağrı bazı 3. Parti kodu (ki, bir kabuk uzantısı önizleme bir resim türü Bir Dosya Aç iletişim kutusu) bu değişiklikler devlet bayraklar kayan nokta hassas, yerel, tamsayı taşması bayrakları, sıfıra bölme davranış, vb.). İnce önce çalıştığı kodunuzu, şimdi tamamen farklı bir davranış sergiler.

Sonraki, tanımsız davranış birçok türde doğal olarak belirli olmayan. Erişim içeriğini bir işaretçi sonra serbest (hatta yazma) olabilir güvenli 99/100, ama 1/100 sayfa oldu takas veya başka bir şey yazılmış daha önce orada var. Şimdi bellek bozulması var. Tüm testleri geçer, ama ne yanlış gidebilir tam bilgi eksikliğin var.

Tanımsız davranış kullanarak, bu durumda C standardı tam bir anlayış, derleyici sizin yapabileceğiniz her şey için kendinizi taahhüt ve her şekilde çalışma zamanı ortamı tepki verebilir. Üretilen Meclisi, C kaynak değil, muhtemelen programın tamamı için Denetim var, her zaman inşa! Ayrıca bilgi düzeyi için bir kod değişiklik yapacak bir kod ya da okuyan herkes işlemek.

Bazen hala buna değer.

Fastest Possible Delegates kuralları çok hızlı olmayan sahibi *0-*bir tür olmaya çağıran hakkında İK ve bilgi kullanır.

Impossibly Fast Delegates yarışıyor. Diğer bazı durumlarda daha hızlı, daha yavaş olur, ve C standartlarına uygundur.

Bu İK kullanarak buna değer, performansı artırmak için olabilir. Böyle bir şey İK hackery performans (hız ve bellek kullanımı) dışında almak nadirdir.

Gördüğüm başka bir örnek, sadece bir işlev işaretçisi aldı zavallı bir C API ile bir geri arama kaydetmek zorunda kaldık. Biz diye bir işlev oluşturun (derlenmiş olmadan optimizasyonu), kopyalamak için başka bir sayfa, değiştir bir işaretçi içinde bu işlevi, daha sonra mark sayfa olarak çalıştırılabilir, izin bize gizlice geçmek bir işaretçi ile birlikte işlev işaretçisi için geri.

Alternatif bir uygulama bazı sabit boyutlu fonksiyonları (10? set olurdu 100? 1000? 1 milyon?) global bir dizi std::function Bir ara, çağırmak. Bu herhangi bir zamanda yüklemek, ama neredeyse yeterli olduğunu nasıl bir sınır koymak istiyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • pleated-jeans

    pleated-jean

    6 HAZİRAN 2013
  • spederson7

    spederson7

    17 Temmuz 2006