Programların boyutları neden bu kadar büyük?


186

Eski Netscape Navigator programına veya Microsoft Word'ün ilk sürümüne bakarsak, bu programların boyutu 50 MB'tan küçüktü. Şimdi google chrome yüklediğimde 200 MB, Slack'in masaüstü sürümü ise 300 MB. Programların ne kadar olursa olsun tüm kullanılabilir belleği alacağına dair bazı kurallar okudum ama neden?

Mevcut program boyutları neden 10 veya 15 yıl öncesine göre bu kadar büyük? Programlar önemli ölçüde daha fazla işlev yapmıyor ve çok da farklı görünmüyor. Şimdi kaynak domuz nedir?


134
Boyutun sadece 4 katı ?! Modern bir tarayıcının ne kadar daha fazlasını yaptığını düşünürsek şaşırtıcı
Richard Tingle

23
Bir yandan not olarak, 'programlar ne kadar olursa olsun neden kullanılabilir?' Muhtemelen fiziksel disk alanından ziyade rasgele erişim belleğini ifade ediyor, en azından benim yorumum bu olurdu Yanlış olabilirdi.
Trotski94

103
Demek istediğin, bir keresinde 10 dolar değerinde sabit disk alanı kaplayan bir programın şimdi yaklaşık 30 sent değerinde sabit disk alanı kaplaması mı? Endişelenmeyi zor buluyorum.
Eric Lippert

49
“Programlar önemli ölçüde daha fazla işlev yapmıyor” - iyi lord adam. Sadece HTML 4 spesifikasyonuna ve CSS 1 spesifikasyonuna bir göz atın (endişelenmeyin, bekleyeceğim - bunları okumanız bile uzun sürmez). Netscape 4, bunları doğru şekilde uygulayamadı bile. Yalnızca Chrome'un desteklediği yeni ve çılgın HTML ve CSS miktarı oldukça önemlidir. Ayrıca sekmeleri var. Ve her altı haftada bir kendini günceller.
Paul D. Waite

13
BTW. Netscape zamanlarında 50 MB büyüktü, ancak kayıt için sadece web tarayıcısını değil, aynı zamanda posta istemcisini ve HTML editörünü ve hatta belki başka bir şeyi içeriyordu.
el.pescado

Yanıtlar:


266

"Çok farklı görünmek" bir algı meselesidir. Günümüz grafikleri, eskisinden farklı ekran çözünürlüklerinde iyi görünmek zorundadır, bunun sonucunda bir logo için yeterince iyi olan 100x100 bir resim artık çok yapışkan görünüyordu. Aynı şeyin 1000x1000 görüntüsüyle değiştirilmesi gerekiyordu, ki bu tam 100 faktörüdür. (Bunun yerine vektör grafikleri kullanabileceğinizi biliyorum, ancak bu sadece nokta - vektör grafik oluşturma kodunun daha önce gerekmeyen sistemlere eklenmesi gerektiğini vurgulamaktadır, bu nedenle bu yalnızca bir tür boyut artışından kaynaklanan bir dengedir başka bir.)

"Farklı çalışmak" aynı şekilde bir algı meselesidir. Bugünün tarayıcısı, 1995’ten çok daha fazla şey yapıyor . (Yağmurlu bir günde tarihi bir dizüstü bilgisayarla internette sörf yapmayı deneyin - neredeyse kullanılamaz olduğunu göreceksiniz.) %, ancak oradalar.

Bunun da ötesinde, elbette, genel olarak mekanı optimize etmek için daha az zaman harcamak ve yeni özellikler sunmak için daha fazla zaman harcamak eğilimindedir. Bu, herkes için daha büyük, daha hızlı, daha ucuz bilgisayarların doğal bir yan etkisidir. Evet, 1990'da olduğu kadar kaynak verimli programlar yazmak mümkün olacak ve sonuç şaşırtıcı derecede hızlı ve kaygan olacaktı. Ancak artık maliyet etkin olmayacak; tarayıcınızın tamamlanması on yıl alacaktı; bu zamana kadar gereksinimler tamamen değişecekti. İnsanlar verimliliğe aşırı dikkat göstererek program yapıyorlardı çünkü geçmişin yavaş, küçük makineleri onları zorladı ve diğerleri de bunu yapıyordu. En kısa sürede bu değiştikçe, program başarısı için darboğaz çalıştırmak mümkün olmaktan kaymıştır hiç çalıştırangittikçe daha parlak şeyler , ve işte şimdi olduğumuz yer orası.


120
Modern bir tarayıcının içermesi gereken şeylerin somut örnekleri, kripto kütüphaneleri, Unicode veritabanı, bir JavaScript çalışma zamanı ve JIT derleyicisini optimize etmek, video kodekleri, bir PDF oluşturucu, tüm desteklenen MIME türleri için ayrıştırıcı motor ve ayrıştırıcı olacaktır. Bu da artıyor, ancak oyunların aksine tarayıcılar çok sayıda yüksek çözünürlüklü varlık gerektirmiyor. Modern bir Firefox indirme işlemi yalnızca 40-50 MB sıkıştırılmış ağırlıktadır.
amon

23
"sonuç şaşırtıcı derecede hızlı ve kaygan olur" - arzulu düşünme gibi geliyor.
Doc Brown

16
@amon Tarayıcıların ayrıca başka kaynak türleri ve eklentiler için API dahil olup olmadığını da unutmayın. Hatta hata ayıklama araçları (profilleyiciler, ağ analizörleri, eleman denetçileri, tamamen işlevsel bir konsol, hata ayıklayıcılar ve daha fazlası) ile birlikte gelirler. Tarayıcılar, bütün bir işletim sistemine hepimizin hayal edebileceğinden daha fazla yaklaşıyor. Web Meclisi kullanmak için devam eden bir tartışma bile var! OP, bir tarayıcıda toplayabilecekleri saçmalıklara hayran kalmalı.
Ismael Miguel

10
@IsmaelMiguel Chrome OS ile ilgili olarak, tarayıcılar zaten tüm bir işletim sistemidir. ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space Bu. Kod yazarken boşluk veya hız için optimizasyon yapmıyorum. Bakım için optimize ediyorum. Kod tabanının hızlı veya küçük olmaktan kolayca değiştirebilmesi önemlidir. Programın hızıyla ilgili her şikayet için, yeni özellikler için on istek ve daha küçük hale getirmek için sıfır istek alacağım.
user2023861

109

Netscape Navigator'ı modern bir tarayıcıyla karşılaştırırsanız, işlevsellikte büyük fark vardır. Sadece HTML 3.2 Spesifikasyonunu (baskı önizleme yaparken 51 sayfa) geçerli HTML Spesifikasyonu ile karşılaştırın (PDF sürümü 1155 sayfadır). Bu 20x boyutunda bir artış.

Netscape Navigator'da DOM yoktu ve CSS yoktu! Belgede dinamik bir değişiklik olmadı, DOM veya stil sayfalarını değiştiren JavaScript yoktu. Sekme yok. Ses veya video yok. Modern bir tarayıcı, çok daha karmaşık bir programdır.


12
Evet, yeni tarayıcılar animasyonlar, degradeler, görüntü filtreleri efektleri, JavaScript, 2D grafikler (tuval), WebGL ile 3D grafikler, Ses üretimi, Gamepad (!), Video kod çözme, gelişmiş istemci tarafı depolama, Eşler arası iletişim (WebRTC) vb mikrofon / web kamerası, bildirimler için, Coğrafi Konum, WebSocket, WebCryptography, MIDI, erişim
ysdx

1
Ayrıca daha fazla mülke sahip olmak için daha fazla şeyler (DOM, CSS, Javascript) ekleyin (Birden Çok Monitör, çözünürlükte büyük artış: Bilgisayar Ekranları Büyüyor: 1999 - 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k ve ötesi ... 1080 ila 4k çözünürlük dört katına çıkıyor ... 8k yine dört kat artıyor.
WernerCD

7
@WernerCD Daha büyük bir ekrana sahip olmak daha büyük bir ikili dosya gerektirmez. 64 x 64 piksel, 32 bit simge, 800x600 veya 2560x1440 monitörde görüntüleniyor olsa da diskte aynı miktarda alan gerektirir. Pencerenizi yeniden boyutlandırmak, binary'in boyutunu değiştirmez. Ekranlarla önemli olan, piksel katlama gibi şeyler yapmaya başladığınızda, keskin görünmeye devam etmek için daha büyük kaynaklara ihtiyacınız var.
8,

1
@ 8bittree, yazılım performansına daha fazla talep verebilir. Ve daha fazla performans kodu daha karmaşık olabilir (örneğin, Canvas kullanan bir web sitesi muhtemelen SVG'lerden daha fazla karmaşıklık ve kod gerektirir). Ama evet, çoğunlukla haklısın.
Paul Draper

1
Geçerli HTML'nin HTML 3.2'den çok daha fazlasını yaptığı kesin olarak doğru olsa da, belirtimin kendisi de teknik özelliklere önemli miktarda içerik ekleyen çok daha ayrıntılıdır. HTML 3.2'nin EMelementin tanımının uzunluğunu - tam sekiz veya dokuz kelimeyle - aynı 5 HTML'deki spesifikasyonun uzunluğuyla karşılaştırın - benim için, elementi tanımlayan çevreleyen materyal de dahil olmak üzere bir perdeden fazla uygulanabilir ve kullanım amacı nedir.
bir CVn

79

Bunun bir nedeni, uygulamalar içinde paketlenen verilerin daha yüksek çözünürlük ve kalitede olmalarından dolayı daha büyük olmasıdır. Netscape günlerinde bir simge en fazla 32x32 pikseldi, en fazla 8 bit derinliğe sahipti (muhtemelen sadece 4), şimdi muhtemelen 64x64 gibi bir şeydi ve saydamlığı olan gerçek renkte, yani 32 bit derinlik. Bu 16 kat daha büyük. Alan o kadar ucuz ki, insanlar bir PNG oluştururken "sıkıştırılmış" seçeneği kontrol etmekte bile sıkıntı çekmiyorlar.

Başka bir neden, günümüzde uygulamaların, eski uygulamalarda bulunmayan, yanlarında şaşırtıcı miktarda veri bulundurmasıdır. Bugün videoda "başlarken" bir sunumla birlikte gönderilen uygulamalar var .

Diğer bir neden ise, bugün programlama dillerinin, her biri 100 MB'lik ayarlara göre oldukça geniş olan zengin çalışma zamanı ortamlarıyla birlikte gitme eğiliminde olmalarıdır. Çalışma zamanı ortamınızın tüm özelliklerini kullanmasanız bile, her şeyi uygulamanızla birlikte paketlemeniz gerekir.

Fakat asıl sebep, bugün uygulamalarımızda kullanabileceğimiz tonlarca ton kütüphane var ve tekerleğin sürekli yeniden icat edilmesini önlemek için kütüphaneleri kullanma kültürü geliştirdik. Elbette, kütüphaneleri kullanmaya başladığınızda, birkaç soru açılır ve biz onlara en liberal cevapları verme alışkanlığını geliştirdik:

  • İşlevlerimden yalnızca biri tarafından kullanılacaksa, başka bir kütüphane eklemeye değer mi? - evet.

  • Bu kütüphane tarafından sunulan işlevsellik zenginliğinin sadece küçük bir alt kümesine ihtiyacım olursa, başka bir kütüphaneyi eklemeye değer mi? - evet.

  • Dahil edilmesi beni sadece 2 günlük çalışmadan kurtarırsa, başka bir kütüphane eklemeye değer mi? - evet.

  • Bordrodaki farklı programcıların zaten farklı kütüphanelere aşina olmaları nedeniyle aynı amaca hizmet eden çoklu kütüphaneleri dahil etmenin faydası var mı? - evet.

    (Sadece bu eğilimleri gözlemlediğime dikkat edin, onlara katılıyorum ya da katılmama konusunda hiçbir açıklama yapmam.)

Bahsetmemiz başka neden birkaç seçenek arasından hangisinin kullanılacağına uygulamanın karar vermeye çalışırken, bazı kullanıcılar olmasıdır düşünüyorum daha fazla yer kaplar biri elbette tam bir saçmalık olduğunu daha özellikli, olacak meraklısı grafik vb (, olacağı .)

Sonuç olarak, yazılım gaz gibi davranıyor mu? Kullanılabilir alanın tümünü işgal etmeye meyilli midir? Belli bir anlamda evet, ama endişe verici bir ölçüde değil. Sürücülerimizde en çok yer kaplayan şeylere bakarsak, çoğumuz için cevap, uygulamaların değil, film ve müzik gibi medyaların çok uzak olduğudur . Yazılım, depolama kapasitesinin genişlediğiyle aynı hızda şişmiyor ve gelecekteki uygulamaların, kullanıcılar için mevcut depolama alanının önemsiz bir bölümünü temsil etmesi muhtemeldir .


17
Bu doğru cevap. (Günümüzde) daha yüksek oy alan yorumlar, daha fazla işlevsellikten bahseder, ancak bu artan büyüklüğü tam olarak açıklamaz. Boyut, bu işlevleri sağlayan dahil edilen kütüphanelerden gelir .
user1936 24:15

5
@IsmaelMiguel, düzenli kullanıcılar hakkında konuşuyordum. Ayrıca, oyunlar özel bir durumdur çünkü bu 35GB'lık kodlar ve kütüphaneler değil çoğunlukla medyadır. Sadece oyun olan özel bir uygulama ile izleyebileceğiniz medya oluyor. Fakat bir oyuncu için bile, 35GB bugünün terabaytlı disklerinde hiçbir şey ifade etmiyor. Her neyse, küçük bir sürücüye sahip olmak konusunda ısrar eden bir oyuncuysanız, o zaman hiçbir yerde oradaki kullanıcıları temsil edemediğinizi varsayalım.
Mike Nakis

2
@MikeNakis Her oyuncunun 1TB sürücüsü veya 256 GB'lık bir SSD satın almak için parası yoktur. Bazılarının da benim gibi 128GB'lık bir SSD'si veya 500GB'tan daha az dizüstü bilgisayarı var. Bir süre önce SSD alan kullanımımın% 80'i basitçe oyundu. Sadece 3-4 oyundu, mekanı yiyordu. Oyunun kendisinde, neredeyse herkesin bir dizüstü bilgisayarı var ve üzerinde oynuyor.
Ismael Miguel

5
@Mike oh, önemli değil. Bir uygulamanın boyutundan bahsettiğimizde, indirilebilir yükleme dosyasının boyutu veya bir kez yüklendikten sonra uygulamanın kullandığı toplam alan anlamına gelir. Bu kütüphaneler, medya, veri, her şeyi içerir. Ve günümüzde, uyumsuzluk sorunlarından kaçınmak için uygulamalar, kütüphanelerin zaten kurulduğunu ve doğru sürümde olacağını ummak yerine genellikle ihtiyaç duydukları kütüphanelerin çoğuyla birlikte gönderilir. Ana çalıştırılabilir dosyanın boyutu ne gerçekten ne de herhangi bir sonuçtan değil.
Mike Nakis

3
@IsmaelMiguel Bir programcı için, muhtemelen farklı sanal makineleri, liman kapları vb. Bütün şişirilmiş sistemleri çoğaltmaktan daha iyi bir şişkinlik yoktur ;-)
cmaster

16

Diğer kullanıcılara ek olarak, 10 yıl önce tipik olarak yerelleştirilmiş / uluslararasılaştırılmış sürümler için ayrı sürümler olacaktı. Şimdi genel olarak, programların, program boyutunu dolduran her yayımlanan sürüme tam yerelleştirme desteği sağlaması gerekir.


5
Yanılıyor olabilirim, ancak dizgilerin bu sorunun en az parçası olduğu ilüzyonunda çalışıyorum. Doğru, orada birçok dil var, ama yine de bir kullanıcının gördüğü karakter dizileri çok sınırlı. Sonuçta, kullanıcı arayüzünüzde başarısız olmanın en kesin yollarından biri çok fazla metin eklemektir.
cmaster

5
@Cmaster söylediklerine ekleme, Firefox özellikle gelmez değil tam yerelleştirme paket (ve bu konuda düşünme, ne yapar yerken OpenOffice.)
BenjiWiebe

2
@cmaster Dizeleri, hayır. Ama özellikle oyunlar bağlamında yerelleştirilmiş video ve ses? IIRC,> 10 GB'ın tamamen yerelleştirildiği 60 GB'lık bir oyun (GTA V?) Vardı. Bu önemli bir yığın.
Bob

@ Doğru, oyunlar hakkında düşünmüyordum, yazdıklarım için büyük bir istisna gibi görünüyorlar.
cmaster

Her dil için, dize tablosu birkaç ekstra K baytı ekleyebilir. Yalnızca tek başına uygulama simgeleri, genellikle tüm dizge içeriğinin toplam boyutunu (gömülü sözlükler olan olası istisnalar hariç)
cüce

13

Bunun bir nedeni bağımlılıklardır. Zengin işlevselliğe ve iyi görünüme sahip bir program yapılması gereken çok şey gerektirir - şifreleme, yazım denetimi, XML ve JSON ile çalışma, metin düzenleme ve diğer birçok şey. Nereden geliyorlar? Belki kendi yuvarlanıp onları olabildiğince küçük tutuyorsun. Büyük olasılıkla, asla ihtiyaç duymadığınız çok fazla işleve sahip üçüncü taraf bileşenleri (belki de MIT lisanslı açık kaynak) kullanıyorsunuz, ancak bir kez daha üçüncü taraf bileşenlerden tek bir işleve ihtiyaç duyduğunuzda, genellikle tüm bileşeni taşımak zorundasınız. Böylece gittikçe daha fazla bağımlılık ekliyorsunuz ve onlar kendileri geliştikçe ve büyüdükçe kendilerine bağlı olan programınız da büyüyor.


Bunun neden bir gecede iki aşağı oy aldığını merak ediyorum.
sharptooth 25:15

6
Yapmadım ama bunun gerçekten soruyu yeterince derinlemesine cevapladığını sanmıyorum. Hemen hemen sadece "yazılım daha büyük şeyler yaptığı için büyüdü" diyor ve diğer cevaplarda bundan daha fazlasını olduğunu göreceksiniz.
Orbit'te Hafiflik Yarışları

1
İlgili bir faktör, statik bağlanma kullanan sistemlerde, bir bağlayıcının yalnızca gerçekten kullanılan [bazı bağlayıcılar her zaman her şeyi çeker, ancak daha iyi olanları seçici olmaya çalışır] kodunu çekmesi gerekebilir. Dinamik bağlantı kullanılırken, özellikle modüller paylaşılabiliyorsa, bir modül kuran ilk kod ondan sadece bir işleve ihtiyaç duysa bile, modülü paylaşmak isteyen diğer kod için hangi işlevlerin gerekli olduğunu bilmenin bir yolu yoktur.
supercat

@sharptooth Artık merak bile etmiyorum. Çoğu durumda sistem çalışırken, aynı zamanda çok yanlış bir şekilde kırılmış cevapların çılgınca göründüğünü ve kabul edildiğini görürsem de, doğru cevaplar sık ​​sık kayıtsızlığa düşürülürken ...
Brian Knoblauch

10

Grafikler / kullanılabilirlik gerçekten katkıda bulunan faktörler olsa da, kütüphane / fazla derlenmiş koddan çok daha fazlası var.

Küçük kodun hala CAN olabileceğine örnek: MenuetOS, tek bir diskete sığacak güçlü uygulamalara sahip tam 64 bit işletim sistemi.

Açık bir neden olmadan ne kadar büyük kodun olabileceğine örnek: Basit bir metin çıktısı "Merhaba, Dünya!" Son zamanlarda Ada'da. Derlenmiş çalıştırılabilir dosya 1 MiB! Montajda aynı çalıştırılabilir, sadece bir KiB veya 2'dir (ve bunların büyük kısmı çalıştırılabilirdir, gerçek çalışan kod onlarca bayttır).


3
Disket nedir? ;)
500 - Dahili Sunucu Hatası

