Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++]Array di grandi dimensioni

    salve a tutti,
    devo acquisire da un file di testo 5 milioni di punti (coordinate) su cui devo poi effettuare una selezione.
    A questo punto mi creo il mio array di N elementi, dove N è di tipo long, ma mi accorgo che con numeri così grandi il mio programma non si avvia proprio...eppure con il tipo long dovrei riuscire a gestire molto più di 5 milioni.
    Mi accorgo, diminuendo la dimensione dell'array, che riesco a far partire il mio programma solo con N poco più grande di 10 mila...come mai ?
    Il mio problema non è risolvibile o devo usare una strategia diversa ?
    Gli uomini sono diventati strumenti dei loro strumenti.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    dipende questi 5 milioni cosa sono.. strutture? numeri? puntatori?

  3. #3
    si, scusami se non ho specificato, sono strutture...essenzialmente coordinate :


    Codice PHP:
    struct coordinata {
       
    long int posizione;
       
    long double x;
       
    long double y;
       
    long double z;
    }; 
    E qui dichiaro la mia collezione

    Codice PHP:
    const long int DIMENSIONE 100000;
    coordinata collezione[DIMENSIONE]; 
    come vedi mettendo una dimensione di 10 mila il mio programma non si avvia...mentre con 10mila si !
    Singnifica che non posso gestire più di 10 mila e passa strutture ???
    Gli uomini sono diventati strumenti dei loro strumenti.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Allocale dinamicamente o, comunque, fuori dal main.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Allocale dinamicamente o, comunque, fuori dal main.
    Grazie, mi è bastato dichiarare l'array al di fuori del main, ma non riesco comunque a dichiararlo di 5 milioni, oltre i 2 milioni mi da questo errore in fase di compilazione :

    codice:
    Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Error detected (LME1508)
    Fatal: Access violation.  Link terminated.
    Cosa significa ?
    E come mai (per curiosità) se dichiaravo l'array all'interno del main il programma non partiva ?

    Grazie
    Gli uomini sono diventati strumenti dei loro strumenti.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cequeta
    Grazie, mi è bastato dichiarare l'array al di fuori del main, ma non riesco comunque a dichiararlo di 5 milioni, oltre i 2 milioni mi da questo errore in fase di compilazione :
    Molto probabilmente è per il compilatore e il linker che usi che mi sembrano delle vecchie versioni per il mondo DOS ...

    E come mai (per curiosità) se dichiaravo l'array all'interno del main il programma non partiva ?
    Sai dove viene allocato l'array se sta all'interno di una funzione (come il main)?
    E dove viene allocato se sta fuori?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Sai dove viene allocato l'array se sta all'interno di una funzione (come il main)?
    E dove viene allocato se sta fuori?
    OK...chiaro


    Originariamente inviato da oregon
    Molto probabilmente è per il compilatore e il linker che usi che mi sembrano delle vecchie versioni per il mondo DOS ...
    Quindi mi basterebbe utilizzare un compilatore più "nuovo" per risolvere ?
    GraZzie mille per l'aiuto
    Gli uomini sono diventati strumenti dei loro strumenti.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cequeta
    Quindi mi basterebbe utilizzare un compilatore più "nuovo" per risolvere ?
    Sì, ovviamente nei limiti delle risorse del sistema.

    Personalmente ho utilizzato Visual C++ 2008 con 5 milioni di elementi e non ho avuto problemi.

    Puoi scaricare la Express Edition.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Originariamente inviato da oregon
    Sì, ovviamente nei limiti delle risorse del sistema.

    Personalmente ho utilizzato Visual C++ 2008 con 5 milioni di elementi e non ho avuto problemi.

    Puoi scaricare la Express Edition.
    In generale con Visual C++ 2008 non si hanno MAI problemi.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  10. #10
    Io comunque non allocherei un array così grande come variabile globale... verrà fuori un eseguibile di dimensioni spropositate; usa piuttosto l'allocazione dinamica.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.