1. 程式人生 > >Windows上為程式開闢更大的棧空間

Windows上為程式開闢更大的棧空間

       最近在研究演算法時,遇到稍微深一點的遞迴就會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 表示使用第二個浮點暫存器
*/