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

Program a pamięć operacyjna.

Ostatnio zmodyfikowano 2013-12-10 01:41
Autor Wiadomość
whiskas
Temat założony przez niniejszego użytkownika
Program a pamięć operacyjna.
» 2013-12-10 00:12:28
Witam. Chciałem się jedną rzecz zapytać. Napisałem sobie o to taki programik :
C/C++
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

void main()
{
    srand( time( 0 ) );
    cout << "Podaj rozmair tablicy:";
    int n, * tab;
    cin >> n;
    tab = new int[ n ];
    cout << "Oto elementy tablicy:" << endl;
    for( int i = 0; i < n; i++ )
    {
        *( tab + i ) = rand() % 100 + 1;
        cout << "tab[" << i << "]:" << *( tab + i ) << endl;
    }
   
    delete[] tab;
   
    _getch();
}
Po odpaleniu go i wpisaniu wartości n (n to rozmiar tablicy) np 1000 jest tworzone 1000 elementów losowych. Mam cały czas menedżera zadań odpalonego i jest spoko, widzę że program pobiera więcej pamięci niż przed podaniem rozmiaru tablicy. Jednak gdy skończy już tworzyć tablicę, to program powinien zwolnić pamięć, a w procesach widzę że program dalej zajmuje tyle samo pamięci. Czy Ja źle rozumiem działanie operatora delete, czy może menadżer źle pokazuje mi ile mój programik bierze pamięci? (Kompiluje na VS 2013 prof)
P-98861
bnk120
» 2013-12-10 01:00:38
Sprawdź różnice w trybie Release.
P-98863
whiskas
Temat założony przez niniejszego użytkownika
» 2013-12-10 01:11:50
Stwierdzam brak różnicy (albo nie zmieniłem trybu, co mi się raczej nie wydaje). Poniżej kilka ss (proces nauka.exe)
http://www.tinypic.pl​/qghympbwmzfm
http://www.tinypic.pl​/c3b4th5pqcpb
http://www.tinypic.pl​/mjm0ldb0x0zo
http://www.tinypic.pl​/f125cmb8r45y
P-98865
DejaVu
» 2013-12-10 01:23:43
Na małych tablicach nie zauważysz różnicy. Windows (jak i każdy inny system operacyjny) stosuje różne mechanizmy zwiększające wydajność zarządzania pamięcią. 4KB danych nie są zasobem krytycznym dla systemu, więc Windows zapewne zakłada, że ten proces jeszcze będzie robił nie jedną operację na dynamicznie przydzielanej pamięci. Tym samym w przypadku ponownej alokacji pamięci, proces aplikacji wykorzysta wcześniej oddany do dyspozycji obszar obszar pamięci, a jeżeli będzie jej za mało to znowu odpyta się jądro systemu o odpowiednio duży blok pamięci dla kolejnego żądania.
P-98867
whiskas
Temat założony przez niniejszego użytkownika
» 2013-12-10 01:29:09
Na 10000 elementowej tablicy rezerwuje 44 KB, dla 100000 elementów new rezerwuje dodatkowe 396 KB - to nie jest potem kasowane. Widać różnicę gdy użyję new, jak używam delete to nie widać różnicy? To się logicznie kupy nie trzyma :D

___

EDIT:
Dobra, zrozumiałem o co chodzi, dzięki za info. Zamykam =]
P-98868
DejaVu
» 2013-12-10 01:36:36
System robi różne dziwne rzeczy, których nie jesteśmy świadomi. Wyjdź z założenia, że menedżer zadań podaje ci szacunkowe zużycie pamięci przez Twoją aplikację, a nie faktyczne użycie pamięci co do bajta.
P-98870
whiskas
Temat założony przez niniejszego użytkownika
» 2013-12-10 01:41:38
Dodam jeszcze tylko taką informację że jeżeli podam rozmiar tablicy >= 1 000 000 to rezerwacja pamięci już jest bardziej dynamiczna, zmienia się co jakąś sekundę w menedżerze, a gdy podawałem wartości do 100 000 to od razu z góry zakładał ile pamięci potrzebuje. Założę więc że 1 000 000 to już wystarczająco dużo pamięci żeby zabrał się na poważnie za to, jednak nie sprawdzę do końca bo bym musiał chwilę czekać. Dzięki za info, zamykam =]
P-98871
« 1 »
  Strona 1 z 1