2011-06-25 7 views
8

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

+0

aux = yardımcı http://dictionary.reference.com/browse/auxiliary –

+0

Ayrıca, işlemci ve derleyici –

cevap

16

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.

+1

"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

+0

@MSalters yalnızca C++ binary'lerinde bulunan krup ve dtors'tır? – daisy

+0

@ 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

9

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

aslında inşa edilmesi gerekmektedir (ve tahrip) yere ve inşaat 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