Bende bu konuda bir otorite olduğumu idda etmiyorum, Sistem Programlama ve Bellek Yönetimine çok fazla ilgim olmasına rağmen daha yeni yeni ilgilenme fırsatı buluyorumOpt2000 yazdı:Burada anlatacaklarım, aslında kesin bilgilere değil, bildiklerimden çıkardıklarım üzerine olacak. Bu yüzden yazdıklarımı kesin doğru olarak düşünmeyin, hatta yanlışım varsa düzeltirseniz sevinirim![]()

Yukarıdaki söylediklerinizden çıkardığım ve ekleyebileceklerim şunlar;Opt2000 yazdı: Windows, normalde uygulamaları çalıştırırken, her uygulama için sanal bir bilgisayar oluşturuyor.
Daha doğrusu, her program için ayrı bir bellek alanı açıyor ve siz bu bellek alanı içinde çalışıyorsunuz.
Dolayısıyla programınız çöktüğü zaman genelde sistem diğer programların çökmesini engelleyebiliyor.
Ama ortak kullanım anlamına gelen BPL ve DLL'ler, sizin programınızla aynı bellek alanına yüklenemez.
Aksi takdirde zaten DLL, BPL mantığını kaybedersiniz, çünkü aynı DLL'i kullanan programlar, DLL'leri iki kere yüklemek zorunda kalır.
Sonuçta A programı, B programının bellek alanına erişemez, çünkü buna işletim sistemi izin vermez.
Sanırım buraya kadar olan kısımda her DLL için işletim sisteminin farklı bir bellek alanı yaratacağını açıklayabilmiş oluyorum.
İşte işletim sisteminin kontrolleri derken anlatmak istediğim de burasıydı.
Sizin programınız, aslında kendisine ait olmayan bir adrese ulaşmaya çalışıyor.
Burada işletim sistemi devreye giriyor ve sizin kullanmak istediğiniz adresin geçerliliğini kontrol ediyor.
Elbette sistemin buna yönetlik optimizasyonları vardır, ama kendi kodunuz çalışırken bu kontrol yapılmıyor, çünkü bu kontroller zaten compile edilirken hallediliyor.
Aynı zamanda şunu da eklemek gerekiyor, Delphi'de bir DLL yarattığınızda kocaman bir uyarı commenti görüyorsunuz:
Eğer string tipi veri aktarımı yapacaksanız, Borlndmm.dll (adını tam hatırlamıyorum) gibi bir dosyayı da dağıtmanız gerekir.
Diğer bir değişle, araya Borland'ın çevirimleri falan giriyor, büyük ihtimalle Delphi String'i Null terminated String'lere çevirerek uyumluluğu sağlıyor.
Yani sizin yazdığınız kod, aslında sizin yazdığınız gibi çalışmıyor, ama aynı işi yapıyor(Bu mesajlarda sürekli garip cümleler kuruyorum, kusuruma bakmayın)
Compiler bir Exe yi derlerken Linkleme Yapıyor (Linker yada Linking gibi bişeydi

ve Exe çalıştığında Exe ile birlikte toplu olarak belleğe yükleniyorlar. Bu durumda muhtemelen @Opt2000 in bahsettiği gibi kendilerine ait bir bellek alanı oluyor ve bunun dışına çıkamıyorlar. (Stack hariç tabi)
Şimdi bu yazdıklarımdan yola çıktığımda, Aynı exe yada aynı dll ve bpl leri kullanan başka bir exe çalıştırıldığında dll ve bpl ler belleğe tekrar yüklenir diyebilirim.
Her Exe kendi bölümündeki bpl ve dll lere ulaşır. Hatta ve hatta muhtemelen işletim sistemi Caching sistemini kullanıyordur ve bu nedenle exe ve modullerinin (bpl, dll vs) belli kısımlarını yükleyebilir.
Şimdi bütün bu yazılanlardan sonra geri baktığımda hala modüllerin neden exe leri yavaşlattığını anlamış değilim ki yavaşlatmadığını idda ediyorum.

Çünkü bir önceki mesajımda da belirttiğim gibi modüller belleğe yüklendikten sonra, (belleğe yüklenmiş olan) exe onları bellekten kullanıyor.. (Amma çok bellek kelimesi kullandım

Bellekte exe üzeinde fazla yer kapladıklarını kabul ediyorum ama zaten günümüz sistemlerindeki belleklerim büyük olduğundan
ve işletim sistemlerinin bellek yönetimlerinin iyi olduğundan dolayı kafaya takacak bir husus olduğunu düşünmüyorum.

Bu arada bende @Opt2000 gibi söylediklerimin doğruluğundan %100 emin değilim. Ama hala devam eden sistem programlama eğitiminde öğrendiklerimden bunları çıkardım. Bir yanlışım varsa ve düzeltilirse sevinirim