Как скомпилировать, чтобы уменьшить память / STACK, кажется, ничего не меняет? - PullRequest
4 голосов
/ 06 июня 2011

Я создаю много простых программ, которые не нуждаются в какой-либо памяти, но они всегда показывают около 1 МБ-1,6 МБ памяти в столбце частной памяти в диспетчере задач.

Я прочитал, что размер стека по умолчанию составляет 1 МБ для связи с link.exe, я попытался поиграть с / STACK следующим образом:

/STACK:65536 (64kb)
/STACK:16777216 (16mb)

когда я запускаю программу, память совсем не изменилась ..

Даже такая простая программа, как 1.6MB, скомпилированная как 64-битная с link.exe и без libs (simple.c):

#include <stdio.h>

int main() {
  puts("hello world\n");
  getchar();
  return 0;
}

Может кто-нибудь сказать мне, как я могу уменьшить память на простых программах? я знаю, что 1 МБ не так много, но мне очень любопытно, так как есть некоторые процессы Windows, которые показывают очень мало памяти в Taskman, например smss.exe использует 0,4 МБ личной памяти с 2 потоками.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Вы можете уменьшить отпечаток, если не включите stdlib и не будете ссылаться на библиотеки, которые не используете. Все связанные dll получают собственный сегмент данных, и я считаю, что он включен в ваш личный набор.


После удаления всех библиотек STD с помощью Да (/ NODEFAULTLIB) установите мои оптимизации на O1 и установите мою точку входа winmain, чтобы избежать @_crtstatuperror с использованием этого кода

#include <windows.h>

int winmain(    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{

    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    char out[] = "bob";
    DWORD Outchar = 0 ;    
    WriteConsole(h, out, 4, &Outchar,  NULL);
    return 0;
}

Я сократил использование памяти до 292 КБ, не получая по-настоящему экзотики. Не думаю, что вы могли бы получить ее намного ниже

0 голосов
/ 06 июня 2011

Вы также можете попробовать уменьшить размер кучи. Для Visual Studio это можно сделать с настройкой / HEAP . (По умолчанию куча составляет 1 МБ.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...