Hrkese merhaba, benim 2 tane sorum olacak, bugün aklıma takıldı, teorik bir soru, yorumlanan diller neden az sistem gereksinimi isterken, derlene diller fazla fazla sistem istiyor?
Yorumlama derlemeye göre daha az bellek kullanır. Yorumlayıcıda ara nesne kodu oluşturulmaz bu yüzden daha az belleğe ihtiyaç duyar. Ama çalışma sırasında yorumlayıcının tüm alt programları bellekte tutuluyorsa yorumlayıcı bellek israfına neden olabilir.
Kimin, hangi olcumune gore ve hangi gereksinimler?
Teorik olarak cevaplarsak: Yorumlanan diller, calismasi gereken programin kodundan daha fazlasini (yorumlayici) hafizada tutmak zorunda oldugu icin daha fazla hafiza istiyor. Yorumlanan diller, calismakta olan programi analiz edip hafiza kullanimini optimize edebildikleri icin daha az hafiza istiyor.
benim derdim şu, mesela ben yorumlanan dilleri 4 gb ram takılı olan bilgisayarda rahat rahat çalıştırırken mesela bir c++'ı neden 16 gb’lık ram takılı bilgisayarda çalıştırmak zorundayım. hatta bir python’la yazılmış programı 512 mb’lık ram takılı bilgisayarda çalıtırmıştım.
Merhaba, bence burada yorumlanan dilin/derlenen dilin avantajları dezavantajlarından ziyade yazdığınız kodun çalışabilirliği, efektifliği üzerine konuşmak gerekiyor. Bence burada hepimiz XY problemini yaşıyoruz.
Mesela ben de 8gb RAM’de cpp gibi dillerle gayet rahat çalışıyorum. 2gb RAM’de de çalıştım bu dillerle. Pythonla da çalıştım.
Yazılan algoritmaya bağlı olarak işler tersine bile dönebilir.
Bana kalırsa eğer, eğer bir sorunun çözümünü bulmak adına alakalı olduğunu düşündüğünüz başka bir soruyu soruyorsanız, asıl soruyu sormak, hepimiz için vakit enerji tasarrufu sağlar, sorunu daha çabuk çözmüş oluruz.
Ama eğer asıl soru bu ise, bu konu hakkında pek bilgili olduğum söylenemez.
Böyle bir zorunluluk yoktur. Yazdığın programa göre bellek ihtiyacı değişebilir. Yorumlayı ve derleyici üzerinden aynı programı çalıştırdıysan ve farklı bellek miktarına ihtiyacı olduğunu saptadıysan nedeni muhtemelen budur.
Tabiki farklı nedeni de olabilir. Her iki dilde de aynı işlevi gören yazdığın programı bizimle paylaşırsan kesin nedenini açıklayabiliriz.
Boyle bir zorunluluk yok. 16 GB’lik bilgisayarlarin birkac senedir ortalikta olduklarini ve C++'in 37 yasinda bir dil oldugunu da goz onunde bulundurabiliriz.
16 kb’lik mikroislemcide calisan (micro)python programlari da var
Buradan programlarin gereksinimleri icin onemli olan faktorun hangi dilde yazildiklarindan ziyade ne yaptiklari, ne kadar hafiza (veya baska kaynak) istedikleri oldugunu cikartabiliriz.
32 terabyte hafiza isteyen C kodu:
malloc(0x200000000000ull); // size_t icin `ull` kullanmak ne kadar dogru bilmiyorum
Çok ilginç, kod ne yapıyor ki 32 tb hafıza lazım ?
malloc, belirlenen eleman sayısı kadar bellekte yer ayırır. Tip olarak ull vererek 32 terabayt kadar bellek istenmesi sağlanır.
Anladım teşekkürler. Yani ull 32 terabayt yer ayırıyor. Peki 0x200000000000 ne oluyor ?
0x200000000000
değeri tam sayı olarak 35184372088832
sayısını ifade eder.
35184372088832 / 1024 / 1024 / 1024 / 1024 = 32.0
Yani 35184372088832
bytes → 32
terrabytes