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à. |