Объем памяти, используемый приложением
От: krz  
Дата: 04.10.08 14:25
Оценка:
Здравствуйте.

Как-то вдруг обратил внимание, что программка, которую я использую, занимает по данным Task Manager 1,5 мегабайта в памяти. Стало интересно, смогу ли я написать такую же, но которая бы занимала 50 килобайт. Скачал MS Visual Studio Express, скомпилировал и запустил простую программу, состоящую из вызова getch, запустил и очень удивился — запущенная программа заняла те же 1,5 мегабайта. Покопался в настройках, снизил до 1,3. Полученный результат меня не удовлетворил и я обратил свой взор к ассемблеру. Поискал различные примеры, позапускал их столкнулся с той же проблемой — меньше мегабайта никто не использует (программы простейшие, Hello World). В конце концов я наткнулся на http://www.grc.com/smgassembly.htm, small is beautiful, автор пропагандирует идею небольшого размера, и что же — запустив его пример (простое окошко с меню), я вижу 6 мегабайт.

Объясните пожалуйста, я отстал от жизни, и это теперь нормально, писать такие маленькие программки, которые занимают так много места в памяти ("да кто их считает?...")? Или я что-то делаю не так, если да, посоветуйте, пожалуйста, что делать. И, да, far занимает 400 килобайт. Ведь можно же!

Спасибо.
Re: Объем памяти, используемый приложением
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.10.08 17:03
Оценка: +1
Здравствуйте, krz, Вы писали:

krz>Здравствуйте.


krz>Как-то вдруг обратил внимание, что программка, которую я использую, занимает по данным Task Manager 1,5 мегабайта в памяти. Стало интересно, смогу ли я написать такую же, но которая бы занимала 50 килобайт. Скачал MS Visual Studio Express, скомпилировал и запустил простую программу, состоящую из вызова getch, запустил и очень удивился — запущенная программа заняла те же 1,5 мегабайта. Покопался в настройках, снизил до 1,3. Полученный результат меня не удовлетворил и я обратил свой взор к ассемблеру. Поискал различные примеры, позапускал их столкнулся с той же проблемой — меньше мегабайта никто не использует (программы простейшие, Hello World). В конце концов я наткнулся на http://www.grc.com/smgassembly.htm, small is beautiful, автор пропагандирует идею небольшого размера, и что же — запустив его пример (простое окошко с меню), я вижу 6 мегабайт.


krz>Объясните пожалуйста, я отстал от жизни, и это теперь нормально, писать такие маленькие программки, которые занимают так много места в памяти ("да кто их считает?...")? Или я что-то делаю не так, если да, посоветуйте, пожалуйста, что делать. И, да, far занимает 400 килобайт. Ведь можно же!


Размер аллоцированной виртуальной памяти не имеет никакого отношения (кроме обязательного неравенства;)) ни к реально занятой виртуальной памяти, ни к реально занятой физической памяти. То, что Вы увидели — видимая приложению виртуальная память. Используется лишь малая её часть.

В общем, читайте книги по VM, они рулез.:)
The God is real, unless declared integer.
Re: Объем памяти, используемый приложением
От: Sergey Chadov Россия  
Дата: 05.10.08 17:09
Оценка:
Здравствуйте, krz, Вы писали:


krz>Объясните пожалуйста, я отстал от жизни, и это теперь нормально, писать такие маленькие программки, которые занимают так много места в памяти ("да кто их считает?...")? Или я что-то делаю не так, если да, посоветуйте, пожалуйста, что делать. И, да, far занимает 400 килобайт. Ведь можно же!


#include "windows.h"

int main()
{
    static const unsigned int buf_sz = 0x10; 
    DWORD bytes_read = 0;
    char buf[buf_sz]={};
    HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
    ReadConsole(
        hInput,
        buf,
        buf_sz,
        &bytes_read,
        0
    );

    return 0;
}


cl:
/O1 /Os /Oy /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /FD /MD /GS- /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /TP /errorReport:prompt


link:
/OUT:"F:\projects\msvc8\minmem\Release\minmem.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST:NO /NODEFAULTLIB /SUBSYSTEM:CONSOLE /HEAP:128,128 /STACK:128,128 /OPT:REF /OPT:ICF /LTCG /ENTRY:"main" /MACHINE:X86 /FIXED /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib


дает exe размером в 2 кб и расход приватной памяти в 160 Кб. И это без трюков+
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[2]: Объем памяти, используемый приложением
От: krz  
Дата: 05.10.08 19:58
Оценка:
Здравствуйте, netch80, Вы писали:

N>В общем, читайте книги по VM, они рулез.


Спасибо, поинтересуюсь.
Re[2]: Объем памяти, используемый приложением
От: krz  
Дата: 05.10.08 19:58
Оценка:
Здравствуйте, Sergey Chadov, Вы писали:

SC>дает exe размером в 2 кб и расход приватной памяти в 160 Кб. И это без трюков+


Спасибо, поэкспериментирую.
Re: Объем памяти, используемый приложением
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 08.10.08 14:49
Оценка:
Здравствуйте, krz, Вы писали:

krz>Как-то вдруг обратил внимание, что программка, которую я использую, занимает по данным Task Manager 1,5 мегабайта в памяти.


По умолчанию каждый поток имеет мегабайт стека. Скорее всего, он и посчитался. При сборке программы можно это число уменьшить.
Re: Объем памяти, используемый приложением
От: wildwind Россия  
Дата: 08.10.08 15:15
Оценка:
Здравствуйте, krz, Вы писали:

krz>программка, которую я использую, занимает по данным Task Manager 1,5 мегабайта в памяти.


А по каким именно данным? Task Manager может показывать много всяких цифр, и в них многие путаются.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.