最近ではAPUEと読んでいますが、問題が見つかりました。 pthread_attr_setstack
を使用するスレッドの作成時にstack_size、stack_addr、guardsizeを設定する方法
一般的な方法の1つは、
malloc
方法
によってaddr
とlength
を設定メモリ
A
バイトのメモリが必要であり、ガードサイズがB
バイトであるとします。 Shall I malloc
A+B
バイト、またはmalloc
A
バイト?
最近ではAPUEと読んでいますが、問題が見つかりました。 pthread_attr_setstack
を使用するスレッドの作成時にstack_size、stack_addr、guardsizeを設定する方法
一般的な方法の1つは、
malloc
方法によってaddr
とlength
を設定メモリ
A
バイトのメモリが必要であり、ガードサイズがB
バイトであるとします。 Shall I malloc
A+B
バイト、またはmalloc
A
バイト?
実際の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