小模式与大模式【转载】

C编译器支持两种内存模型(Memory Model):小模式(the small memory model)和大模式(the large memory model)。不同的内存模型主要影响对.bss段中的变量是如何访问的。凡是程序中定义的全局变量(在函数之外定义的变量)和静态变量(用static关键字定义的变量)都被编译器分配在.bss段中。 

      在小模式下,要求.bss段小于32KB,也就是说程序中定义的全局和静态变量的总和不能超过32KB,此时,编译器将页指针DP指向.bss段的起始,对变量采用直接寻址方式。在大模式下,对.bss段的大小没有任何要求,编译器对变量使用寄存器间接寻址方式。而这里之所以会发生这样的错误一定是程序中定义的全局和静态变量太多,超过了32KB,而默认的内存模式又是小模式,所以发生了数据溢出而有错误。这样,可以选择-ml0编译选项,编译器会自动对集合数据类型如数组使用间接寻址方式,而对一般变量使用直接寻址方式。程序仍然可以通过使用小模式得到最快的对小的变量的访问速度。而对于数组,一般是用DMA访问,或者通过软件流水访问,不会有存取速度问题。这样,就可以解决这个问题了。 

      当然,DSP的程序一旦达到一定规模的时候就需要修改系统堆栈和内存分配的文件*.cmd。一般出错误的原因可能就是堆栈溢出或内存分配不对引起的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值