уменьшение образа памяти

Я запускаю этот код:

#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;
}

почему я наблюдаю такое уменьшение памяти изображений (фиолетовый): enter image description here легенда:

enter image description here Я сделал этот общий проект Win32, а не CLR. Я изменил код, так что я увижу, когда int станет наконец отрицательным. Теперь while() выглядит следующим образом:

    int i=0;
    while(0<++i){
        printf("i: %d",i++);
    }
    printf("\n\ni now is: %d\n",i);

Это странно: пожалуйста, посмотрите, что произошло всего после 30000 итераций.Почему мы видим эти колебания в памяти образов? Теперь я вижу, что, вероятно, это связано с самим VMMap, потому что это происходит, только если я выбираю «запустить и отслеживать новый процесс», но не когда «просматриваю запущенный процесс» и указываю на запуск exe, запущенного из VS2010. Вот скрин процесса "запущен и отслежен": enter image description here

Я также наблюдал сильное подкачка памяти, которая началась примерно с этого падения изображения (это подкачка почти ускорилась и быстро сработало ограничение ОЗУ, которое я установил на 2 ГБ): enter image description here а вот запущенный процесс только "просматривается" (запущен из VS2010): enter image description here

так что, возможно, здесь имеет место какая-то проблема, связанная с управлением памятью приложений .NET? Я все еще жду, когда мой int пересечет границу двух дополнений.

ну... Приходится снова редактировать: оказывается, как и думалось ранее - эффект уменьшения изображения памяти присутствует и при просмотре (не запуске) процесса. Ниже прикреплено изображение того же процесса через 10 минут (все еще ожидание превращения int в негатив): enter image description here

и вот оно:

enter image description here

так что самое большое положительное 2-дополнение на моей машине равно 2 147 483 647 и наименьшее отрицательное число равно -2 147 483 648, что легко проверить следующим образом:

#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();

это дало мне тот же результат: -2 147 483 648 и 2 147 483 647

вернуться к началу когда я комментирую все, кроме цикла while() - происходит то же самое: изображение уменьшается после того, как процесс работает около 10 минут, так что это не бесполезный код, который вызывает это. а что?

7
задан Cœur 25 February 2017 в 14:08
поделиться