Windows上为程序开辟更大的栈空间

本文探讨了解决深度递归导致的StackOverflow问题的方法,包括通过修改编译器指令预留更大的栈空间,并提供了VC++和G++的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近在研究算法时,遇到稍微深一点的递归就会Stack Overflow,由于不是实际项目,所以并不想用绕道而行的方法解决,于是便在代码里动了点手脚,把栈空间弄大了。实际项目中最好别这么干,容易搞乱堆栈调用,最好从算法上避免过深的递归或者自己用栈结构模拟进栈出栈。当然更好的方法是不用Windows(笑)。

//VC++
//预留100MB,当前提交100MB
#pragma comment(linker,"/STACK:102400000,102400000")

//G++
//256MB
int size=256<<20;
//申请空间
char *p=(char*)malloc(size)+size;
__asm__("movl %0,%%esp\n"::"r"(p));

/*
内联汇编,格式 __asm__ __volatile__("Instruction List":Output:Input:Clobber/Modify);
movl xxx,%eax
movl %eax,%esp
其中%0为占位符,r为寄存器约束
约束 Input/Output 意义
r I,O 表示使用一个通用寄存器,由GCC在%eax/%ax/%al, %ebx/%bx/%bl, %ecx/%cx/%cl, %edx/%dx/%dl中选取一个GCC认为合适的
q I,O 表示使用一个通用寄存器,和r的意义相同
a I,O 表示使用%eax / %ax / %al
b I,O 表示使用%ebx / %bx / %bl
c I,O 表示使用%ecx / %cx / %cl
d I,O 表示使用%edx / %dx / %dl
D I,O 表示使用%edi / %di
S I,O 表示使用%esi / %si
f I,O 表示使用浮点寄存器
t I,O 表示使用第一个浮点寄存器
u I,O 表示使用第二个浮点寄存器
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值