1

最近APUEを読んでいて、問題が見つかりました。

使用する一般的な方法の1つpthread_attr_setstackは、

  1. malloc記憶のチャック
  2. addrおよびlengthをメソッドで設定します

次に、私の質問があります。データを保護するためにガードサイズを使用したい場合はどうなりますか?AメモリのBバイトとガードサイズのバイトが必要だとします。

私はmalloc A+Bバイト、またはmalloc Aバイトでしょうか?

4

1 に答える 1

0

実際、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

于 2012-05-10T11:41:25.363 に答える