Perché le dimensioni dei programmi sono così grandi?


186

Se guardiamo il programma vintage Netscape Navigator o una versione precedente di Microsoft Word, quei programmi avevano dimensioni inferiori a 50 MB. Ora quando installo google chrome sono 200 MB e la versione desktop di Slack è 300 MB. Ho letto di alcune regole secondo cui i programmi occuperanno tutta la memoria disponibile, non importa quanto sia, ma perché?

Perché le dimensioni attuali dei programmi sono così grandi rispetto a 10 o 15 anni fa? I programmi non svolgono molte più funzioni e non sembrano molto diversi. Che cos'è ora il porco di risorse?


134
Solo 4 volte le dimensioni ?! È incredibile considerando quanto fa di più un moderno browser
Richard Tingle,

23
Come nota a margine, credo "alcune regole secondo cui i programmi occuperanno tutta la memoria disponibile, non importa quanto sia ma perché?" probabilmente si riferisce alla memoria ad accesso casuale piuttosto che allo spazio fisico su disco, almeno questa sarebbe la mia interpretazione di essa. Potrebbe essere sbagliato.
Trotski94,

103
Quindi quello che stai dicendo è che un programma che una volta occupava $ 10 di spazio su disco rigido ora occupa circa 30 centesimi di spazio su disco? Trovo difficile preoccuparmi di questo.
Eric Lippert,

49
"I programmi non svolgono molte più funzioni" - bravo signore. Dai un'occhiata alle specifiche HTML 4 e alle specifiche CSS 1 (non ti preoccupare, aspetterò - non ti ci vorrà molto anche se le leggi). Netscape 4 non è nemmeno riuscito a implementarli correttamente. La quantità di HTML e CSS nuovi e folli supportati da Chrome è considerevole. Inoltre ha schede. E si aggiorna ogni sei settimane.
Paul D. Waite,

13
BTW. 50 MB nei tempi di Netscape erano grandi, ma, per la cronaca, includeva non solo browser web ma anche client di posta ed editor HTML e forse anche qualcos'altro.
el.pescado,

Risposte:


266

"L'aspetto molto diverso" è una questione di percezione. La grafica di oggi deve avere un bell'aspetto con risoluzioni dello schermo totalmente diverse rispetto a una volta, con il risultato che un'immagine 100x100 che era più che buona per un logo ora apparirebbe orribilmente di cattivo gusto. Ha dovuto essere sostituito con un'immagine 1000x1000 della stessa cosa, che è un fattore 100 proprio lì. (So ​​che invece puoi usare la grafica vettoriale, ma questo sottolinea solo il punto: il codice di rendering della grafica vettoriale ha dovuto essere aggiunto a sistemi che non ne avevano bisogno prima, quindi questo è solo un compromesso da un tipo di aumento delle dimensioni ad un altro.)

"Lavorare diversamente" è anche una questione di percezione. Il browser di oggi fa molto più di uno rispetto al 1995. (Prova a navigare in Internet con un laptop storico un giorno di pioggia - scoprirai che è quasi inutilizzabile.) Non molti di loro sono usati molto e gli usi potrebbero non essere completamente consapevoli di 90 % di loro, ma sono lì.

Oltre a ciò, naturalmente, c'è la tendenza generale a dedicare meno tempo all'ottimizzazione delle cose per lo spazio e più all'introduzione di nuove funzionalità. Questo è un effetto collaterale naturale di computer più grandi, più veloci ed economici per tutti. Sì, sarebbe possibile scrivere programmi efficienti in termini di risorse come nel 1990 e il risultato sarebbe incredibilmente veloce e fluido. Ma non sarebbe più conveniente; il completamento del browser richiederebbe dieci anni, entro i quali i requisiti sarebbero completamente cambiati. Le persone erano solite programmare con estrema attenzione all'efficienza perché le macchine lente e piccole di un tempo le costringevano a farlo, e lo facevano anche tutti gli altri. Non appena questo è cambiato, il collo di bottiglia per il successo del programma è passato dalla possibilità di correre alla corsasempre più cose luccicanti , ed è qui che siamo ora.


120
Esempi concreti di cose che un moderno browser dovrebbe includere sarebbero le librerie di crittografia, il database Unicode, un runtime JavaScript e l'ottimizzazione del compilatore JIT, i codec video, un renderer PDF, oltre a un motore di rendering complicato e parser per tutti i tipi MIME supportati. Ciò si aggiunge, ma a differenza dei browser di giochi non richiedono molte risorse ad alta risoluzione. Un moderno download di Firefox pesa solo 40-50 MB compressi.
amon,

