Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Allocazione memoria matrice
Forum - C/C++ - Allocazione memoria matrice

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:55
Giovedì, 11/02/2010
Mi è venuto un dubbio....

Istanziare una matrice del tipo:
Codice sorgente - presumibilmente C++

  1. unsigned int **mat = new unsigned int*[65000];
  2.   for(i = 0; i < 65000; i++)
  3.       mat[i] = new unsigned int[65000];


è differente(come memoria allocata, posizione dati, allocazione in caso di poca memoria disponibile) da:
Codice sorgente - presumibilmente C++

  1. unsigned int *mat = new unsigned int[65000*65000];


??

Ultima modifica effettuata da lorenzo il 11/02/2010 alle 13:16


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:35
Giovedì, 11/02/2010
Ovviamente tutti e due i casi sono improponibili perchè dovresti allocare una quantità enorme di memoria, ma dato che sono due esempi, allora :

nel primo caso allochi lo spazio per ogni elemento della tua matrice + lo spazio per i puntatori per ogni riga ... Quindi, se parliamo di sistemi a 32 bit :

65000 puntatori per le righe = 65000 * 4 = 260000 byte
+
65000 righe per 65000 interi = 65000 * 65000 * 4 = circa 19,2 G

Nel secondo caso, sempre per sistemi a 32 bit

65000 righe per 65000 interi = 65000 * 65000 * 4 = circa 19,2 G

Ma mentre nel primo caso il più grande blocco di memoria contigua necessario è quello occupato da ogni riga (65000 interi = 260000 byte), nel secondo caso si rende necessaria la disponibilità di memoria contigua per tutto lo spazio della matrice ...

Nel secondo caso, se l'allocazione ha successo, avrai la memoria contigua adatta ad operazioni "veloci" di riempimento, ricerca; nel primo, dovrai operare come se le righe in memoria non fossero contigue.

Ultima modifica effettuata da nessuno il 11/02/2010 alle 13:36


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:07
Giovedì, 11/02/2010
proprio come pensavo, grazie



"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote