首页
社区
课程
招聘
[求助]十万火急,为什么我的程序堆栈大小只有3000H?不是默认是1M吗?
发表于: 2009-6-8 17:45 4970

[求助]十万火急,为什么我的程序堆栈大小只有3000H?不是默认是1M吗?

2009-6-8 17:45
4970
程序是ASM编译的!

ml.exe /Fo"tst.obj" /c /coff /nologo "D:\tst.asm"
link.exe /BASE:0x400000 /OUT:"tst.exe" /SUBSYSTEM:WINDOWS /nologo "tst.obj"

编译参数是正常的,我一直用的。

结果发现堆栈空间只有3000H,我的一些字串处理需要需要大的堆栈空间分配局部变量呢!

WINDOWS下进程不是默认的1M吗?
各位说说是怎么回事?

调试看到堆栈空间为: 0012D000-0012FFFC

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
2
晕..自动扩展的...当不够时WINDOWS会调整大小...当然你编译的时候还可以自己设置大小...但一般不会用到那么大吧..除非你递归或者不合理的局部变量等等...
2009-6-8 19:09
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
局部变量一下子就把ESP抽干了!
没机会自动扩展啊!!
2009-6-8 19:27
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
3000H太小啦!
如果子函数深一些,很容易不够的。

现在的问题是为什么程序的堆栈空间不是默认的1M ?
2009-6-8 19:28
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
堆栈空间,分为commited和reserved。

在运行时超过commited但没有超过reserved,系统会自动扩展。

当超过reserved值时,就会发生EXCEPTION_STACK_OVERFLOW异常。

可以通过连接器参数修改默认的堆栈大小,参数格式为:/STACK:reserve[,commit]。

根据MSDN中关于link的文档,默认堆栈为1MB。
2009-6-8 19:55
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦,谢谢,知道了,原来是保留状态。

我已经使用动态分配内存解决了,不过不方便,没有静态的局部变量方面。
2009-6-8 20:41
0
游客
登录 | 注册 方可回帖
返回
//