23
"il risultato sarebbe incredibilmente veloce e fluido" - sembra un pio desiderio.
Doc Brown,

16
@amon Non dimenticare che i browser includono anche altri tipi di risorse e un'intera API per plugin e quant'altro. Sono persino dotati di strumenti di debug (profiler, analisti di rete, ispettori di elementi, una console completamente funzionale, debugger e molto altro). I browser si stanno avvicinando a un intero sistema operativo di quanto possiamo immaginare. C'è persino una discussione in corso per utilizzare Web Assembly! L'OP dovrebbe essere stupito dalla tonnellata di schifezze che possono accumularsi in un browser.
Ismael Miguel,

10
@IsmaelMiguel Per quanto riguarda Chrome OS, i browser sono già un intero sistema operativo. ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space Questo. Quando scrivo codice, non ottimizzo per spazio o velocità. Ottimizzo per la manutenzione. È più importante che il codebase possa cambiare facilmente che essere veloce o piccolo. Posso aspettarmi che per ogni lamentela sulla velocità del programma, riceverò dieci richieste per nuove funzionalità e zero richieste per ridurlo.
user2023861

109

Se si confronta Netscape Navigator con un browser moderno, c'è una differenza enorme nella funzionalità. Basta confrontare le specifiche HTML 3.2 (51 pagine quando faccio un'anteprima di stampa) con le specifiche HTML correnti (la versione PDF è 1155 pagine). Questo è un aumento di 20 volte in termini di dimensioni.

Netscape Navigator non aveva un DOM e non aveva CSS! Non ci sono state variazioni dinamiche del documento, nessun JavaScript che modifica il DOM o i fogli di stile. Nessuna scheda. Nessun audio o video. Un browser moderno è un programma molto più complesso.


12
Sì, i browser recenti eseguono animazioni, gradienti, effetti di filtri immagine, JavaScript, grafica 2D (canvas), grafica 3D con WebGL, generazione audio, gamepad (!), Decodifica video, archiviazione avanzata lato client, comunicazione peer-to-peer (WebRTC), geolocalizzazione, WebSocket, crittografia Web, MIDI, accesso a mic / webcam, notifiche, ecc.
ysdx

