2017-07-22 85 views
-1

我將Linux機器的默認堆棧大小從8MB更改爲2MB,並且想要將我保存的內存量與此更改進行比較。如何可以比較與8MB堆棧大小的系統更改和一個與2 MB堆棧大小的效果如何比較不同的默認堆棧大小?

+0

這種異味問題;特別是根據你在某些答案中的一些評論。也許你可以改善Stack Overflow的問題。並且要清楚,Stack Overflow是編程和開發問題的網站。 – jww

回答

1

編寫打印越來越多的諸如非尾遞歸函數:

void stackOverFlowMe(int i) { 
    cout<<i<<"\n"; 
    stackOverFlowMe(i+1); 
} 

例如在C++中(你可以使用任何語言),並看看它有多遠。大多數程序並不需要那麼多。

在您的評論之後,您可以在shell中使用top來檢查所有Linux發行版中的內存使用情況。第一行對全球信息:

top - 11:27:46 up 18 days, 21:08, 13 users, load average: 0.71, 0.23, 0.16 
Tasks: 277 total, 2 running, 274 sleeping, 1 stopped, 0 zombie 
%Cpu(s): 1.4 us, 0.4 sy, 0.0 ni, 98.1 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem : 8105520 total, 1798056 free, 3223720 used, 3083744 buff/cache 
KiB Swap: 5192700 total, 5165132 free, 27568 used. 3993932 avail Mem 
+0

我想知道通過做這個改變我已經節省了多少內存,但是當我比較我在系統中看到相同的值。如果你能給我一些信息,那將是非常好的。謝謝 –

+0

@ ABHINAVKUMAR13BIT0087請參閱編輯您的記憶的全局圖片。不確定你會受到什麼影響,取決於你正在運行的是什麼。 – kabanus

+0

是的,我嘗試了頂部,免費,vmstat,/ proc/meminfo,但我無法找到太多的區別。但我會盡力去深入探索 –

0

當程序在你的Linux中運行,他們添加和從堆棧定期爲程序功能刪除數據。堆棧大小反映堆棧在內存中分配了多少空間。如果增加堆棧大小,則允許程序增加可以調用的例程數量。每次調用函數時,都可以將數據添加到堆棧中(堆積在最後一個例程數據的頂部)。

除非程序非常複雜,或者爲特殊目的而設計,堆棧大小爲8192kb通常很好。某些程序如圖形處理程序要求您增加堆棧的大小以便運行。因爲他們可能會在堆棧上存儲大量數據。以下是一些改變堆棧大小的命令。希望這會有所幫助。

SunOS/Solaris: 
============== 
    > limit   # shows the current stack size 
    > unlimit  # changes the stack size to unlimited 
    > setenv STACKSIZE 32768 # limits the stack size to 32M bytes 

Linux: 
====== 
    > ulimit -a  # shows the current stack size 
    > ulimit -s 32768 # sets the stack size to 32M bytes