@ 500-InternalServerError Ada Nedir? : D
BenjiWiebe

3
yeni başlayanlar için, disket yaklaşık 1,4 MiB
Sarge Borsch

3
200 baytın altındaki modern Ada çalıştırılabilirlerini gördüm. Ancak derleyiciniz varsayılan olarak tam bir çalışma zamanı gibi şeyler alırsa, görevleri kullanıp kullanmamanız, o zaman 1 MB olması beklenir. Ve genellikle onu sıyırma zahmetine değmez.
Brian Drummond

@BrianDrummond, gerçekten berbat bir çalışma zamanı ya da berbat bir çalışma zamanı ve kütüphane ve linker gibi geliyor. Yıllar önce gördüğüm bir eğitim videosunda Jean Ichbiah ve diğerleri, tipik bir Ada çalışma zamanının (dilin orijinal sürümü için) yaklaşık 4K olacağını belirtti. Meraktan, bunu kullandığımız TI 320C30 çalışma zamanı paketine göre kontrol ettim. Tam paradaydı.
John R. Strohm

7

Yazılımın iki şeye uyacak şekilde inşa edilmesi gerektiği çok önemlidir: Kullanıcılar ve kullanılabilir donanım. Bir program, kullanıcının istediği donanım ile zamanında istediği şeyi yaparsa, amacına uygundur. Peki ya. Ancak donanım temel olarak tüm ölçülebilir boyutlarda geliştikçe, uyumsuzluktan sığmaya doğru hareket eden ayrık programların sayısı artar - tasarım alanı büyür:

  • Daha yüksek seviyeli diller fikirleri eskisinden daha az kod ve zamanda ifade etmeyi mümkün kılar. Bu indirgenmiş karmaşıklık, tersine, giderek daha karmaşık fikirleri ifade etmeyi mümkün kılar.
  • Donatılacak uygulama ile daha fazla veri anında daha kullanışlı hale getirebilir. Örneğin, yazım denetimi uygulamalarının insanlık tarafından bilinen her dille bir araya gelmesi çok uzun sürmeyecek - sonuçta bu sadece birkaç gigabayt.
  • Donanım takası , geliştiricilere ve kullanıcılara, hangi kaynaklara önem verdiklerini seçme şansı verir. Bakınız örneğin FLAC / OGG vs WAV, SVG vs PNG, veritabanı indeksleri.
  • İnsani arayüzler çoğu zaman, kullanılabilirlik için daha önce büyük miktarda donanıma ne kadara mal olur. Kenar yumuşatma, yüksek çözünürlük, hızlı yenileme ve ayrık panellerin miktarları arasında kaydırma, hepsi daha gerçekçi ve dolayısıyla sezgisel ve sevindirici bir deneyim için yapar.

