Variabile Python in byte

-4

Per teoria, correggimi se ho torto, dice che un int può prendere fino a un massimo di 4 bit in caso di numero 9 .

Non ho codificato linguaggi di basso livello, ma presumo che il tipo di dati int in c e python non dovrebbe essere diverso.

Voglio sapere qual è la ragione per cui in Python un int sta prendendo 24 byte

Anche se qualcuno può spiegare come viene calcolato un bit / byte per un personaggio.

Grazie

>>> var = 1
>>> import sys
>>> print sys.getsizeof(var)
24
>>> var = 'Raheel'
>>> print sys.getsizeof(var)
43
>>> var = 2
>>> print sys.getsizeof(var)
24
>>> var = 'R'
>>> print sys.getsizeof(var)
38
>>>
    
posta Raheel Khan 20.02.2018 - 17:21
fonte

1 risposta

3

L'unità di allocazione non può essere più piccola di 1 byte. Per una variabile a 1 bit (un valore booleano) devi allocare almeno 8 bit, 7 dei quali non usati.

Una moderna CPU opera su 64 bit (8 byte), alcuni su 32 bit = 4 byte; I controller incorporati a 16 bit sono comuni, i controller a 8 bit sono già rari. La RAM funziona anche in modo più efficiente con larghezze maggiori e normalmente si aspetta l'allineamento sul bordo a 4 byte per recuperi efficienti. Questo è il motivo per cui un valore a 1 bit può anche richiedere 4 byte in memoria.

Un intero Python è un oggetto. Sì, puoi invocare i metodi direttamente su una costante intera: (1).__add__(2) o (100).bit_length() . Ciò significa che il valore intero effettivo è memorizzato insieme a molte altre informazioni.

Gli interi in Python cercano di adattarsi alla dimensione dei dati, tanto più in Python 3 era un intero di qualsiasi lunghezza è un oggetto dello stesso tipo, solo allocando abbastanza byte per memorizzare il valore.

Puoi infatti comprimere valori di piccola magnitudine per usare in modo più efficiente i bit disponibili. Questo è comune sono i formati di archiviazione, specialmente dove la larghezza di banda è importante. Per esempio. una GPU può lavorare con trame confezionate in vari modi, sia come numeri interi che come (brevi) caratteri. La maggior parte delle moderne CPU ha "istruzioni vettoriali" per lavorare con diversi interi indipendenti a 16-bit e 8-bit imballati in registri a 32 o 64 bit.

    
risposta data 20.02.2018 - 18:00
fonte

Leggi altre domande sui tag