tc六种内存模式

tc六种内存模式

2019年03月27日 ⁄ 综合 ⁄ 共 831字 ⁄ 字号 小 中 大 ⁄ 评论关闭

 

tc六种内存模式:tiny、small、medium、compact、large和huge,其中tiny、small和medium由于数据段不能超过64k,叫小数据模式,compact、large和huge的数据段可以超过64k,叫大数据模式;类似地,tiny、small和compact叫小代码模式,medium、large和huge叫大代码模式。

小数据模式和大数据模式的数据段分为静态存储区、堆、栈和远堆四部分,静态存储区的排列顺序是一样的,都跟在代码段后面,但堆和栈排列顺序是不一样的。小数据模式数据段的排列方式是(由低到高地址)静态存储区、堆、栈、远堆,大数据模式则是静态存储区、栈、堆(包含远堆)。

大数据模式中的数据段可以超过64k的意思并非你可以任意定义一个对象超过64k,而是组成数据段的静态存储区、栈和堆空间的总和可以超过64k。

三种大数据模式的栈大小均不能超过64k,原因是受到实模式的限制,一个段大小最大只能是64k,这意味着,所有自动对象所占内存空间的总和最大不能超过64k,否则就栈溢出了;

compact和large模式的静态存储区不能超过64k,而huge则可以,这里所说的可以,并非指你就可以通过huge模式定义一个大于64k的静态数组,而是指静态存储区的总和可以大于64k,但组成静态存储区的每个编译单元(也就是一个文件)不能超过64k,举个例,如果你需要定义一个数组static char a[70000l],这是不行的,你得把这个数组分成两部分,分别放在不同的编译单元里,例如a.c里面放static
char a[35000l],而b.c放static char a[35000l]。

但是我非得定义一个大于64k的数组,怎么办啊?可以通过远堆进行定义,条件是:

1。使用大数据模式;
2。使用farmalloc函数分配;
3。使用huge巨型指针,不能用far指针,因为far指针的段值部分是不变的,而huge指针是规范化的,段值部分可以改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值