注册 登录
编程论坛 C图形专区

[求助]如何用farmalloc申请比较大的空间

灭火的风 发布于 2006-06-16 20:59, 1453 次点击
我在程序中写到
unsigned char far *image;
image = (unsigned char far *)farmalloc(64000L);
但是结果image的值却是NULL
我的程序中并没有用掉很多空间啊,望达人指点,感激涕淋。
7 回复
#2
一笔苍穹2006-06-16 21:38
64000已经是64K了,DOS实模式下不是每次能申请到这么多的
#3
灭火的风2006-06-16 23:41
我试了32000也不成功,64K应该是64*1024吧,64000好象还没有到诶.....
那如何才能声请足够大的空间呢?我想用来存放位图
#4
一笔苍穹2006-06-17 21:15
是吗?32K应该能申请的到才是,要不你将编译模式改成大模式或紧凑模式,然后直接用malloc()试试。
不过即使你申请到了也存放不了多大的位图,64K才存一张320X240的256色位图,而且实模式下只有640KB可用,还有其它系统或TSR程序想分一杯羹,总之一句话:捉襟见肘。
#5
灭火的风2006-06-17 22:21
那怎样才能实现存放大位图呢?
TC能工作在保护模式下吗?
#6
一笔苍穹2006-06-18 12:58
TC进保护模式比较麻烦。如果肯换的话,DJGPP是个不错的选择,WATCOM C++也不错。
如果不想换编译环境的话,可以使用扩展、扩充内存规范。
#7
–★–2006-06-18 16:30
/*
申请远堆资源,建立巨型动态数组之例
编译连接命令:tcc -mh thisfile.c <回车>
*/
#include<stdio.h>
#include<stdlib.h>
void main()
{
char huge*s;
unsigned long NUM,f;
f=farcoreleft();
printf("far heap: %lu bytes free\n",f);
printf("欲申请的字节数NUM=");
scanf("%lu",&NUM);
if((s=farmalloc(NUM))==NULL){
printf("远堆空闲内存不足...\n");abort();}
else /*申请成功*/
{
printf("请使用*(s+i)以取代s[i]");/*对于TC2.0至关重要*/
/*
此处是你使用巨型动态数组s[ ]的地方
*/
farfree((void far*)s);
}
}
#8
灭火的风2006-06-18 19:11
谢谢斑竹的建议,我去下个DJGPP看看。
楼上的兄弟的方法我也尝试了,结果编译连接之后的exe运行有错误......可能是我哪里做错了吧
1