6

Bu, Android uygulamaları için kesinlikle geçerlidir. Dört yıl önce, basit bir uygulama yaklaşık 2-5 megabayt yer aldı. Günümüzde basit bir uygulama yaklaşık 10-20 megabayt yer kaplıyor.

Ne kadar fazla yer kullanılabilir olursa, uygulama boyutu o kadar büyük olur.

Android durumunda iki ana neden olduğunu düşünüyorum:

  • Google Android çerçevesini genişletti, birçok yeni işlevsellik ekledi.

  • Geliştiriciler artık umursamıyor. Görüntüler çok daha yüksek bir çözünürlüğe dahil edilir (elbette akıllı telefon ekranı çözünürlükleri arttı), üçüncü taraf kütüphaneleri düşüncesizce dahil edildi.


1
Bu son kurşun noktası tam olarak doğru.
Orbit'te Hafiflik Yarışları

3
Toplam bir android uygulaması yaptım ve APK 0.05 MB. Sonra tekrar, o kadar yapmaz. Hala bir kronometre uygulamasının (benimkiyle aynı miktarda işlevselliğe sahip, tamamen farklı olsa da) neden birkaç MB aldığını merak ediyorum.
immibis

5
Son madde noktası yanlıştır, geliştiriciler yapmak bakımı. Sadece çeşitli öncelikleri dengelemek zorundayız ve bu uygulamayı biraz daha büyük hale getirmek mantıklı.
NPSF3000

