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

Długie włączanie programu przez tablice dynamiczną (dopiero od pewnej wartości).

Ostatnio zmodyfikowano 2016-10-31 14:33
Autor Wiadomość
matka5432
Temat założony przez niniejszego użytkownika
Długie włączanie programu przez tablice dynamiczną (dopiero od pewnej wartości).
» 2016-10-31 13:10:03
Witam, mam dziwny problem z tablicą dynamiczną. Mianowicie:

JEŻELI zmienna "y" jest większa od około 7.5mln ORAZ y-o > około -40 tyś
TO
funkcja int main() uruchamia się dopiero po kilku sekundach od uruchomienia programu. W przeciwnym wypadku natychmiast.


Nie rozumiem powodu takiego zachowania programu.
Poniżej zamieszczam kod:

C/C++
#include <iostream>

using namespace std;

int main()
{
    cout << "start" << endl;
   
    int * niep;
    int y = 80000000;
   
    niep = new int[ y ];
   
    int o = 80040000;
   
    for( int i = o; i >= 0; i-- )
         niep[ i ] = o - 1 - i;
   
   
   
    return 0;
}


Dodam, że po wrzuceniu zawartości funkcji int main() do pętli (poza return rzecz jasna), mimo tego że w pętli za każdym razem tworzona jest tablica dynamiczna, krok pętli trwa krócej niż przejście do funkcji int main() od czasu włączenia programu.
Jeśli ktoś powie, że to dlatego, że tylko na początku pamięć jest alokowana, to się najprawdopodobniej myli, ponieważ jeśli nadam wartość zmiennej "y" przez std::cin to problemu nie ma.
P-153095
michal11
» 2016-10-31 13:44:09
1. jak dynamicznie alokujesz pamięć w starym stylu to musisz ją też zwalniać delete (i tak najlepiej w twoim przypadku użyc std::vector<>).
2. masz błąd w pętli, chcesz iterować od elementu 80040000 a twoja tablica ma tylko 80000000 elementów.
3. na starcie programu wypisujesz coś na ekran ale korzystasz z buforowanego cout, spróbuj zmienić na cerr i zobacz czy wypisze się od razu czy nie.

sprawdziłem i u mnie program odpala się od razu i wykonuje ok 1 sek.
P-153101
pekfos
» 2016-10-31 14:16:42
funkcja int main() uruchamia się dopiero po kilku sekundach od uruchomienia programu. W przeciwnym wypadku natychmiast.
Jak rozumiem, testowane raz na kompilację programu..?
P-153106
matka5432
Temat założony przez niniejszego użytkownika
» 2016-10-31 14:33:46
1. jak dunamicznie alokujesz pamięć w starym stylu to musisz ją też zwalniać delete
Wiem, że pod koniec wypada usunąć to co się stworzyło, ale często zapominam :D W każdym razie nie pomogło w tym przypadku.
2. masz błąd w pętli, chcesz iterować od elementu 80040000 a twoja tablica ma tylko 80000000 elementów.
To nie do końca błąd, bardziej test, ponieważ tylko sprawdzałem w jakich okolicznościach program się długo uruchamiał (podałem warunki na początku). Właśnie problem był taki, że kiedy program włączał się tylko wtedy, kiedy tablica miała mniej elementów niż było to wymagane.
3. na starcie programu wypisujesz coś na ekran ale korzystasz z buforowanego cout, spróbuj zmienić na cerr i zobacz czy wypisze się od razu czy nie.
Spróbowałem użyć cerr, ale efekt taki sam.

sprawdziłem i u mnie program odpala się od razu i wykonuje ok 1 sek.
Prawdopodobnie dlatego, że we wklejonym programie nie jest spełniony warunek ""y" jest większa od około 7.5mln ORAZ y-o > około -40 tyś".




Jak rozumiem, testowane raz na kompilację programu..?
Dobrze rozumiesz. Okazuje się, że po uruchomieniu pliku wykonywalnego problem nie występuje, ale ciekawi mnie dlaczego?

Dziękuję wam za pomoc :).
P-153108
« 1 »
  Strona 1 z 1