2012-05-10 10 views
1

最近ではAPUEと読んでいますが、問題が見つかりました。 pthread_attr_setstackを使用するスレッドの作成時にstack_size、stack_addr、guardsizeを設定する方法

一般的な方法の1つは、

  1. malloc方法

によってaddrlengthを設定メモリ

  • のチャックにあるし、ここで私の質問は、私は何をすれば、来ます私のデータを保護するためにガードサイズを使用したいですか? Aバイトのメモリが必要であり、ガードサイズがBバイトであるとします。

    Shall I mallocA+Bバイト、またはmallocAバイト?

  • 答えて

    0

    実際のpthreadライブラリ自体はset the guard size

    int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize); 
    

    にAPIを提供しますが、注意して使用すると、スタック位置やサイズを設定し、どちらかあなたがpthread_attr_setstack(3)またはpthread_attr_setstackaddr(3)のような関数を、使用している場合は、その後、ガードサイズ属性(つまり、システムによってガードエリアが作成されない)スタックオーバーフローを処理するのはあなたの責任です(おそらくmprotect(2)を使用して、割り当てたスタックの最後にガードエリアを手動で定義することによって)。

    だから、あなたの仕様に来るもしあなたがpthread_attr_setstackを使用したいならば、自分でガードエリアを含めるには、A+Bバイトをmallocする必要があります。そうでなければ、デフォルトのスタックサイズでOKなら、pthread_attr_setstack関数を使用します。

    pthreadsについてはこちらをご覧ください。また、スレッドスタック管理についてはhereのセクションStack Management

    関連する問題