Sto osservando uno strano pattern di utilizzo della memoria con stringhe python su Freebsd. Considerare la seguente sessione. L'idea è di creare un elenco che contenga alcune stringhe in modo che i caratteri cumulativi nell'elenco siano 100 MB.Utilizzo della memoria String Python su FreeBSD
l = []
for i in xrange(100000):
l.append(str(i) * (1000/len(str(i))))
Questo utilizza circa 100 MB di memoria come previsto e "del l" lo cancellerà.
l = []
for i in xrange(20000):
l.append(str(i) * (5000/len(str(i))))
Questo sta utilizzando 165 MB di memoria. Non capisco davvero da dove provenga l'utilizzo della memoria aggiuntiva . [Formato di entrambe le liste sono gli stessi]
Python 2.6.4 su FreeBSD 7.2. Su Linux/Windows utilizza entrambi attorno alla memoria solo da .
Update: Sto misura memoria usando 'ps aux'. Questo può essere eseguito usando os.sytem dopo i frammenti di codice sopra. Anche questi sono stati eseguiti separatamente.
Update2: Sembra memoria di mallocs freebsd in multipli di 2. Quindi allocare 5 KB in realtà alloca 8 KB. Non sono sicuro però.
Che dire prima esecuzione della seconda parte del codice quindi eseguire il primo? Penso di nuovo che ci saranno 165 MB perché questo riguarda il modo in cui il sistema operativo/interprete python e garbage collector gestiscono la memoria. – Hossein
Come si determina la memoria che utilizza? Sei sicuro che sia corretto? – steabert