TGViewer
Гепардово гнездо Гепардово гнездо @gepardchan · 617 subscribers
Post #17 325
Как расширить размер стека

Иногда в олимпиадных задачах не хватает стека, и надо бы увеличить его размер. Есть много разных способов. Например, для MSVC действует такой:

#pragma comment(linker, "/STACK:16777216")

Можно еще вручную выделить массив и переместить на него стек, используя ассемблер. Код ниже работает на GCC для amd64 (тестировался на GNU/Linux, хотя скорее всего будет работать и под Windows):

extern "C" {
void main2();
// размер стека — 16 МБ. Если нужно больше, можно
// поменять размер массива(но alignas не трогать!)
alignas(16) char stack[16777216];
}

void main2() {
// здесь основной код
}

int main() {
asm(
// сохраняем старые rsp и rbp
"pushq %rbp\n"
"movq %rsp, %rbp\n"
// перемещаем rsp на конец созданного
// нами массива; теперь он будет стеком
"leaq stack(%rip), %rsp\n"
"addq $16777216, %rsp\n"
// зовем main2() с основным кодом
"callq main2\n"
// возвращаем все на место
"movq %rbp, %rsp\n"
"popq %rbp"
);
return 0;
}
  • 👍 5
  • 😈 2
More from @gepardchan
  1. Sep 7, 2025Итак, расскажу о том, что я сделал еще давно, но про что все никак не доходили руки написа…
  2. Dec 10, 2024https://habr.com/ru/post/472970/ Статья 2019 года, то есть довольно старая, с учетом того,…
  3. Nov 30, 2024Сегодня читал про то, как Debian везде перешел на 64-х битный time_t. Изменение войдет в р…
  4. Nov 26, 2024https://www.ryanliptak.com/blog/every-rc-exe-bug-quirk-probably/ Не знаю, как вы, а я прос…
  5. Nov 22, 2024Еще про проклятые фичи баша https://yossarian.net/til/post/some-surprising-code-execution-…
  6. Nov 21, 2024Про переписывание истории В баше (а точнее, в GNU Readline, который используется башом), е…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →