C++ 'da yazılmış basit bir programı demonte ettim ve bu iki işlev adı var. Kastın kurucunun ve dtorun yıkıcı olduğunu ve global kelimeyi ifade edebildiğini sanıyorum, belki de global nesneleri yaratıp yok etmeleri anlamına gelebilir. Aux ismini tahmin edemem. Bu iki işlev ne yapıyor?__do_global_dtors_aux ve __do_global_ctors_aux
cevap
adresleri her ELF yürütülebilir farklı kısmında saklanır. Kurucular için .CTORS adlı bir bölüm var ve yıkıcılar için .TTOR bölüm var.
derleyici sırasıyla bu statik nesnelerin kurucular ve yıkıcı çağırmak için iki auxillary fonksiyonları __do_global_ctors_aux ve __do_global_dtors_aux yaratır. __do_global_dtors_aux sadece programı belirtilen yıkıcılar işlevlerini içeren .DTORS bölüm için aynı işi yapar iken
__do_global_ctors_aux işlevi basitçe, .CTORS bölüm yürüyüşe gerçekleştirir.
"statik nesnelerin yapıcıları ve yıkıcıları" nı belirtmeniz gerekir - tam olarak, _static depolamalı nesneler globals gibi duration_. Fonksiyonlar içinde _static_ değişkeni yok. Bu değişkenlerin yapıcıları, '__do_global_ctors_aux''dan değil, içeren işlevden çağrılır. – MSalters
@MSalters yalnızca C++ binary'lerinde bulunan krup ve dtors'tır? – daisy
@ warl0ck: D'de olabilirler, uygulama ayrıntılarını bilmiyorum (Derlemeden önce D dilinde, fakat D, C mirasına sahip olmayan C++ için bir alternatif olarak tasarlanacaktır) – MSalters
Statik nesneleri oluşturmak ve yok etmek için derleyici tarafından eklenen yardımcı işlevlerdir.
örn.
std::vector<int> some_global;
int main() { return 0; }
some_global
main
önce gerçekleştiğini C++ garanti eder. Bunu yapmanın bir yolu, genel nesneleri oluşturan
main
'dan önce gerçekleşen bir işlevi ve onları yok etmek için
main
'dan sonra gerçekleşen başka bir işlev çıkarmaktır.
std::vector
yapıcısının içinde bir kesme noktası sıkıştıysanız ve bu programı çalıştırdıysanız yığın izleme, başlangıç durumuna getirildiği işlevi gösterir. kurucular ve statik nesneleri yıkıcılar arasında
- 1. ve
- 2. Raylar ve işaretleme ve düzenleyici
- 3. Merkür ve maven (ve svn)
- 4. Html.BeginForm ve Denetleyici ve Eylem
- 5. MongoDB/doctrine: $ ve içinde $ ve
- 6. TIF ve 4 köşeli geotiff oluşturma ve enlem ve boylam
- 7. seçin, saymak ve CodeIgniter'ı ve mysql
- 8. Leaflet.js ve JSON verileri: optimizasyon ve performans
- 9. Burn ve WiX - status quo ve belgeler
- 10. Intel SSE ve AVX Örnekler ve Öğreticiler
- 11. Bir tarihi biçimlendirin ve JSTL ve EL
- 12. Nodejs ve mongodb'de kategori ve alt kategori
- 13. Slick.js ve html5 Video autoplay ve video
- 14. PingFederate ve NGinx tümleştirme ve dağıtma seçenekleri
- 15. WPF XAML ve MinWidth ve MaxWidth
- 16. Dosyayı oku ve çalıştır ve çalıştır.
- 17. rsyslogd ve # 012 karakterleri ve # 015
- 18. Gurobi ve java ve boş çözüm
- 19. ng tekrarı ve sınır-ve tether.js
- 20. YA VE koşullar INDEX VE KÜÇÜK
- 21. Elixir ve Gulp - Kopyala ve birleştir
- 22. Yay ve Karıştırma SQL ve NoSQL db
- 23. numpy.genfromtxt ve numpy.loadtxt Arasındaki Fark ve
- 24. Django i18n ve python yerelleri (ve tarihleri)
- 25. EntityFramework 6 ve mongodb ve Kimlik
- 26. TRACE ve TRACE0, TRACE1 ve TRACE2 varyasyonları
- 27. PHPUnit ve PHPSpec Arasındaki Benzerlikler ve Farklılıklar
- 28. AngularJS ve Codeigniter - Kombinasyon ve Veri Transferi
- 29. indeksi ve modülo köz ve gidonun
- 30. WPF ve MVVM modeli ve viewModel ayırma
aux = yardımcı http://dictionary.reference.com/browse/auxiliary –
Ayrıca, işlemci ve derleyici –