Почему Visual Studio Diagnostic Tools показывает слишком много использования памяти?

Я написал этот кусок кода:

#include "Colour.h"
int main(int argc, char** argv) {

//sizeof(Colour) = 3
Colour* data = new Colour[8 * 8];

for (int y = 0; y < 8 * 8; y++)
{
data[y] = Colour::WHITE;
}
}

В этом примере Color — это структура размером три байта

Таким образом, я ожидаю, что эта программа выделит 8 * 8 * 3 = 192 байт.
Но на панели инструментов диагностики это показывает использование 889 kB ?

введите описание изображения здесь

Что странно, когда я копаю немного глубже, создавая снимок памяти, он показывает размер кучи 71kB, Но, глядя на источник, он показывает только одно распределение размером 192 байта.

Что происходит?
Возможно ли, что он выделяет всю эту память для кадра стека?

3

Решение

Ну, ваше приложение на самом деле не плавает в вакууме. Когда вы запускаете его, ОС также создает окно для вывода вашего приложения и запускает его, где-то удерживая дескриптор. Он выделяет некоторую память для стека (точное количество может варьироваться, и я думаю, что это можно изменить самостоятельно).

Сам процесс по сути является контейнером, который представлен объектом процесса ядра. Он также хранит некоторые данные, необходимые для его работы. Все вышеперечисленное требует памяти, и я полагаю, именно поэтому ваш (почти пустой) процесс выделяет так много.

Кроме того, если вы сделаете два снимка, один в начале выполнения вашего приложения (до выполнения первой строки), а другой после выполнения первой строки, вы увидите, что размер кучи увеличился примерно на величину память, которую вы выделили, и большая часть памяти была выделена до ваш собственный код был поражен:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]