Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szalona myśl? Czyli metoda na Ba_alloc();

Ostatnio zmodyfikowano 2012-01-15 23:28
Autor Wiadomość
kemsai
Temat założony przez niniejszego użytkownika
Szalona myśl? Czyli metoda na Ba_alloc();
» 2012-01-15 14:52:13
Mam kod źródłowy, ale szczerze powiedziawszy nie jestem w stanie wyłapać wszystkim wycieków pamięci. Kod tylko przerabiam bo nie ja go tworzyłem.
Po 2-3 dniach aplikacja się wyłącza bo brakuje pamięci i wywala wyjątek std_badAlloc().
Aplikacja zapisuje swój status co kilkanaście minut więc gdy braknie pamięci zapisane dane mogą być kilkanaście minut.
I tutaj wpadłem na taki głupi pomysł.

Co by było gdybym storzył na początku zmienną, klase, cokolwiek, co by zajmowało 100mb pamięci, a gdy wywala wyjątek to zwyczajnie usuwam 100mb element i dzięki temu mam 100 mb wolne i mogę poprostu dać by wtedy aplikacja zapisywała swój status i dopiero wtedy się zamkneła.

Co sądzicie?
P-48285
DejaVu
» 2012-01-15 14:56:10
P-48286
Drraven
» 2012-01-15 15:08:13
Zapisuj na listę z jednej strony a z drugiej wyrzucaj z listy i do pliku. Tak by w buforze było ciągle mało danych. I po problemie.
P-48289
kemsai
Temat założony przez niniejszego użytkownika
» 2012-01-15 15:36:30
Z tym visualem to odpada.. bo ja ten projekt mam pod deva z wszystkimi bibliotekami a linkowanie w visualu jest posrane za przeproszeniem, poza tym to ma też na linuxie dobrze działać.


Co do tej listy i usuwania to też raczej nie bo ta aplikacja to jest server i ona musi zapisywać wszystko w nieokreślonym do końca czasie i jest dużo zależności..
P-48291
DejaVu
» 2012-01-15 15:38:12
Cóż... jak Dev-C++ uważasz za dobre środowisko programistyczne i nie chcesz się reformować to już Twoja sprawa :)
P-48292
Drraven
» 2012-01-15 16:57:45
To co, że serwer piszesz (swoją drogą powodzenia, pochwal się potem) właśnie lepiej, że listy (niż np. wektory) dane mógłbyś trzymać na dysku (nie w ramie) np. Co godzinę tworzysz nowy plik i tam zapisujesz to z listy..

C/C++
#include <list>
#include <iostream>
#include <string>
using namespace std;

int main( int argv, char * args[] )
{
    list < string > my_list;
    list < string >::iterator i;
    my_list.push_back( "Jakiś wpis" );
    my_list.push_back( "Jakiś wpis #2" );
    my_list.push_back( "Jakieś dane.." );
   
    cout << "Wpisano " << my_list.size() << " znakow." << endl;
    cout << "Pierwszy: " << my_list.front() << endl;
    cout << "Ostatni: " << my_list.back() << endl;
   
    //Teraz zdejmujesz sobie pierwszy i ładujesz w plik
    //Zdejmujesz pierwszy bo .push_back() ładuje od tyłu
   
    i = my_list.begin();
    my_list.erase( i );
    //Teraz "Jakiś wpis #" będzie pierwszy ale ty przed usunięciem pisz do pliku
    //+ do tego biblioteka do czasu + pliki z logami i viola !
    cout << "Pierwszy: " << my_list.front() << endl;
   
    return 0;
}
P-48306
kemsai
Temat założony przez niniejszego użytkownika
» 2012-01-15 17:26:30
DejaVu ja bym chciał ten projekt przerabiać w visualu ale nie wiem czy wtedy nie będzie problemów z kompilacją na linuxa(wiem że pewnie to jest głupie), ale nie dam sobie rady z linkowaniem tylu bibliotek i zmianą jakichś bardziej zaawansowanych opcji w ustawieniach visuala.

Co do kolegi wyżej to ja nie pisze sam tylko przerabiam. Jest to OTS (open tibia server), nie pisałem odrazu bo na takich forach gdy widzą słowo Tibia to odrazu zaczynają bez powodu negować...
Gracze tam są zapisywani na 2 sposoby, co jakiś czas wszyscy, lub co wylogowanie się z gry. Jeżeli by zapisywało tak od końca to niektóre osoby by się zapisały a inne nie, co by było niesprawiedliwe.


Tak poza tym w valgrindzie chciałem wycieków szukać ale jest to dla mnie nieczytelne.
P-48308
Drraven
» 2012-01-15 17:53:04
Tu robisz stop serwera na chwilę i lecisz po wszystkich jakich zalogowało :D
od ostatniego czasu.

A swoją drogą działanie na listach nikogo by nie ominęło, zapisany to spada na koniec. i tak cały czas.
P-48310
« 1 » 2
  Strona 1 z 2 Następna strona