中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 06:37
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » 一直在用dos做开发,但是无奈程序不能太大
可打印版本  1,731 / 3
第1楼 lyvv 发表于 2009-07-30 01:16
新手上路 发帖 5 积分 16 来自 武汉
一直在用dos做开发,但是无奈程序不能太大
一直在用dos做开发,但是无奈程序不能太大,一旦超过250k,就非常不稳定

C++代码 使用bc3.1编译 不知道为什么超过250k,就很容易死机
第2楼 070 发表于 2009-07-31 11:11
高级用户 发帖 218 积分 663 来自 福建
可以尝试转向djgpp,应该能好用不少
第3楼 vcmasm 发表于 2009-08-01 11:37
初级用户 发帖 15 积分 30
使用 DJGPP 吧,无 640K 限制,不是 32 位代码!
著名的 ghost (DOS 版) 就是其作品!!
第4楼 firstsail 发表于 2009-08-02 05:29
高级用户 发帖 295 积分 668 来自 广东深圳
DOS实模式程序虽然受640K内存限制,但也绝不是250K芝麻大小的程序运行死机归咎于BC31,应该多从自己的程序着手检查才对!

一般常见以下多种情况
(1)使用了“脏指针”或“空指针”
(2)分配了内存,不再使用该内存时没有删除,导致内存泻漏!
(3)在函数分配局部变量太大,造成栈溢出。BC31默认栈很小,只有4K!所以一般需要对外部局部变量_stklen指定大小。


注:如果没有特别要求,请将程序设置成“Large”内存模式!



void Abc()
{
float fsData ;//占用8K的栈,程序肯定崩溃
//.......
}


正确应该如下

#include <Dos.h>
//....


unsigned int _stklen = 50u * 1024u; //指定50K的栈,不能超过64K - 1.


void Abc()
{
float fsData ;//占用8K的栈,但栈有50K,栈不溢出
//.......
}

//.......


int main(int argc, char** argv)
{
//.......
}


这个问题在Windows操作系统下的Visual C++里面同样也有这个问题,对于自己开辟的线程默认的栈也只有1M字节!可看vc的AfxBeginThread()函数。

[ Last edited by firstsail on 2009-8-2 at 05:31 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023