Ayrıca, SDK'nın (o sırada) ihtiyaç duymadığım 0.05 MB uygulamama 5 + MB'lık bir kütüphane eklemekte ısrarcı olduğunu ve bir sürüm oluşturmadan önce kaldırmayı hatırlamam gerektiğine yardımcı olmadı.
immibis

4

Birçoğu geliştirici zamanına ve o zamanın maliyetine kadar kaynamaktadır. Visual Basic sahneye ilk geldiği günlerde, C / C ++ ile rekabet ediyordu ve bunun karşısına çıkan en büyük şey ANSI C for Windows'ta 'Merhaba Dünya'yı belki 15K'da yazabilmekti. VB ile ilgili problem, her zaman 300K çalışma zamanı kütüphanesinin albatrosuna sahip olmanızdı.

Şimdi, VB programınızın boyutunu 10 kat artırabilirsiniz ve yine de sadece birkaç K daha fazla olacaktır, ancak C / C ++ programınızın boyutunun 10 katıdır ve birkaç AY daha fazla gelişmeye bakıyorsunuzdur.

Sonunda, uygulamalarınızın kabarması, kalkınma üretimindeki büyük atılımlar, fiyattaki düşüş ve eski el yapımı geliştirme günlerinde asla mümkün olmayacak olan yeteneklerin büyüklüğü için ödenmesi gereken küçük bir bedeldir; programlar küçük ve hızlıyken, fakat aynı zamanda zayıf olduklarında, birbirleriyle bağdaşmadıklarında, az özellikli ve geliştirilmeleri maliyetli olmuştur.


