Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Scrivete programmi aderenti allo standard C89 o al C99?
Forum - C/C++ - Scrivete programmi aderenti allo standard C89 o al C99? - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:17
Martedì, 20/07/2010
il tipo boolean non è che serva tantissimo nel C... perchè le istruzioni condizionali, a differenza del java e di altri linguaggi fortemente tipizzati, lavorano su numeri interi. Se il numero è zero, vale come un false, se è diverso da zero vale come un true.

PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 22:57
Martedì, 20/07/2010
questo lo so...ma un intero occupa almeno 32 bit...un boolean 1 solo...
e considerando che qualche anno fa usavano la memoria con il contagocce....

PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 22:58
Martedì, 20/07/2010
questo lo so...ma un intero occupa almeno 32 bit...un boolean 1 solo...
e considerando che qualche anno fa usavano la memoria con il contagocce....

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 23:05
Martedì, 20/07/2010
Testo quotato

Postato originariamente da Alex:

questo lo so...ma un intero occupa almeno 32 bit...un boolean 1 solo...
e considerando che qualche anno fa usavano la memoria con il contagocce....



e qui ti sbagli :)

pensi veramente che se dichiari tutte le variabili che sai che conterranno un numero minore di 255 come char risparmi spazio? pensi veramente che un boolean occupi un bit? ahi ahi ahi :)
purtroppo non è così, detta in parole povere, un processore ha una lunghezza di parola (23bit-64bit) precisa, le sue istruzioni assembly sono studiate per avere in input dei parametri che sono multipli o sottomultipli della parola. Ciò non toglie che la maggior velocità di esecuzione è ottenuta con calcoli che sono lunghi quanto la parola.
Se dichiari un boolean in realtà nel 99% dei casi stai dichiarando un int, sei te che poi lo "usi" come un interruttore true false :)
Anche i membri delle strutture, se non specificato diversamente, vengono allineati alla parola di sistema e opportunamente paddati.

Inoltre in C:

int è lungo quanto la parola,
long il doppio della parola
short mezza parola
char un quarto di parola

quando in assembly si effettua un calcolo almeno uno dei due operandi deve essere caricato in un registro (nel caso IA-32: EAX, EBX, ECX, ...) e il registro è grande quanto la parola. Quindi anche se tu carichi mezza parola hai cmq utilizzato un registro :) da qui l'inutilità di cercare di risparmiare "spazio" in questo modo :D

scusate se non mi sono spiegato bene, ma è un argomento veramente vasto e complesso, ho solo dato spizzichi e bocconi :)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 9:13
Mercoledì, 21/07/2010
giustissimo HeDo! Inoltre, se lavori con variabili più piccole di una parola, ad ogni operazione verrà effettuato un masking per eliminare i bit in "eccesso", riportando così la dimensione della variabile al numero di bit previsto dal linguaggio.

quindi se fai una cosa del genere:
for ( char i=0; i<100; i++) { qualcosa(); }

otterrai parecchio overhead, dovuto al continuo masking della variabile i, che viene effettuato ogni volta che la incrementi. Accadrà quindi una cosa del genere (in pseudoassembly):

add i, 1
lsh i, 24 // shift a sinistra
arsh i, 24 // shift aritmetico a destra, con trasporto del segno (signed)
; rsh i, 24 // shift logico a destra, versione per variabili unsigned

Ultima modifica effettuata da TheKaneB il 21/07/2010 alle 9:15
PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 10:02
Mercoledì, 21/07/2010
più o meno ho capito....in realta un boolean occupa come un int...


studiate troppo ragazzi:nono::nono:

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 10:19
Mercoledì, 21/07/2010
a dire il vero se non sapessi queste cose sarei disoccupato... scrivere codice per sistemi con pochissime risorse non è una passeggiata :yup:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 11:59
Mercoledì, 21/07/2010
Testo quotato

Postato originariamente da Alex:
studiate troppo ragazzi:nono::nono:



come farei ad occuparmi di sicurezza e tecniche di antireversing senza sapere ciò :)

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo