最近APUEを読んでいて、問題が見つかりました。
使用する一般的な方法の1つpthread_attr_setstack
は、
malloc
記憶のチャックaddr
およびlength
をメソッドで設定します
次に、私の質問があります。データを保護するためにガードサイズを使用したい場合はどうなりますか?A
メモリのB
バイトとガードサイズのバイトが必要だとします。
私はmalloc
A+B
バイト、またはmalloc
A
バイトでしょうか?
実際、pthreadライブラリ自体がガードサイズを設定するためのAPIを提供します
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
ただし、 pthread_attr_setstack(3)
またはpthread_attr_setstackaddr(3)
のような関数を使用してスタックの場所またはサイズを設定している場合、ガードサイズ属性は無視されます(つまり、システムによってガード領域が作成されない)。処理するのはユーザーの責任です。スタックオーバーフロー(おそらく、mprotect(2)
割り当てたスタックの最後にガードエリアを手動で定義するために使用します。
したがって、特定の質問に答えると、はい、A+B
を使用する場合は、ガード領域を自分で含めるためにバイトをmallocする必要がありますpthread_attr_setstack
。それ以外の場合、デフォルトのスタックサイズで問題がなければ、pthread_attr_setstack
関数を使用します。
ここについて読んでpthreads
ください。また、ここのセクションでスレッドスタック管理について具体的に読んでくださいStack Management