Używam tego kodu:pamięci obraz spadek
#include <iostream>
#include <cstddef>
int main(int argc, char *argv[]){
int a1=0, a2=0;
int a3,a4;
int b1=++a1;
int b2=a2++;
int*p1=&a1;
int*p2=&++a1;
size_t st;
ptrdiff_t pt;
int i=0;
while(true){
printf("i: %d",i++);
}
printf("\n\ni now is: %d\n",i);
return 0;
}
dlaczego obserwować taki spadek w pamięci obrazu (fiolet): legenda:
Zrobiłem ten ogólny projekt Win32, nie CLR. Zmieniłem kod, więc zobaczę, kiedy int stało się ostatecznie ujemne. Obecnie() jest:
int i=0;
while(0<++i){
printf("i: %d",i++);
}
printf("\n\ni now is: %d\n",i);
To dziwne: zobacz co się stało po zaledwie 30000 iteracjach. Dlaczego widzimy te fluktuacje w pamięci obrazu? Teraz widzę, że prawdopodobnie dotyczy to samej VMMap, ponieważ dzieje się tak tylko wtedy, gdy wybiorę "uruchomienie & śledzić nowy proces", ale nie wtedy, gdy "zobacz działający proces" i wskaż działający exe uruchomiony z VS2010. Oto ekran procesu „rozpoczęła & prześledzić”:
zaobserwowałem również ogromny stronicowania pamięci, która rozpoczęła się mniej więcej z tego spadku w obrazie (ten stronicowania prawie przyspieszył i szybko wywołał limitu RAM, że mam ustawiony 2GB): i tutaj jest uruchomiony proces tylko „oglądane” (prowadzona od VS2010):
więc może jakiś problem z zastrzeżeniem zarządzania pamięcią wniosków NET odbywa się tutaj? Wciąż czekam na moją int przekraczania granicy dwóch dopełnień.
cóż ... Muszę ponownie edytować: okazuje się, że jak wcześniej sądzono - malejący efekt obrazu pamięci jest obecny, gdy proces jest oglądany tylko (nie uruchomiony). Poniżej jest dołączony obraz samego procesu 10 minut później (wciąż czeka na toczenie int do ujemny):
i tutaj jest:
więc największy dodatni 2-dopełniacza na mój maszyna znajduje się 2 147 483 647 i najmniejszy ujemny jest -2 147 483 648, co jest łatwe do sprawdzenia w ten sposób:
#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();
dał mi ten sam wynik: -2 14 7 483 648 i 2 147 483 647
powrót do początku kiedy komentuję wszystko oprócz pętli while() - to samo dzieje się: obraz zmniejsza się po procesie trwającym około 10 minut, więc to nie jest bezużyteczne kod, który to powoduje. ale co?
Czy można odtworzyć ten wzór zużycia pamięci w kółko? – dirkgently
Być może rejestrowanie printf zajmuje trochę miejsca w grafice? –
Jak to możliwe, że obraz ma charakter? @dirkgently, do tej pory to nadal działa, ponieważ chcę zobaczyć, co int ostatecznie będzie – 4pie0