中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 一直在用dos做开发,但是无奈程序不能太大
作者:
标题: 一直在用dos做开发,但是无奈程序不能太大 上一主题 | 下一主题
lyvv
新手上路




积分 16
发帖 5
注册 2007-10-31
来自 武汉
状态 离线
『楼 主』:  一直在用dos做开发,但是无奈程序不能太大

一直在用dos做开发,但是无奈程序不能太大,一旦超过250k,就非常不稳定

C++代码  使用bc3.1编译 不知道为什么超过250k,就很容易死机

2009-7-30 01:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『第 2 楼』:  

可以尝试转向djgpp,应该能好用不少



好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2009-7-31 11:11
查看资料  发送邮件  发短消息 网志  OICQ (181315400)  编辑帖子  回复  引用回复
vcmasm
初级用户





积分 30
发帖 15
注册 2006-6-28
状态 离线
『第 3 楼』:  

使用 DJGPP 吧,无 640K 限制,不是 32 位代码!
著名的 ghost (DOS 版) 就是其作品!!

2009-8-1 11:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 4 楼』:  

DOS实模式程序虽然受640K内存限制,但也绝不是250K芝麻大小的程序运行死机归咎于BC31,应该多从自己的程序着手检查才对!

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

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



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


       正确应该如下

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


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


          void Abc()
         {
                       float fsData[2048] ;//占用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 ]

2009-8-2 05:29
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: