スレッドのスタック使用量を監視しようとしています。これを行うには、スレッドスタックのアドレスを知る必要があります。これを行うには、pthread_attr_setstack()
を使用してスタックを設定するしかありません。pthreadスタックにメモリを正しく割り当てる方法
私は現在、メモリを割り当てるためにはmmapを使用しています:
pthread_attr_t ptAttr;
pthread_t pth;
pthread_attr_init(&ptAttr);
void *stack = mmap(NULL, stksize, PROT_WRITE|PROT_READ, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
pthread_attr_setstack(&ptAttr, stack, stksize);
pthread_create(&pth,&ptAttr,threadFunc,&info);
だから、最初の質問を、これはmmap
でメモリを割り当てるのは良い方法ですか?フラグは正しいですか?代わりにmalloc
を使用する必要がありますか?これは、仮想/スワップメモリを持たない低リソースデバイス上で実行されます。
2番目の質問ですが、このメモリはスレッドが終了すると自動的に解放されますか?あなたがわからない場合は、それがリリースされているかどうかを調べる方法はありますか?
感謝。実際には開発用であり、生産用ではありません。安定性の問題の測定として、時間の経過とともに最大スタック使用量を測定しようとしています。私たちが計画していることは、特定の文字や単語にスタックメモリを初期化し、しばらくの間、スレッド実行させ、その後、我々はパターンが破壊される前に、これがあるスタックのどれくらいを見つける取得どのくらいスタックダウンチェックすることです使用された。あなたが言及したように、私はいくつかの余分なメモリを割り当て、mprotectを使ってガードページを作成します。 – barsju
メモリを解放すると、それは我々がとにかく停止されることはありませんに興味があるものから、大きな問題になることはありません。 – barsju
あなたの方法(上書きさパターンをチェックする)は、おそらく実際に動作し、それは私が説明した設定よりも簡単です。 –