|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Verona
Messaggi: 1890
|
[delphi] come funziona AllocMem?
ho sempre usato programmi con type console su dephi e problemi di memoria mai avuti.
Oggi ho provato ad inserire un semplice programma non in type console (basta dos) e dice stack overflow ho capito che usavo la memoria locale e non so perchè in console il problema non c'e' mai stato. Ora come faccio a portare queste variabile in memoria dinamica con allocmem. type lo=array[1..200000,1..11]of smallint; la=array[1..20]of smallint; nom=string[25]; lot=record num:lo; ind:smallint; anno:smallint; mese:string[15]; end; fi=file of lot; penso che l'array è troppo grande ma non so come fare? chi mi sa aiutare ad usare allocmem. Grazie Uso delphi 7
__________________
DESKTOP: Intel i9-9900KF + dissipatore ARCTIC Freezer 34 eSports DUO su Asus Prime Z390-P + Kingston FURY Beast 32GB (2x16GB) 3200MHz DDR4 CL16 +Asrock Challenger Radeon RX 6600 XT + ENERMAX REVOLUTION D.F. 2 Alimentatore 850W + Silicon Power SSD PCIe M.2 NVMe 1TB+ Seagate tgBarraCuda, 4 TB, Hard Disk Interno, SATA da 6 GBit/ + case Sharkoon TG5. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Il problema è che il tipo "lo" è incluso nella definizione del record lot.
Se ti è possibile, dovresti togliere lo da lot, e scriverlo in un altro file. In questo modo potresti definire l'altro file col tipo: lo = array[1..11]of smallint; e scrivere i 200000 record (ma immagino saranno molti dimeno) uno alla volta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Verona
Messaggi: 1890
|
Quote:
L'errore di memoria esce sempre. per capirci io inserisco 18 numeri e sviluppo un sistema in cui ogni colonna è formata da 10 numeri, quindi l'array deve essere per forza grande. Un aiutino p.s. mi esce sempre "project2.exe raised exception class Estackoverflow with message "stack overflow"".
__________________
DESKTOP: Intel i9-9900KF + dissipatore ARCTIC Freezer 34 eSports DUO su Asus Prime Z390-P + Kingston FURY Beast 32GB (2x16GB) 3200MHz DDR4 CL16 +Asrock Challenger Radeon RX 6600 XT + ENERMAX REVOLUTION D.F. 2 Alimentatore 850W + Silicon Power SSD PCIe M.2 NVMe 1TB+ Seagate tgBarraCuda, 4 TB, Hard Disk Interno, SATA da 6 GBit/ + case Sharkoon TG5. Ultima modifica di fabbius69 : 18-02-2011 alle 09:24. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Hum. Alla fine la struttura lo non è nemmeno tanto grande: parliamo di 4,2MB circa.
Dato il tipo di errore, può darsi che tu la stia utilizzando dentro qualche procedura/funzione/metodo. Ad esempio: Codice:
procedure Pippo; var Colonne: lo; begin end; Se è così, hai due soluzioni: 1) Nelle proprietà del progetto da qualche parte è impostato il valore di MaxStack (purtroppo non ricordo di preciso il nome e dove si trova, perché è da un pezzo che non lavoro più con Delphi), per cui ti basta cambiarlo con un valore alto e dovresti essere a posto; 2) faresti meglio ad allocare dinamicamente la struttura quando ti serve, sfruttando gli array dinamici. Quindi Pippo la riscriverei così: Codice:
const MaxColumns = 200000; type TColumn = array[1..11] of SmallInt; TColumns = array of TColumn; procedure Pippo; var Colonne: TColumns; begin SetLength(Colonne, MaxColumns); // Codice... end;
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Verona
Messaggi: 1890
|
Grazie per la risposta , vorrei farti una domanda extra. io lavoro molto con le matrici facendo sempre elaborazioni sistemi di gioco riduttori ed altro.
Il delphi non mi soddisfa troppo, sono riuscito a fare il programma che ti dicevo mettendo la dimensione dell'array a 10000. Ma è troppo lento per i calcoli che gli chiedo. Ho provato con il matlab, ma non ho trovato guide e poi ad ogni dubbio non trovo mai la risposta ( non ho capito come dare in input dei numeri, oppure creare un array di recor). Sai indircarmi un linguaggio veloce nell'operazioni matematiche che trovo anche buone guide? Grazie
__________________
DESKTOP: Intel i9-9900KF + dissipatore ARCTIC Freezer 34 eSports DUO su Asus Prime Z390-P + Kingston FURY Beast 32GB (2x16GB) 3200MHz DDR4 CL16 +Asrock Challenger Radeon RX 6600 XT + ENERMAX REVOLUTION D.F. 2 Alimentatore 850W + Silicon Power SSD PCIe M.2 NVMe 1TB+ Seagate tgBarraCuda, 4 TB, Hard Disk Interno, SATA da 6 GBit/ + case Sharkoon TG5. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Francamente non saprei, anche perché pure io un bel po' di anni fa ho realizzato un programma di riduzione delle colonne (per diversi sistemi di gioco) per Delphi 7, e riuscivo a gestire fino a circa una decina di milioni di colonne (ognuna con fino a 96 numeri diversi), impiegando al più mezz'ora su PC abbastanza datati.
Poi è chiaro che tutto dipende dagli algoritmi di riduzione implementati, per cui un confronto vero e proprio non si può fare.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:22.




















