最終更新日時:
が更新

履歴 編集

class
<thread>

std::thread::stack_size_hint(C++29)

class thread::stack_size_hint {
public:
  constexpr explicit stack_size_hint(size_t s) noexcept; // (1) C++29
};

概要

生成するスレッドのスタックサイズを設定するための、スレッド属性 (thread attribute) クラス。

threadまたはjthreadのコンストラクタで、関数オブジェクトより前の引数として渡すことで、スレッドが必要とするプラットフォーム固有の記憶域(主に自動記憶域期間の変数に使われる、いわゆるスタック)の望ましいサイズをバイト数で指定する。

std::jthread t{std::thread::stack_size_hint(512 * 1024), f, 42};

これはあくまでヒントであり、実装はプラットフォーム固有の要件を満たすために、設定するスタックサイズを上下に調整してよく、要求を無視することもできる。

  • (1) : スタックサイズのヒント値s(バイト数)を保持して構築する

jthreadでは、別名jthread::stack_size_hintとしても使用できる。

備考

  • 指定した値が0である場合、この属性は無視される
  • デフォルトのスタックサイズはプラットフォームによって異なる(Windowsでは通常1MB、多くのUnix系では2MBなど)。大量のスレッドを起動するアプリケーションでの使用量の削減や、深い再帰・大きな自動変数を使うアプリケーションでの拡大、プラットフォーム間で一貫したサイズの確保などに使用できる
  • 要求したスタックサイズを満たせない場合に、実装が例外を投げることは許可されるが、要求はされない

#include <thread>
#include <iostream>

void work()
{
  std::cout << "work" << std::endl;
}

int main()
{
  // スタックサイズ512KiBのヒントを指定してスレッドを生成する
  std::jthread t{std::thread::stack_size_hint(512 * 1024), work};
}

出力

work

バージョン

言語

  • C++29

処理系

関連項目

参照