Подводя итог тому, что @Peter сказал в своем комментарии: Ваша переменная i
считает количество выделений , а не общий объем выделенной памяти.
Обратите внимание, однако, что даже если вы «исправите» это, вы получите не количество «доступной памяти» и даже не объем доступной памяти, округленный до кратного 8000. Это потому, что » «Доступная память» - не очень четкое понятие. Операционная система может быть готова позволить вам выделить миллион байтов; но он может на самом деле не делать ничего видимого для других процессов, пока вы не начнете запись в эту память. И даже если вы сделаете запись на него - он может поменять неиспользуемые страницы памяти на жесткий диск / SSD, чтобы освободить место для страниц, над которыми вы работаете.
Если вы хотите проверить, какой максимальный объем памяти вы можете выделить с помощью new
, вы можете рассмотреть возможность использования процедуры, подобной бинарному поиску, для получения размера; Я не буду разъяснять это, если это твоя домашняя работа. (И, конечно, это тоже не будет точным, поскольку использование памяти другими процессами колеблется.)
Также рассмотрите чтение: Как получить доступную память C ++ / g ++?
Наконец, некоторые клыки:
- Вы используете противоречивые отступы. Это сбивает с толку.
i
не очень хорошее имя для переменной. num_allocations
подошло бы лучше. Когда вы используете более значимое имя, вы также фиксируете его семантику, что затрудняет их перепутывание.
- Старайтесь избегать «магических чисел», таких как 1000. Определите константы, используя
enum
или constexpr
. Например: enum { Kilo = 1000 };
.
- Кажется, нет веской причины использовать
double
в такой программе, которая не имеет ничего общего с арифметикой с плавающей точкой.