大多數 linux 系統預設的 stacklimit 都是 8192KB,我們可以用 `ulimit -s <stack size>` 來設定要更改的 stack size 數量。
但是如果使用 `ulimit -s unlimited` 來將 stack size 設為無限的話,在我的電腦(Pop! OS 22.04)上是會被禁止的,在前面加上 sudo 也不行,終端的輸出是這樣的
```bash
alanliang@pop-os:~/system-programming$ ulimit -s unlimited
bash: ulimit: stack size:不能修改 limit: 此項操作並不被允許
```
實際上我們應該修改 `/etc/security/limits.conf`,才能讓 stack size 變成 unlimited
```bash
<username> soft stack unlimited
<username> hard stack unlimited
```
在這樣設定並且重新開機後,就可以使用相當於實體記憶體大小的 stack 了,我寫了一個間單的程式來暴力的確定 stack size,需要注意的是,如果按照了以上步驟將 stack size 設為 unlimited,並運行以下程式,是會讓電腦當掉的。
```c
#include <stdio.h>
void stack_test(int depth, int *stack_start) {
int trash[1024];
long long stack_size = stack_start - trash;
// printf("stack start: %p, stack current %p\n", stack_start, trash);
printf("Depth: %d, Stack size: %lld bytes, %lld KB, %lld MB\n", depth, stack_size * sizeof(int), stack_size * sizeof(int) / 1024, stack_size * sizeof(int) / 1024 / 1024);
stack_test(depth + 1, stack_start);
}
int main() {
int stack_start;
stack_test(1, &stack_start);
return 0;
}
```
結果如下:

由於電腦已經當掉了,只能用手機拍照,可以從 htop 看到 Mem 的部分已經快被塞爆了。底下的程式輸出因為 overflow 因此顯示不正確,上面的程式碼已經修正這個問題了。