Я спрашиваю об этом из любопытства, а не из-за реальной необходимости, но можно ли еще уменьшить использование памяти этой крошечной программой MSVC ++? Исходный файл в BitBucket.
Программа была скомпилирована с «оптимизация под размер кода».Он создает окно только для сообщений и устанавливает перехват клавиатуры, показывая значок в области уведомлений в ответ на нажатия клавиш Caps / Num / Scroll Lock.
Согласно VMMap, частные байты распределяются следующим образом:
260 KB: Image
252 KB: Heap
240 KB: Page Table
24 KB: Stack
24 KB: Private Data
------
800 KB TOTAL
Изображение
Само приложение использует только 20 КБ;остальное потребляется дюжиной библиотек DLL.Похоже, что это так мало, как он получает.
Heap
Программа выделяет только около 3 КБ данных в куче: ровно три экземпляра определенного класса.Остальное должно быть из CRT и / или стандартного кода ОС.
Может быть, это можно уменьшить?Это выглядит как главный кандидат на экономию.
Страница таблицы
Общий виртуальный размер этой программы составляет 44 МБ, что составляет около 11 тыс. Страниц.Это в среднем 22 байта на страницу (хотя, по-видимому, куча записей не используется).Так что это, вероятно, не может быть уменьшено дальше.Или может это?
Стек и личные данные
Ну, они уже безумно малы ... хотя я удивляюсь, почему они даже не меньше.Я думаю, что в программе нет такого большого количества личных данных или стека.
Можете ли вы предложить способы сделать любой из этих разделов меньшим, чем он есть?
Дополнительные выводы:
- пустая программа без CRT использует около 204 КБ
- вызов
CreateWindow
добавляет 420 КБ - вызов для установки перехвата клавиатуры добавляет 156 КБ
- , избегая использования CRT, экономит 20 КБ
- , общий виртуальный размер увеличивается аналогичным образом
- , не используя CRT, значительно экономит размер EXE: с 54 КБ и нижедо 18 КБ, 12 из которых являются ресурсами.
Таким образом, похоже, что большая часть этой памяти используется Windows API, что, по-видимому, исключает значительные дальнейшие сокращения, если только не удастся найти способ сделатьзначки крюка / трея работают без создания окна (эта программа все равно уже игнорирует все сообщения).