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++ - 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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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


PM Quote