В дополнение к действительным пунктам, которые Николь делает:
Когда вы вызываете new / malloc, это не обязательно соответствует 1 к 1 с вызовом ОС для выделения памяти. Это связано с тем, что для уменьшения количества дорогих системных вызовов диспетчер кучи может выделить больше запрошенного, а затем «перераспределить» фрагменты этого при вызове new / malloc. Кроме того, память может быть выделена только 4 КБ за раз (как правило, это минимальный размер страницы). По существу, могут быть выделенные фрагменты памяти, которые в настоящее время не используются активно, чтобы ускорить будущие выделения.
Чтобы ответить на ваши вопросы напрямую:
1) Да, среда выполнения, скорее всего, выделит больше памяти, чем вы просили - но эта память не будет потрачена впустую, она будет использоваться для будущих новостей / malloc, но все равно будет отображаться в «диспетчере задач» или любом другом инструменте ты используешь. Нет, это не будет способствовать удвоению поплавков. Чем больше выделений вы сделаете, тем меньше вероятность того, что это граничное условие станет причиной разницы в размерах, и элементы Никола будут доминировать. При меньшем количестве выделений этот элемент, вероятно, будет доминировать (где «большой» и «маленький» полностью зависит от вашей ОС и ядра).
2) Диспетчер задач Windows выдаст вам общий объем выделенной памяти. Что-то вроде WinDbg фактически даст вам фрагменты диапазона виртуальной памяти (обычно выделяемые в виде дерева), которые были выделены во время выполнения. Я предполагаю, что для Linux эти данные будут доступны в одном из файлов в каталоге / proc, связанном с вашим процессом.