Vai al contenuto
View in the app

A better way to browse. Learn more.

Autopareri

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[RISOLTO] Programmazione: Dubbione sulla compilazione.

Featured Replies

Inviato

Vi espongo un mio personale dubbio, perche' vi ho visto molto esperti in ambito informatico.

Per semplicita' e per fissare le idee mi riferiro' alla programmazione da linguaggio C, ma i discorsi potrebbero essere portati ugualmente per i linguaggi del Pascal, del Fortran (quello moderno, con i puntatori e le allocazioni dinamiche di memoria) ed altri.

Un programma ha fondamentalmente due tipi di variabili:

a) Quelle allocate nelle sezioni globali (global section)

B) Quelle allocate nelle sezioni locali a una routine od una funzione (local section)

Le prime sono variabili visibili in qualunque punto del programma, mentre le seconde sono tipicamente allocate sullo stack all'interno di uno scope e l'area di memoria ad esse dedicata viene normalmente deallocata alla chiusura dello scope, quando lo stack per l'appunto si svolge. Le prime corrispondono a variabili C dichiarate global o static o piu' semplicemente anche a variabili dichiarate automatic ma al di fuori dallo scope del main (cioe' al di fuori di tutti gli scope). Le seconde sono appunto variabili implicitamente od esplicitamente dichiarate automatic all'interno di uno scope di una funzione.

Ed adesso veniamo al dunque.

Parliamo delle variabili globali o statiche. Ci sono fondamentalmente due modi per scrivere in un assoluto (cioe' in un eseguibile) l'allocazione dedicata alle variabili e cioe'

a) Scrivere l'indirizzo di memoria e la quantita' di byte da allocare per la variabile

B) Scrivere l'indirizzo di memoria e poi preallocare nell'eseguibile una sequenza di byte che verranno mappati in memoria a tempo di esecuzione (at run time) all'indirizzo prescelto per la variabile. In Unix ad esempio questo corrisponderebbe a mappare dentro l'eseguibile diversi shared segment in corrispondenza delle variabili staticheo globali.

Per quanto possa sembrare strano la mia impressione personale e' che molti sistemi facciano uso del metodo (B). Questo significa in altre parole che all'atto della compilazione deve essere effettuata una mappa in memoria per tutte le variabili di tipo statico o globale, mappa che poi viene riversata direttamente nell'eseguibile. Se questo e' vero allora su sistemi di sviluppo del software se ci sono molti programmi che dichiarano sezioni globali per variabili di dimensioni corpose, allora la compilazione concorrente dei programmi potrebbe portare ad un utilizzo consistente della memoria virtuale.

Chi sa se viene utilizzato il metodo (a) od il metodo (B) ?

Opinioni in merito sono gradite.

Regards,

Francesco 8)

Inviato

Egregi solo per dire che ho provato or ora su Linux e la cosa non e' cosi'. Ho scritto un breve eseguibile con una variabile definita una volta static char[50] ed una volta static char[500000] in cui ho inizializzato anche alcuni valori e per sicurezza mi sono fatto fare la printf della stringa, cosi' che il compilatore non potesse prendermi in giro (sapete accade con i compilatori furbi quando si accorgono che le variabili non sono inizializzate o non sono usate).

La dimensione dell'eseguibile non cambia: 11k.

Dunque almeno su Unix sembra essere vera l'ipotesi (a).

Regards,

Francesco 8)

Inviato

Non ti preoccupare Autodeltone! Forse ho sbagliato io, anche se pero' mi rimane l'idea fissa che una mappa di memoria viene fatta in compilazione per tutte le variabili statiche o globali. Mappa che viene tirata su dall'image activator all'inizio dell'esecuzione prima di far partire qualunque istruzione eseguibile.

Regards,

Francesco 8)

Ospite
Questa discussione è chiusa.
Background Picker
Customize Layout

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.