c 编译问题

zhangtao1st 2003-08-27 09:02:16
大家好,我在开发一个嵌入式程序的过程中遇到这样一个问题
我使用的是borland c 的编译器,我把所用到的函数,都放在不同的,".h"文件中
只保留了一个 main.c 主程序文件,开始程序没有任何问题,但是随着程序的逐渐扩充,当然这些,头文件的大小也在增大,现在就遇到了致命的问题

当我现在要增加一个功能函数,在编译的时候就不能通过,提示错误:
error: Too much global data defined in main
如果我在头文件中去掉一定数量的代码(不一定是新增加的)就可以编译通过了
此问题严重限制了我程序功能的增加,请大家给点意见,谢谢
...全文
31 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
link800 2003-09-08
  • 打赏
  • 举报
回复
好像是静态变量放在堆中吧?
Elandsong 2003-09-07
  • 打赏
  • 举报
回复
第一次听说“全局变量实际上使用的是的堆”!

全局变量放在数据区里,跟堆何干?
bigbigbigsoft 2003-09-05
  • 打赏
  • 举报
回复
嘿嘿,总是被老婆批评表达有问题,说的不清楚,请不要介意阿。说明:全局变量占用堆,局部变量占用栈。局部变量对内存的占用在函数退出的时候就会随即释放,所以把一个大的函数划分成很多小函数实现,可以减少对栈的是用量。

jakeye 2003-09-05
  • 打赏
  • 举报
回复
up 学习ing
bigbigbigsoft 2003-09-05
  • 打赏
  • 举报
回复
选项里面的编译模式改成huge,具体过程我忘记了,若干年前用过TC阿,你自己仔细看看。
yiyepianzhou 2003-09-05
  • 打赏
  • 举报
回复
我的意思是,如何更改大小,比如在tc里面?
谢谢
bigbigbigsoft 2003-09-04
  • 打赏
  • 举报
回复
另外,嵌入式系统一般资源有限,内存宝贵啊,堆和栈的是用尽量节省。尽量减少长期对内存的占用,一个办法就是尽量使用函数的局部变量,内存完毕就立即释放。增加模块可以减少对内存的长期占用。

bigbigbigsoft 2003-09-04
  • 打赏
  • 举报
回复
还有,尽量划分好模块,每个不要太大
bigbigbigsoft 2003-09-04
  • 打赏
  • 举报
回复
全局变量实际上使用的是的堆,程序启动时候,就由系统分配好了。注意每个应用程序使用的堆的大小在早期的DOS程序里面是有限制(因为很多程序可能会共享这些堆),免得个别程序占用太多,所以在编译器生成可执行文件时它会计算出程序需要的堆的大小(这个数值一般存在可执行文件的头部,系统加载可执行文件时就是根据这个数值分配堆的)。在有些编译器中对每个模块使用的堆有限制,而有些是对整个程序有限制。

bigbigbigsoft 2003-09-04
  • 打赏
  • 举报
回复
修改你的内存使用模式,编译器默认限制了你的全局堆的使用量,参考编译器的说明看看吧。
qingsong8210 2003-09-04
  • 打赏
  • 举报
回复
虚心向各位高手学习!!
yiyepianzhou 2003-09-04
  • 打赏
  • 举报
回复
关注,请楼上的说清楚点,好让我们学习学习

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