我创建了许多简单的程序,它们不需要任何内存,但它们总是在任务管理器的私有内存列中显示大约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个线程。
谢谢!
答案 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。)