1
Aggiungi altre attività (DOM, CSS, Javascript) per avere anche più proprietà immobiliari (monitor multipli, aumento massiccio della risoluzione: schermi di computer che diventano più grandi: dal 1999 al 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k e oltre ... Da 1080 a 4k è quadrupla la risoluzione ... 8k è di nuovo quadrupla.
WernerCD,

7
@WernerCD Il semplice fatto di avere uno schermo più grande non richiede un binario più grande. Un'icona da 64 per 64 pixel a 32 bit richiederà la stessa quantità di spazio sul disco sia che venga visualizzata su un monitor 800x600 o 2560x1440. Il ridimensionamento della finestra non modifica le dimensioni del file binario. Ciò che conta con i display è quando inizi a fare cose come il raddoppio dei pixel, quindi hai bisogno di maggiori risorse per continuare a sembrare nitido.
8

1
@ 8bittree, può porre una domanda maggiore sulle prestazioni del software. E un codice più performante può essere più complesso (ad esempio un sito Web che utilizza Canvas probabilmente ha bisogno di più complessità e codice di uno che utilizza SVG). Ma sì, hai quasi sempre ragione.
Paul Draper,

1
Mentre è certamente vero che l'attuale HTML fa molto di più rispetto a HTML 3.2, la specifica stessa è anche molto più dettagliata, il che aggiunge una quantità significativa di contenuto alla specifica. Confronta la lunghezza della descrizione EMdell'elemento HTML 3.2 - otto o nove parole complete - con la lunghezza dello stesso nella specifica HTML 5 - per me, più di uno schermo che include il materiale circostante che descrive l'elemento, dove è applicabile e qual è la sua destinazione d'uso.
un CVn il

79

Uno dei motivi è che i dati impacchettati all'interno delle applicazioni sono più grandi perché hanno una risoluzione e qualità più elevate. Un'icona ai tempi di Netscape era al massimo di 32x32 pixel, con una profondità massima di 8 bit, (probabilmente solo 4,) mentre ora è probabilmente qualcosa come 64x64 ed è in vero colore con trasparenza, che significa profondità a 32 bit. È 16 volte più grande. E lo spazio è così economico che le persone spesso non si preoccupano nemmeno di controllare l'opzione "compressa" quando si genera un PNG.

Un altro motivo è che le applicazioni oggigiorno portano con sé una quantità sbalorditiva di dati, cosa che le applicazioni meno recenti non avevano. Esistono oggi applicazioni che vengono spedite insieme a una presentazione "introduttiva" in video .

Un altro motivo è che oggi i linguaggi di programmazione tendono ad andare insieme a ricchi ambienti di runtime, che sono abbastanza grandi, per un valore di 100 MB ciascuno. Anche se non usi tutte le funzionalità del tuo ambiente di runtime, devi comunque impacchettare il tutto con la tua app.

Ma il motivo principale è che oggi esistono tonnellate e tonnellate di librerie là fuori che possiamo usare nelle nostre applicazioni, e abbiamo sviluppato una cultura di utilizzo delle librerie per evitare la costante reinvenzione della ruota. Naturalmente, una volta che inizi a utilizzare le librerie, vengono visualizzate diverse domande e abbiamo sviluppato l'abitudine di fornire loro le risposte più liberali:

  • Vale la pena di includere un'altra libreria se verrà utilizzata solo da una delle mie funzioni? - Sì.

  • Vale la pena includere un'altra libreria se ho bisogno solo di un piccolo sottoinsieme dell'intera ricchezza di funzionalità offerta da quella libreria? - Sì.

  • Vale la pena di includere un'altra libreria se la sua inclusione mi salverà solo da 2 giorni di lavoro? - Sì.

  • Vale la pena includere più librerie che servono più o meno allo stesso scopo solo perché diversi programmatori nel mio libro paga hanno già familiarità con librerie diverse? - Sì.

    (Nota che sto solo osservando queste tendenze, non sto affermando in alcun modo se sono d'accordo o in disaccordo con esse.)

Un altro motivo degno di nota è che quando si tenta di decidere quale applicazione utilizzare tra diverse scelte, alcuni utenti pensano che quella che occupa più spazio sarà più ricca di funzionalità, avrà una grafica più elaborata, ecc. (Che è un'assurdità completa, ovviamente .)

Quindi, per concludere, il software si comporta come il gas? Tende ad occupare tutto lo spazio disponibile? In un certo senso sì, ma non in modo allarmante. Se guardiamo a ciò che occupa più spazio sui nostri dischi, per la maggior parte di noi la risposta è che non sono le applicazioni, ma i media come film e musica di gran lunga . Il software non ha gonfiato alla stessa velocità con cui la capacità di archiviazione si è espansa ed è improbabile che lo sarà mai, quindi in futuro le applicazioni rappresenteranno probabilmente una frazione trascurabile dello spazio di archiviazione disponibile per gli utenti.


17
Questa è la risposta corretta I commenti (attualmente) più votati menzionano più funzionalità, ma ciò non spiega completamente la dimensione aumentata. Le dimensioni provengono dalle librerie incluse che forniscono tali funzionalità.
user1936

5
@IsmaelMiguel, stavo parlando di utenti regolari. Inoltre, i giochi sono un caso speciale, perché questi 35 GB sono principalmente supporti multimediali, non codici, né librerie. Capita solo di essere un media che puoi vedere solo tramite un'applicazione speciale, che è il gioco. Ma anche per un giocatore, 35 GB non sono nulla sulle unità multi-terabyte di oggi. In ogni caso, supponiamo che se sei un giocatore che insiste sul possesso di un piccolo disco, non sei in nessun posto vicino rappresentante degli utenti là fuori.
Mike Nakis,

2
@MikeNakis Non tutti i giocatori hanno un'unità da 1 TB o i soldi per acquistare un SSD da 256 GB. Alcuni, come me, hanno un SSD da 128 GB o un laptop con meno di 500 GB. Qualche tempo fa, l'80% del mio utilizzo dello spazio SSD era semplicemente giochi. Sono stati semplicemente 3-4 giochi, mangiando spazio. E nel gioco stesso, quasi tutti hanno un laptop e ci giocano.
Ismael Miguel,

5
@ Mike oh, non importa. Quando parliamo della dimensione di un'applicazione intendiamo la dimensione del file di installazione scaricabile o lo spazio totale occupato dall'applicazione sul disco una volta installato. Ciò include librerie, media, dati, tutto. E al giorno d'oggi, al fine di evitare problemi di incompatibilità, le applicazioni di solito vengono spedite insieme alla maggior parte delle librerie di cui hanno bisogno, invece di sperare che le librerie siano già installate e siano della versione giusta, ecc. La dimensione del file eseguibile principale non realmente di alcun interesse, né di alcuna conseguenza.
Mike Nakis,

3
@IsmaelMiguel Per un programmatore, è probabile che siano le loro diverse macchine virtuali, contenitori docker e così via. Non c'è esagerazione migliore della moltiplicazione di interi sistemi gonfiati ;-)
cmaster

16

Oltre alle altre risposte, 10 anni fa in genere ci sarebbero state versioni separate per le versioni localizzate / internazionalizzate. Ora è generalmente il caso che i programmi raggruppino il supporto completo per la localizzazione in ogni versione rilasciata che rispecchi le dimensioni del programma.


5
Potrei sbagliarmi, ma sto lavorando con l'illusione che le stringhe siano la minima parte di questo problema. È vero, ci sono molte lingue là fuori, ma la quantità di stringhe che un utente vede mai è molto limitata. Dopotutto, uno dei modi più sicuri per fallire nell'interfaccia utente è includere troppo testo.
cmaster

5
Aggiungendo a quanto detto da @cmaster, Firefox in particolare non raggruppa la localizzazione completa (e mentre ci sto pensando, nemmeno OpenOffice.)
BenjiWiebe,

2
@cmaster Strings, no. Ma video e audio localizzati, specialmente nel contesto dei giochi? IIRC esisteva un gioco da 60 GB (GTA V?) In cui> 10 GB era esclusivamente audio localizzato. Questo è un pezzo significativo.
Bob,

@Bob Giusto, non stavo pensando ai giochi, sembrano essere l'unica grande eccezione a quello che ho scritto.
cmaster

Per ogni lingua, la tabella delle stringhe potrebbe aggiungere fino a qualche K byte aggiuntivo. Solo le icone delle applicazioni da sole in genere riducono la dimensione totale di tutto il contenuto delle stringhe (le possibili eccezioni sono le applicazioni con dizionari incorporati)
Andyb,

13

Uno dei motivi sono le dipendenze. Un programma con funzionalità avanzate e un bell'aspetto richiede molte cose: crittografia, controllo ortografico, utilizzo di XML e JSON, modifica del testo e molte altre cose. Da dove verrebbero? Forse arrotoli il tuo e tienilo il più piccolo possibile. Molto probabilmente usi componenti di terze parti (forse open source con licenza MIT) che hanno molte funzionalità che in realtà non ti servono mai, ma una volta che hai bisogno di una singola funzione da un componente di terze parti devi spesso portare in giro l'intero componente. Quindi aggiungi sempre più dipendenze e man mano che si evolvono e crescono il tuo programma dipende anche da loro.


Sono un po 'curioso del motivo per cui questo ha ottenuto due voti negativi durante la notte.
sharptooth,

6
Non l'ho fatto ma non credo che questo risponda davvero alla domanda in modo sufficientemente approfondito. Praticamente dice solo "il software diventa più grande perché fa più cose" e dalle altre risposte vedrai che c'è davvero molto di più.
Razze di leggerezza in orbita,

1
Un fattore correlato è che nei sistemi che utilizzano collegamenti statici, un linker potrebbe aver bisogno solo di inserire il codice che viene effettivamente utilizzato [alcuni linker attirerebbero sempre tutto, ma quelli migliori proverebbero a essere selettivi]. Quando si utilizza il collegamento dinamico, soprattutto se i moduli possono essere condivisi, anche se il primo codice che installa un modulo necessita solo di una funzione da esso, non c'è modo di sapere quali funzioni potrebbero essere necessarie ad altro codice che desidera condividere il modulo.
supercat

@sharptooth Non mi chiedo nemmeno più. Mentre nella maggior parte dei casi il sistema funziona vedo anche risposte erroneamente sbagliate che vengono annullate come pazze e accettate mentre quelle corrette vengono ridotte all'oblio troppo spesso ...
Brian Knoblauch,

10

Mentre la grafica / usabilità sono davvero fattori che contribuiscono, ce n'è moltissimo che è libreria / codice compilato in eccesso.

Esempio di come può ancora essere un piccolo codice: MenuetOS, un sistema operativo a 64 bit completo con potenti app che si adatta a un singolo disco floppy.

Esempio di quanto può essere grande il codice senza una ragione ovvia: ho fatto un semplice output di testo "Ciao, mondo!" di recente in Ada. L'eseguibile compilato era oltre 1 MiB !. Lo stesso eseguibile nell'assembly è solo un KiB o 2 (e la maggior parte di questo è un overhead eseguibile, il codice corrente in esecuzione è di decine di byte).


3
Che cos'è un floppy disk? ;)
500 - Errore interno del server

@ 500-InternalServerError Che cos'è Ada? : D
BenjiWiebe,

3
per i nuovi arrivati, il floppy disk è di circa 1,4 MiB
Sarge Borsch il

3
Ho visto eseguibili Ada moderni con meno di 200 byte. Ma se il tuo compilatore inserisce cose come un runtime di tasking completo per impostazione predefinita, sia che tu usi le attività o meno, allora ci si aspetta 1 MB o giù di lì. E di solito non vale la pena preoccuparsene.
Brian Drummond,

@BrianDrummond, sembra un runtime davvero scadente, o un runtime scadente e libreria e linker. In un video di formazione che ho visto molti anni fa, Jean Ichbiah e altri hanno affermato che un tipico runtime di Ada (per la versione originale della lingua) sarebbe circa 4K. Per curiosità, ho verificato questo con il pacchetto di runtime TI 320C30 che stavamo usando. Aveva ragione sui soldi.
John R. Strohm,

7

È banalmente vero che il software deve essere costruito per adattarsi a due cose: gli utenti e l'hardware disponibile. Un programma è adatto al suo scopo se fa ciò che l'utente desidera in modo tempestivo con l'hardware a sua disposizione. Bene duh. Ma poiché l'hardware migliora sostanzialmente in tutte le dimensioni misurabili, aumenta il numero di programmi discreti che si spostano da inadatti a adattarsi - lo spazio di progettazione aumenta:

  • Lingue di livello superiore consentono di esprimere idee in meno tempo e codice rispetto a prima. Questa complessità ridotta, al contrario, consente di esprimere idee sempre più complesse.
  • Il raggruppamento di più dati con l'applicazione può renderlo immediatamente più utilizzabile. Ad esempio, probabilmente non passerà molto tempo prima che le applicazioni di controllo ortografico vengano raggruppate in tutte le lingue conosciute dall'umanità - dopo tutto sono solo pochi gigabyte.
  • I compromessi hardware consentono agli sviluppatori e agli utenti una scelta più ampia in quale risorsa si preoccupano. Vedere ad esempio FLAC / OGG vs WAV, SVG vs PNG, indici del database.
  • Le interfacce umane spesso scambiano ciò che in precedenza equivaleva a enormi quantità di hardware per usabilità. L'antialiasing, le risoluzioni elevate, l'aggiornamento rapido e lo scorrimento tra elementi equivalenti a pannelli discreti rendono l'esperienza più realistica, quindi intuitiva e comprensibile.

6

Questo è sicuramente vero per quanto riguarda le applicazioni Android. Quattro anni fa, una semplice app occupava circa 2-5 megabyte di spazio. Oggi una semplice app occupa circa 10-20 megabyte di spazio.

Maggiore è lo spazio disponibile, maggiore è la dimensione dell'app.

Penso che ci siano due ragioni principali nel caso di Android:

  • Google ha ampliato il framework Android, aggiunto molte nuove funzionalità.

  • Agli sviluppatori non importa più. Le immagini sono incluse in una risoluzione molto più elevata (ovviamente le risoluzioni dello schermo dello smartphone sono aumentate), le librerie di terze parti sono incluse senza pensarci.


1
L'ultimo punto elenco è esattamente giusto.
Razze di leggerezza in orbita,

3
Ho realizzato un totale di un'app Android e l'APK è di 0,05 MB. Poi di nuovo, non fa molto. Mi chiedo ancora perché un'app cronometro (con una quantità simile di funzionalità mia, anche se completamente diversa) richiede diversi MB.
immibis,

5
L'ultimo punto elenco è sbagliato, gli sviluppatori si preoccupano. Dobbiamo solo destreggiarci tra varie priorità e rendere l'app un po 'più grande ha senso.
NPSF3000,

Inoltre non ha aiutato il fatto che l'SDK (al momento) insistesse per aggiungere una libreria da 5 + MB alla mia app da 0,05 MB che non mi serviva e che dovevo ricordare di rimuoverlo prima di una build di rilascio.
immibis,

4

Molto si riduce al tempo degli sviluppatori e al costo di quel tempo. Ai tempi in cui Visual Basic era arrivato per la prima volta sulla scena, era in competizione con C / C ++ e il grande colpo era che si poteva scrivere "Hello World" in ANSI C per Windows in forse 15K. Il problema con VB era che hai sempre avuto l'albatro della libreria di runtime 300K.

Ora, potresti 10 volte la dimensione del tuo programma VB e sarebbe ancora solo qualche K in più, ma 10 volte la dimensione del tuo programma C / C ++ e stai osservando qualche MESE in più di sviluppo.

Alla fine il gonfio delle tue applicazioni è un piccolo prezzo da pagare per gli enormi balzi nella produzione di sviluppo, la riduzione dei prezzi e la vastità delle capacità che non sarebbero mai state possibili nei vecchi tempi di sviluppo fatti a mano; quando i programmi erano piccoli e veloci ma anche deboli, incompatibili l'uno con l'altro, scarsamente caratterizzati e costosi da sviluppare.


2
questo post è piuttosto difficile da leggere (wall of text). Ti dispiacerebbe modificarlo in una forma migliore?
moscerino

1
"10 volte più grande" di Hello World richiede "mesi di sviluppo in più"? Lavarsi i denti dieci volte comporta stare di fronte a uno specchio senza sosta per un mese?
Bcrist,

Lavarsi i denti x volte è una funzione lineare di x, ma la programmazione generalmente non è una funzione lineare. Se crei manualmente ogni riga di codice utilizzando le funzioni linguistiche di livello più basso, otterrai codice veloce e di piccole dimensioni, ma a un costo più elevato per livello di complessità. Le lingue di livello superiore si gonfiano di più ma mantengono il costo più vicino a una funzione lineare della complessità.
Andyb,

2

Con il passare del tempo, le esigenze degli utenti sono in evoluzione e sempre più esigenti, quindi i fornitori / autori di software diversi sono costretti a soddisfare tali esigenze in nome della concorrenza.

Ma soddisfare una nuova esigenza significa spesso aggiungere nuovo codice. Nuovo codice indica nuove vulnerabilità da correggere. La correzione di nuove vulnerabilità può aggiungere codice o aprire le porte a nuove vulnerabilità.

Ogni funzionalità aggiunta per soddisfare le esigenze di un utente potrebbe richiedere una maggiore potenza del processore per la velocità (ci lamentiamo tutti della velocità di questo o quel browser), nuove risorse grafiche per migliori effetti visivi ... ecc.

Tutto ciò significa aggiungere nuovi livelli di applicazioni (codice), sicurezza e talvolta hardware.


0

Molte dimensioni provengono da librerie integrate. Molte applicazioni in questi giorni sono costruite utilizzando elettroni che raggruppano moltissimo con l'applicazione. Se installi applicazioni su Linux, di solito sono molto più piccole perché gran parte dell'applicazione è già installata tramite librerie condivise che stanno utilizzando anche altri programmi.


-1

Durante la costruzione del software, se è necessaria la funzione A, verrà importato un modulo A *. A * può risolvere A, ma A * può risolvere problemi più di A e A * potrebbe essere grande. Tutti i moduli di grandi dimensioni producono software di grandi dimensioni.

Forse non è lo stesso caso, ma qualcosa del genere: se hai solo bisogno di stampare "ciao mondo" sulla console usando Java, hai bisogno di JRE (> 60 MB) installato.

Se l'esempio di Java non è buono, prova questo: se il software ha bisogno di accedere al file, potrebbe usare un modulo di registrazione che può effettivamente fare i log nel database, sulla rete e alcune altre funzionalità, ma le funzioni non sono mai utilizzate in il progetto.


Perché esattamente ci sono 5 voti negativi e non un singolo commento che spiega perché?
Kromster,

1
@KromStern La prima sezione analizza notevolmente il funzionamento delle librerie e lo fa in modo molto poco chiaro con un uso incoerente di code. Direi che non risponde affatto alla domanda. La seconda sezione usa Java come esempio (anche se sta cercando di affermare che JRE dovrebbe essere considerato parte della crescita delle dimensioni dell'applicazione - che di nuovo manca il punto della domanda e non è affatto un buon esempio e continua a perpetuare il incomprensioni di Java). Tutto sommato è sbagliato o ripete i punti nelle risposte precedenti, meglio scritte.

1
Anche il tuo esempio di accesso alla rete o al file non è buono - perché dal punto di vista del codice, entrambi sono file e gestiti esattamente allo stesso modo (la distinzione tra file e rete è gestita dal sistema operativo). Devo ancora vedere un framework di registrazione che ha "accedere al database" come parte delle sue funzionalità principali in quanto ciò sarebbe complicato da driver Oracle vs MySQL vs Server SQL vs Postgres vs ... e differenze dialettiche.

@ user40980 La distinzione tra il file e la rete non è gestita dal sistema operativo. Hanno bisogno di chiamate OS diverse per connettersi e scrivere. L'accesso al database viene gestito attraverso un livello di indipendenza del database come JDBC o libdbi. (Che a sua volta può
contenere i

-2

Ho letto di alcune regole secondo cui i programmi occuperanno tutta la memoria disponibile, non importa quanto sia, ma perché?

Non è del tutto vero. I sistemi non rilasceranno la memoria che hanno consumato fino a quando il sistema operativo non sarà sottoposto alla pressione della memoria. Questo è un miglioramento delle prestazioni. Se stavi sfogliando una pagina con immagini attive, vai via. Potresti tornare indietro, quindi hai di nuovo bisogno dell'immagine. Se il sistema operativo ha la RAM non ha senso svuotare la memoria fino a quando non si è sicuri di non averne più bisogno.

La cancellazione immediata della memoria porterebbe i cicli della CPU e la larghezza di banda della memoria lontano dall'utente quando probabilmente molto probabilmente vogliono che le pagine Web altamente reattive vengano visualizzate sullo schermo.

Il sistema operativo consumerà tutta la memoria disponibile non dell'applicazione, la maggior parte delle quali è destinata alla cache del file system.

La gestione della memoria è un problema difficile ma ci sono persone molto intelligenti che ci lavorano continuamente. Nulla viene sprecato di proposito e l'obiettivo principale è quello di fornire un computer molto reattivo.


3
Non è affatto questo il detto. La memoria virtuale e la garbage collection erano state appena inventate quando quella citazione era stata scritta e non erano molto diffuse.
Jörg W Mittag,

-2

Può essere vero che i programmi tendono ad espandersi per riempire lo spazio disponibile, in modo simile ai fenomeni suburbani in cui si aggiungono nuove corsie a una superstrada bloccata dalla griglia e nel giro di pochi anni viene nuovamente eseguito il backup del traffico.

Ma se lo guardi potresti scoprire che in realtà i loro programmi fanno più cose. I browser, ad esempio, eseguono grafica più elaborata, dispongono di strumenti di sviluppo intuitivi che non esistevano alcuni anni fa, ecc. Inoltre si collegano a molte librerie, a volte utilizzando solo una piccola parte del codice. Pertanto, sebbene i programmi possano aumentare di dimensioni per riempire la memoria disponibile, alcuni di questi potrebbero essere motivi legittimi.


2
ciò non sembra offrire nulla di sostanziale rispetto ai punti formulati e spiegati nelle precedenti 13 risposte
moscerino del

-3

Le librerie basate su oggetti non ottimizzati richiedono più memoria per caricare, installare e più cicli di elaborazione per funzionare. Il codice oggetto è per lo più gonfio.

Basta scorrere il codice C ++ standard in esecuzione per vedere tutte le chiamate agli oggetti assert () ed per assicurarsi che siano oggetti validi. Quando si progetta strato su strato di oggetti che incapsulano oggetti, i sottostrati sono gonfiati e opachi. I programmatori diventano pigri e assumono più oggetti perché è più veloce della riprogettazione di ciò che è limitato alla funzionalità necessaria. È davvero così semplice.

Considera la dimensione del kernel C Linux, solo il kernel, rispetto alla dimensione delle applicazioni su misura. Il kernel può eseguire l'intero computer. Ma non è stato creato così rapidamente come le applicazioni, ci vuole tempo lentamente per rendere la migliore funzionalità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.