2
Bu yazı okumak oldukça zordur (metin duvarı). Sakıncası var düzenleyebilir daha iyi bir şekle ing?
tatarcık

1
Hello World'ün "10x boyutunda" "aylarca daha fazla gelişme" gerektiriyor mu? Dişlerinizi on kez fırçalamak, bir ay boyunca durmadan aynanın önünde durmayı gerektirir mi?
bcrist

Dişlerin x kez fırçalanması x'in doğrusal bir işlevidir, ancak programlama genellikle doğrusal bir işlev değildir. Her kod satırını en düşük seviyeli dil fonksiyonlarını kullanarak yaparsanız, hızlı ve küçük kodlar elde edersiniz, ancak karmaşıklık seviyesi başına daha yüksek bir maliyetle elde edersiniz. Yüksek seviyeli diller daha fazla şişirir ancak maliyeti karmaşıklığın doğrusal bir fonksiyonuna daha yakın tutar.
andyb

2

Zamanla, kullanıcının ihtiyaçları gittikçe daha fazla talep ediyor ve bu nedenle farklı yazılımların satıcıları / yazarları bu ihtiyaçları rekabet adına karşılamak zorunda kalıyor.

Ancak yeni bir ihtiyacı karşılamak, genellikle yeni kod eklemek anlamına gelir. Yeni kod, düzeltilecek yeni güvenlik açıkları anlamına gelir. Yeni güvenlik açıklarını düzeltmek, yeni güvenlik açıklarına kod ekleyebilir veya kapılar açabilir.

Bir kullanıcının ihtiyacını karşılamak için eklenen her özellik, hız için daha fazla işlemci gücüne (bu veya bu tarayıcının hızından hepimiz şikayetçi olur), daha iyi görsel efektler için yeni grafik kaynaklara, vb. İhtiyaç duyabilir.

Bütün bunlar yeni uygulama katmanları (kod), güvenlik ve bazen de donanım eklemek anlamına gelir.


0

Boyutların çoğu yerleşik kütüphanelerden geliyor. Günümüzde pek çok uygulama, uygulama ile çok büyük miktarda birleşen elektron kullanılarak oluşturulmaktadır. Linux'a uygulama yüklerseniz, bunlar genellikle çok daha küçüktür, çünkü uygulamanın çoğu zaten diğer programların da kullandığı paylaşılan kütüphaneler aracılığıyla yüklenmiştir.


-1

Yazılım oluştururken, eğer A işlevine ihtiyacınız olursa, bir modül A * 'yı içe aktaracaksınız. A * A'yı çözebilir, ancak A * sorunları A'dan daha fazla çözebilir ve A * büyük olabilir. Tüm büyük modüller büyük boyutlu yazılımlarla sonuçlanır.

Belki aynı durum değil, ama bunun gibi bir şey: Java kullanarak konsolda "merhaba dünyasını" basmanız gerekiyorsa, JRE (> 60MB) kurulu olmalıdır.

Java örneği iyi değilse, şunu deneyin: Yazılımın dosyaya giriş yapması gerekiyorsa, veri tabanına, ağ üzerinden ve diğer bazı özelliklere göre günlük kaydı yapabilen bir günlük modülü kullanabilir, ancak işlevler hiçbir zaman kullanılmaz. proje.


Tam olarak neden 5 açıklayıcı var ve nedenini açıklayan tek bir yorum yok?
Kromster

1
@KromStern İlk bölüm, kütüphanelerin çalışma şeklini büyük ölçüde yansıtır ve bunu tutarsız kullanımıyla çok net bir şekilde yapar code. Bunun soruyu gerçekten cevaplamadığını iddia ediyorum. İkinci bölüm Java'yı örnek olarak kullanır (yine de, JRE'nin uygulama büyüklüğünün büyümesinin bir parçası olarak görülmesi gerektiğini iddia etmeye çalışsa da, yine de sorunun amacını özlüyor ve hiç adil bir örnek değil ve sürekliliğini sürdürmeye devam ediyor). Java yanlış anlamaları). Hepsi hepsi yanlış veya önceki, daha iyi yazılmış cevaplarda puanları tekrar ediyor.

