Gestion allocation mémoire
Bonjour à tous,
J'ai un fichier texte (segments.txt) qui contient des nombres triés par taille croissante.
La taille du fichier est supérieure à la mémoire RAM.
Je recherche les couples de nombres tel que : segment_2 (ligne j) / segment_1 (ligne i) = 2
J'ai le message d'erreur bad_alloc car mauvaise gestion de la mémoire.
Comment faire une allocation judicieuse de la RAM ?
Merci d'avance.
Mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/time.h>
#include <unistd.h>
using namespace std;
struct Data1
{
double seg_{};
};
// -------------------------------------------------------------------------
int main()
{
std::ifstream file("segments.txt");
if(!file)
{
std::cerr << "file not found" << std::endl;
return 1;
}
std::vector<Data1> datas1;
Data1 data1;
while(file >> data1.seg_)
{
datas1.push_back(data1);
}
// ------------------------------------------------
int i,j;
double delta,precision;
precision = 0.0000001;
i = 0;
j = 1;
ici_1: delta = (2*datas1[i].seg_) - datas1[j].seg_;
if ((delta >= 0 && delta <= precision) || (delta <= 0 && delta > -precision))
{
printf("%4.15f %4.15f \n",datas1[i].seg_,datas1[j].seg_);
}
if (delta > -precision)
{
j = j + 1;
if (j > datas1.size()) break;
{
goto ici_2_init;
}
goto ici_1;
}
else
{
i = i + 1;
if (i > datas1.size()) break;
}
ici_2_init: ;
} |