Небольшое несоответствие
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Всем доброго времени суток.
Имеется код:
Думаю понять, что он делает не сложно( он тупо выделяет память ).
Но интересно не это. Интересен вывод, вот что программа выводит:
Это почти
3Гб
.Но системный монитор( в
windows
читайДеспетчер задач
) показывает, что программа съедает1.5Гб
.И вся эта ересь на фоне того, что на моём ноутбуке всего
2Гб
оперативки.Почему появляется такое несоотвествие? Не замешан ли тут файл подкачки?
Проверь, что у тебя лежит в
i
, когда выводится ответ.Ты определяешь
i
в блоке цикла, по окончание итераций область видимости дляi
должна заканчиваться.selevit, насколько я помню, есть стандарт С++, при котором переменные, объявленные в блоке цикла, видимы и после него, тут как раз этот случай.
Но всё равно, попытался определить переменную
i
перед циклом, результат тот же, значениеi
: 801898По поводу стандарта хз. Но.
Вывод GCC 4.7.1:
В любом случае, после того, как память закончится, ОС будет использовать дисковый своп, если последний доступен.
Да, дело, скорее всего, в файле подкачки.
Я думаю, porshe, ты не прав :)
Если ты скомпилируешь этот код, то ты сам все увидишь.
То есть, переменная объявленная внутри блока, видна только внутри этого блока. По этой причине у меня VS2010 не компилирует твой код.
Вот такой вот стандарт С++ :)
И по поводу твоего кода (в такой редакции)
моя система (ОЗУ 4 Гб) выдает такой результат
при этом системный монитор «говорит» о том, что программа Temp.exe «съела» 2070580 КБ, то есть все ОК.
alf, так или иначе, но этот код( где переменная объявлена в цикле ) у меня компилируется.
Вот, что по этому поводу пишет Шилдт( Герберт Шилдт — Полный справочник по С++. 2006 ):
Видимо в
ubuntu 14
используется старый компилятор. Ради интереса вVirtual Box'е
( windows 7, devcpp 5.4.2 ) попытался прогнать этот код, вот результат:Что и следовало ожидать.
Впрочем, видимо, я поторопился и ляпнул про какой-то там стандарт. Нет такого, каюсь.
Вероятно, в твоей убунте опция
-fpermissive
включена по умолчанию.selevit, да, наверное, включена по умолчанию.