1
Ağ veya dosyaya günlük Sizin örnek, iyi bir değildir ya - kodun açısından, hem dosya ve ele çünkü tam olarak aynı şekilde (dosya ve ağ arasında ayrım işletim sistemi tarafından ele alınır). Oracle'ın MySQL vs Sql Server vs Postgres vs ... sürücüleri ve diyalektik farklılıkları nedeniyle karmaşık olacağı için temel işlevselliğinin bir parçası olarak "veritabanına giriş yapan" bir kayıt çerçevesi görmedim.

@ user40980 Dosya ve ağ arasındaki fark işletim sistemi tarafından ele alınmaz. Bağlanmak ve yazmak için farklı işletim sistemi çağrıları gerekir. Veritabanına erişim, JDBC veya libdbi gibi bir veri tabanı bağımsızlık katmanı ile gerçekleştirilir. (Sırasıyla, desteklenen tüm farklı veritabanları için sürücülere yol açabilir!)
immibis

-2

Programların ne kadar olursa olsun tüm kullanılabilir belleği alacağına dair bazı kurallar okudum ama neden?

Bu tam olarak doğru değil. İşletim sistemi bellek baskısı altına girinceye kadar, sistemler tükettikleri belleği serbest bırakmazlar. Bu bir performans iyileştirmedir. Resimlerin olduğu bir sayfaya göz atıyorsanız, uzaklaşırsınız. Geri dönüp görüntüye tekrar ihtiyaç duyabilirsiniz. İşletim sisteminde RAM varsa, bir daha ihtiyacınız olmayacağından emin olana kadar belleği temizlemenin bir anlamı yoktur.

Hafızanın derhal silinmesi, büyük olasılıkla büyük olasılıkla yüksek hassasiyetli web sayfalarının ekranda görüntülenmesini istediklerinde CPU döngülerini ve hafıza bant genişliğini kullanıcıdan uzak tutacaktır.

İşletim sistemi, çoğu dosya sistemi önbelleği için geçerli olan tüm uygulama dışı belleği tüketir.

Hafıza yönetimi zor bir problem ancak üzerinde çok zeki insanlar var. Hiçbir şey bilerek boşa harcanmıyor ve asıl amaç size çok duyarlı bir bilgisayar sağlamak.


3
Bu söylediklerin ne olduğu hakkında değil. Sanal bellek ve çöp toplama bu teklif yazıldığında henüz icat edilmişti ve yaygın değildi.
Jörg W Mittag

-2

Programların, ızgara kilitli bir otoyolda yeni şeritler eklediğiniz banliyö fenomenine benzer şekilde, mevcut alanı doldurma yönünde genişleme eğiliminde olduğu doğrulanabilir ve birkaç yıl içinde trafik tekrar yedeklenir.

Fakat eğer araştırırsanız, programların gerçekten daha fazla iş yaptığını görebilirsiniz. Örneğin, meraklısı grafikler çalıştıran tarayıcılar, birkaç yıl önce bulunmayan kaygan geliştirici araçlara sahipler, vb. Bu nedenle, programlar kullanılabilir belleği doldurmak için boyut olarak artarken, bazıları meşru sebepler olabilir.


2
Bu, önceki 13
cevapta

-3

Optimize edilmemiş nesneler üzerine inşa edilen kütüphanelerin yüklenmesi, kurulması ve çalıştırılması için daha fazla bilgi işlem döngüsü için daha fazla bellek gerekir. Nesne kodu çoğunlukla şişkinlik içindir.

Geçerli assert olduklarından emin olmak için tüm assert () ed nesnesi çağrılarını görmek için çalışan standart C ++ kodunu kullanın. Nesneleri içine alan nesnelerin katmanına katman tasarladığınızda alt tabakalar şişirilir ve opaktır. Programcılar tembelleşir ve daha fazla nesneye bürünür çünkü ihtiyaç duyulan işlevsellik ile sınırlı olanı yeniden tasarlamaktan daha hızlıdır. Gerçekten bu kadar basit.

Ismarlama uygulamaların boyutuna göre, sadece çekirdek olan Linux çekirdeğinin boyutunu düşünün. Çekirdek tüm makineyi çalıştırabilir. Ancak uygulamalar kadar çabuk kurgulanmadı, en iyi işlevselliği sağlamak zaman alıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.