2017-07-22 3 views
-1

Linuxマシンのデフォルトのスタックサイズを8MBから2MBに変更しました。この変更で保存したメモリ量を比較したいと思います。どのように私は、8メガバイトのスタックサイズとシステムの変更の影響と2メガバイトのスタックサイズのものを比較することができ異なるデフォルトのスタックサイズを比較するには?

+0

これは、トピック外の質問の匂いがする。特にいくつかの解答のあなたのコメントに基づいています。おそらく、スタックオーバーフローの質問を少し改善することができます。そして明らかにするために、Stack Overflowはプログラミングと開発に関する質問のサイトです。 – jww

答えて

1

などの増加数を出力します非末尾再帰関数で書く:例えば

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

をC++(任意の言語を使用することができます)で、どのくらいの距離を参照してください。ほとんどのプログラムはあまりそれを必要としません。

あなたのコメントに続いて、シェル内の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 
関連する問題