Program a pamięć operacyjna.
Ostatnio zmodyfikowano 2013-12-10 01:41
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 : #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) |
|
bnk120 |
» 2013-12-10 01:00:38 Sprawdź różnice w trybie Release. |
|
whiskas Temat założony przez niniejszego użytkownika |
» 2013-12-10 01:11:50 |
|
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. |
|
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 =] |
|
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. |
|
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 =] |
|
« 1 » |