Я запускаю этот код:
#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;
}
почему я наблюдаю такое уменьшение памяти изображений (фиолетовый): легенда:
Я сделал этот общий проект 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. Вот скрин процесса "запущен и отслежен":
Я также наблюдал сильное подкачка памяти, которая началась примерно с этого падения изображения (это подкачка почти ускорилась и быстро сработало ограничение ОЗУ, которое я установил на 2 ГБ): а вот запущенный процесс только "просматривается" (запущен из VS2010):
так что, возможно, здесь имеет место какая-то проблема, связанная с управлением памятью приложений .NET? Я все еще жду, когда мой int пересечет границу двух дополнений.
ну... Приходится снова редактировать: оказывается, как и думалось ранее - эффект уменьшения изображения памяти присутствует и при просмотре (не запуске) процесса. Ниже прикреплено изображение того же процесса через 10 минут (все еще ожидание превращения int в негатив):
и вот оно:
так что самое большое положительное 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 минут, так что это не бесполезный код, который вызывает это. а что?