2011-06-05 24 views
3

我創建了很多簡單的程序,它們不需要任何內存,但它們總是在任務管理器的私有內存列中顯示大約1MB-1.6MB的內存。如何編譯以減少內存/堆棧似乎沒有改變什麼?

,我讀了默認堆棧大小爲1MB與LINK.EXE鏈接,我試着用/ STACK這樣玩:

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

當我運行該程序時,內存沒有根本改變..

即使是一個簡單的程序是這樣,使用1.6MB編譯與LINK.EXE 64位和無庫(simple.c):

#include <stdio.h> 

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

誰能告訴我怎樣才能在減少內存簡單程式?我知道1mb並不多,但我很好奇,因爲有些窗口進程在taskman中顯示非常低的內存,例如smss.exe運行0.4MB私有內存和2個線程。

謝謝!

+0

RELEASE構建是否使用更少的內存? – 2011-06-05 23:48:46

+0

這是發行模式x64。似乎總是0.8mb,嘗試了一個WINAPI條目,看看控制檯是否使用任何,但仍然0.8mb ... – Kaije 2011-06-05 23:55:51

+1

這是什麼意思?如果你的電腦由於內存不足而發生瘋狂分頁,那麼優化你的1 MB玩具程序是不正確的。 – 2011-06-06 02:21:29

回答

3

如果您不包含stdlib,並且確保不要鏈接到您不使用的庫中,您可以減少腳印。所有鏈接的dll都有自己的私人數據段,我相信它包含在您的私人數據集中。


除去使用是(/ NODEFAULTLIB)我的優化設置爲O1和設置我的切入點的WinMain使用此代碼

#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; 
} 

我得到了內存使用情況,以避免在@_crtstatuperror所有STD庫後到292K出來變得非常奇特我不認爲你可以得到它低得多

+0

我沒有鏈接任何庫到我展示的例子 – Kaije 2011-06-05 23:41:16

+0

@Kaije:是的,你鏈接。試試'/ NODEFAULTLIB'並且看到鏈接器不再找到一些符號。 – 2011-06-05 23:55:10

+0

我只是厭倦了沒有默認的圖書館和不使用Windows控制檯命令,我在400k時,我添加了stdio.h它只到了500我使用發佈版本與o1優化。 – rerun 2011-06-05 23:58:48

0

你也可以嘗試減少你的堆大小。對於Visual Studio,可以使用/HEAP設置完成此操作。 (默認情況下,堆是1MB。)

+0

哦OO我認爲堆不是一個固定的東西 – Kaije 2011-06-05 23:44:04

+0

,我只是試過,私人內存仍然是與64kb在堆上相同,只是再次運行相同的EXE和內存是現在0.8MB,隨機.. – Kaije 2011-06-05 23:46:23

+0

nope,由於某些原因,現在缺省堆和堆棧的舊版exe也是0.8mb – Kaije 2011-06-05 23:50:08

相關問題