24. juli 2003 - 23:33Der er
26 kommentarer og 1 løsning
Vil gemme store Arrays af long long's
Okay... her er en af de svære.... hvordan gemme man hurtist 10.000 long long's (tæt på int_64) i en fil? (Bruger visual .net 2003) Og så det naturlige følge spørgsmål: hvordan load'er man dem så ind igen? -bruger ">>", "<<" og en løkke lige nu.
Det hurtigste er sansynligvis at bruge fwrite til at gemme og fread til at læse. Hvis du har dem i et array kan du gemme og læse dem alle i et kald til fread/fwrite. Hvad mener du med "(tæt på int_64)"?
Efter som det ikke er mere end en måned siden jeg fik .net 2003 læste jeg jo lidt i manualerne.... Der står meget tydeligt at long long's og Int_64 ikke altid bliver behandlet ens :-)
Hvordan ser filen så enlig ud? - er det ligesom med "<<", med mellemrum mellem hver variabel, eller bliver det binært? - Kan du ikk oz lige skrive 1 hurtigt kode eksempel?
Evt. kan du tilføje setvbuf(f, NULL, _IOFBF, useVBuf); efter fopen, useVBuf skal have en passende høj værdi, mindst allokerings enhed på harddisken, fx. 32768.
segmose >> til hvad nytte? skulle det gøre det hurtigere at gemme det? Skal gemme rigtig mange gange... det er et system hvor data'erne først bliver regnet ud i 10.000 array klumper og der efter så skal samles i én file.
Hvordan er baseprimes, BASE og fbaseprimes erklæret? Jeg kan ikke se at fread kun får 3 argumenter, medmindre du har en underlig erklæring af en af ovennævnte.
bertelbrander >> ved du noget om hvorfor der er en grænse på et sted mellem 100001 og 200K for hvor mange variabler man kan skrive til HD'en i ét array?
På min PC med 128MByte RAM kører det fint når det er er kompileret med VC++ 6.0 (og cygwin-gcc og BorlandC). Som du ser skriver og læser det 32Mbyte på en gang. VC++ nægter at kompilere hvis jeg sætter SIZE til 128MByte.
Jeg lavede en ny version der læser/skriver 4*1024*1024 __int64'er, det kører uden problemer, så jeg tror du har en fejl et andet sted. (__int64 er et andet navn for long long.)
printf("Success, Hit Enter to exit %d %d\n", SIZE, sizeof(__int64));
getchar();
return 0; }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.