2010-09-23 8 views
5

ad es.Se il nome della variabile in qualsiasi linguaggio di programmazione richiede spazio di memoria

int a=3;//-----------------------(1) 

e

int a_long_variable_name_used_instead_of_small_one=3;//-------------(2) 

su (1) e (2) che acquisirà più spazio di memoria o uguale spazio sarebbe Aquire?

+11

nomi lunghi come in (2) richiedono più memoria nella testa del programmatore :) – Chubsdad

+0

Il titolo dice "in qualsiasi linguaggio di programmazione", ma i tag dicono "C++" (prima che Martin aggiungesse il tag "linguaggio indipendente") . Quindi qual è? – sepp2k

+0

Tutto quello che stai considerando è un numero intero di cui sto parlando, ma sto dicendo dove nella memoria a and a_long_variable_name_used_instead_of_small_one prendi un po 'di spazio o no – Guri

risposta

7

Entrambi occupano la stessa quantità di memoria. I nomi di variabili servono solo per aiutare te, il programmatore, ricordare a cosa serve la variabile e per aiutare il compilatore ad associare diversi usi della stessa variabile. Ad eccezione dei simboli di debug, non compaiono nel codice compilato.

+7

Poiché ha etichettato la domanda come indipendente dalla lingua (tra gli altri), che ne è delle lingue che supportano la riflessione in fase di runtime? –

+1

O lingue che utilizzano una semplice mappa dal nome della variabile al valore delle variabili di ricerca (sono sicuro che ci sono lingue interpretate che lo fanno) – sepp2k

+0

@ sepp2k: Ad esempio, le variabili globali in Lua vengono cercate usando una mappa hash. – Puppy

1

Nei compilatori moderni il nome di una variabile non influisce sulla quantità di spazio necessaria per tenerlo in C++.

+1

Anche nei compilatori precedenti, AFAIK. C++ non ha mai avuto alcuna funzione di introspezione. :) –

5

Il nome assegnato a una variabile in C/C++ non influisce sulle dimensioni del codice eseguibile risultante. Quando si dichiara una variabile del genere, il compilatore riserva lo spazio di memoria (nel caso di un int su x86/x64, quattro byte) per memorizzare il valore. Per accedere o modificare il valore, verrà utilizzato l'indirizzo anziché il nome della variabile (che viene perso nel processo di compilazione).

0

No .. Entrambi saranno occupare lo spazio uguale ..

2

Se la mia comprensione è corretta, prenderanno la stessa quantità di memoria. Credo (e sono pronto a essere abbattuto dalle fiamme) che in C++ i nomi sono simbolici per aiutare l'utente e il compilatore creerà solo un blocco di memoria sufficiente a contenere il tipo che stai dichiarando, in questo caso un int . Quindi, dovrebbero entrambi occupare la stessa dimensione della memoria, cioè la memoria richiesta per contenere un indirizzo.

6

Nella maggior parte delle lingue interpretate, il nome verrà memorizzato in una tabella da qualche parte in memoria, occupando così diverse quantità di spazio.

17

In C++ e nella maggior parte dei linguaggi compilati staticamente, i nomi delle variabili possono occupare più spazio durante il processo di compilazione, ma per runtime i nomi saranno scartati e quindi non occuperanno affatto spazio.

In linguaggi interpretati e lingue compilate che forniscono introspezione/riflessione in fase di esecuzione, il nome potrebbe occupare più spazio.

Inoltre, l'implementazione della lingua influenzerà la quantità di nomi delle variabili spaziali occupati. L'implementatore può aver deciso di utilizzare un buffer a lunghezza fissa per ciascun nome di variabile, nel qual caso ciascun nome occupa lo stesso spazio indipendentemente dalla lunghezza. Oppure possono avere uno spazio allocato dinamicamente in base alla lunghezza.

+0

per C++, questo dipende se si compila con simboli o meno. Per eseguire il debug dei core dump, apprezzo che i miei simboli siano spediti nel binario/libreria, in questo caso nomi lunghi possono influenzare le dimensioni (anche se UN nome lungo non sarebbe ...) –

+3

sì, rende le dimensioni del file più grande, bit non ci vorrà più memoria a meno che non lo si esegua con un debugger – Ferruccio

1

I nomi dei campi (nomi delle variabili di istanza) in Java utilizzano la memoria, ma solo una volta per campo. Questo è il riflesso per funzionare. Lo stesso vale per altri linguaggi basati sulla JVM, e credo per DotNet.

2

per C++,

$ cat name.cpp 
int main() { 
    int a = 74678; 
    int bcdefghijklmnopqrstuvwxyz = 5664; 
} 
$ g++ -S name.cpp 
$ cat name.s 
     .file "name.cpp" 
     .text 
     .align 2 
.globl main 
     .type main, @function 
main: 
.LFB2: 
     pushl %ebp 
.LCFI0: 
     movl %esp, %ebp 
.LCFI1: 
     subl $8, %esp 
.LCFI2: 
     andl $-16, %esp 
     movl $0, %eax 
     addl $15, %eax 
     addl $15, %eax 
     shrl $4, %eax 
     sall $4, %eax 
     subl %eax, %esp 
     movl $74678, -4(%ebp) 
     movl $5664, -8(%ebp) 
     movl $0, %eax 
     leave 
     ret 
.LFE2: 
     .size main, .-main 
     .section  .note.GNU-stack,"",@progbits 
     .ident "GCC: (GNU) 3.4.6 20060404 (Red Hat 3.4.6-11.0.1)" 
$ 

Come si può vedere, né abcdefghijklmnopqrstuvwxyz riflettono nell'output assembler. Quindi, la lunghezza del nome della variabile non ha importanza in fase di esecuzione in termini di memoria.


Tuttavia, i nomi variabili contribuiscono enormemente alla progettazione del programma. Alcuni programmatori si affidano anche a buone convenzioni di denominazione invece di commenti per spiegare il design del loro programma.

Una citazione rilevante dal Hacker News,

codice dovrebbe essere scritto in modo da descrivere completamente la funzionalità del programma per i lettori umani, e solo incidentalmente essere interpretati dai computer. Abbiamo difficoltà a ricordare i nomi brevi per molto tempo, e abbiamo difficoltà a guardare i nomi lunghi più e più volte di seguito. Inoltre, i nomi brevi hanno una maggiore probabilità di collisioni (poiché lo spazio di ricerca è più piccolo), ma sono più facili da "trattenere" per brevi periodi di lettura.

Così, le nostre convenzioni per nominare le cose dovrebbero prendere in considerazione i limiti del cervello umano. La lunghezza del nome di una variabile deve essere proporzionale alla distanza tra la sua definizione e il suo uso e inversamente proporzionale alla sua frequenza d'uso.

+0

Risposta superba ........ grazie – Guri

0

i compilatori sono lì per un motivo ... Ottimizzano il codice per utilizzare un po 'di spazio il più possibile e correre il più velocemente possibile, soprattutto quelli moderni.

Problemi correlati