---
lang: ja-jp
breaks: true
---
# C# 実行されているアプリケーションのスタックサイズを取得する方法 2022-07-21
> Checking stack size in C#
> https://stackoverflow.com/questions/2901185/checking-stack-size-in-c-sharp
## 確認するプログラム
```csharp=
public static class Extensions
{
public static void StartAndJoin(this Thread thread, string header)
{
thread.Start(header);
thread.Join();
}
}
internal class Program
{
[DllImport("kernel32.dll")]
static extern void GetCurrentThreadStackLimits(out uint lowLimit, out uint highLimit);
static void WriteAllocatedStackSize(object header)
{
GetCurrentThreadStackLimits(out var low, out var high);
Console.WriteLine($"{header,-19}: {((high - low) / 1024),4} KB");
}
static void Main(string[] args)
{
Console.WriteLine("ビルドログ確認 OLD");
WriteAllocatedStackSize("Main Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 0).StartAndJoin("Default Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 128).StartAndJoin(" 128 KB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 256).StartAndJoin(" 256 KB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 512).StartAndJoin(" 512 KB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 1024).StartAndJoin(" 1 MB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 2048).StartAndJoin(" 2 MB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 4096).StartAndJoin(" 4 MB Stack Size");
new Thread(WriteAllocatedStackSize, 1024 * 8192).StartAndJoin(" 8 MB Stack Size");
Console.ReadLine();
}
}
```
## Release/Any CPU
### `.NET Framework 4.8`(旧csproj)
```shell=
Main Stack Size : 1024 KB
Default Stack Size : 1024 KB
128 KB Stack Size : 256 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
### `net48`
```shell=
Main Stack Size : 1024 KB
Default Stack Size : 1024 KB
128 KB Stack Size : 256 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
### `net6.0`
```shell=
Main Stack Size : 1536 KB
Default Stack Size : 1536 KB
128 KB Stack Size : 128 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
## Release/x64
### `.NET Framework 4.8`(旧csproj)
```shell=
Main Stack Size : 4096 KB
Default Stack Size : 4096 KB
128 KB Stack Size : 256 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
### `net48`
```shell=
Main Stack Size : 4096 KB
Default Stack Size : 4096 KB
128 KB Stack Size : 256 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
### `net6.0`
```shell=
Main Stack Size : 1536 KB
Default Stack Size : 1536 KB
128 KB Stack Size : 128 KB
256 KB Stack Size : 256 KB
512 KB Stack Size : 512 KB
1 MB Stack Size : 1024 KB
2 MB Stack Size : 2048 KB
4 MB Stack Size : 4096 KB
8 MB Stack Size : 8192 KB
```
## 結果
* `net48` では、オールドスタイル/SDKスタイルによる違いはなく、`Any CPU` では `1024 KB`、`x64`では `4096 KB`。
* `net6.0` では、`Any CPU`/`x64`に違いはなく、`1536 KB`。
###### tags: `C#` `スタックサイズ` `StackOverflowException`