2013-04-25 87 views
3

如何減少C中線程所使用的內存?雖然一個線程需要大約8到10 MB的內存,但是有什麼辦法可以減少這個內存嗎?c中線程的內存分配

+2

如果你理性地思考這個問題,它不應該成爲一個問題。你的CPU有多少核心?您嘗試啓動多少個線程?如果您嘗試啓動2000個線程,則內存不會是您所面對的唯一問題。 – Sebivor 2013-04-25 11:25:16

+1

需要考慮的另一件事是,在大多數系統中,堆棧是按照一定的頁面大小(通常在4Kb左右)進行分配並自動增長的。即使你的線程庫爲堆棧分配了X數量的MB,也並不意味着它們實際上正在被使用。作爲一個實驗:編寫一個程序,分配所有可用的物理RAM然後休眠。運行它並檢查它是實際使用的內存(RSS,Resident Set)。 – 2013-04-25 13:08:31

回答

6

是的,你可以設置線程堆棧的大小。

pthread_attr_t attribute; 
pthread_t thread; 
pthread_attr_init(&attribute); 
pthread_attr_setstacksize(&attribute,size); // size may be defined by u as 1024,2048,etc 
pthread_create(&thread,&attribute,fun,0); 

............................................ .....

void *fun(void *arg) 
{ 
     .... 
} 
2

正如已經回覆的,您可以在您的應用程序中使用pthread屬性。

但你也可以設置限制在當前shell啓動與ulimit命令的任何應用程序:

  • ulimit -s:顯示在昆明植物研究所
  • 電流限制
  • ulimit -s 1024:限制堆棧1 MIB