Farz edelim ki bu işleve sahip "i" nin global bir değişken olduğu bir kütüphane var.Paylaşılan kütüphanelerde global değişkenler nasıl bağlantılı?
int foo() {
return i++;
}
Birden çok işlemden bu işlevi çağırdığımda, her işlemde "i" değeri diğer işlemlerden bağımsızdır.
Bu davranış oldukça bekleniyor.
Sadece bu davranışın linker tarafından nasıl uygulandığını merak ediyordum? Anlayışımdan kod süreçler arasında paylaşılır, bu nedenle değişken, bu kütüphaneyi kullanan her programın tüm adres alanlarında aynı sanal adrese sahip olmalıdır. Bu durum bana ulaşmak için oldukça zor görünüyor, sanırım burada bir şey kaçırıyorum ve farklı şekilde yapıldı.
Bu konuda daha ayrıntılı bilgi alabilir miyim?
** Kod ** paylaşılıyor, değil ** veri. ** Dinamik bağlayıcı muhtemelen her işlem için değişkenin yeni bir kopyasını oluşturur, ancak metin (kod) segmentinin kopyalarını oluşturmaz. –
@ H2CO3 Bunun farkındayım. Ancak ben bağlantı sürecinin ayrıntılarını soruyorum. –
Daha fazla ayrıntıya ihtiyacınız varsa, gerçek bir uygulamaya bakmanız gerektiğini düşünüyorum. Linux'taki dinamik linker ve Darwin'deki (BSD/OS X/iOS) açık kaynak. –