如何编译以减少内存/ STACK似乎没有改变什么?

时间:2011-06-05 23:31:51

标签: c++ c compilation

我创建了许多简单的程序,它们不需要任何内存,但它们总是在任务管理器的私有内存列中显示大约1MB-1.6MB的内存。

我读到使用link.exe链接的默认堆栈大小为1MB,我尝试使用/ 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;
}

谁能告诉我如何减少简单程序的内存?我知道1mb并不多,但我很好奇,因为有一些Windows进程在taskman中显示非常低的内存,例如smss.exe运行0.4MB私有内存,有2个线程。

谢谢!

2 个答案:

答案 0 :(得分:3)

如果您不包含stdlib,可以减少足迹,并确保不要链接到您不使用的库中。所有链接的dll都有自己的私有数据段,我相信它包含在您的私有集中。


使用Yes(/ NODEFAULTLIB)删除所有STD库后,将我的优化设置为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;
}

我的内存使用量降到了292K而且变得非常异国情调我不认为你可以降低很多

答案 1 :(得分:0)

您也可以尝试减少堆大小。对于Visual Studio,可以使用/HEAP设置完成此操作。 (默认情况下,堆为1MB。)