豆搜网 文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > IT/计算机 > C语言教学11
侵权投诉

C语言教学11

C语言教学系列

六种编译模式概述

Turbo C 提供了六种编译模式。编译模式有时也称为寻址模式或
内存模式,因为它处理的就是如何在内存中为程序,数据,堆栈分配
空间并存取它们,这六种模式是:微模式tiny,小模式small, 紧凑
模式compact,中模式medium,大模式large,巨模式huge。它们之间
的关系如下表所示。

│ 小程序 │ 大程序
━━━━┿━━━━━━┿━━━━━━━━
小数据 │ 微,小 │ 中
大数据 │ 紧凑 │ 大,巨
所谓小程序就是只有一个程序段,当然不超过64K 字节,缺省的
码(函数)指针是near。所谓大程序就是有多个程序段,每个程序段不
超过64K字节,但总程序量可超过64K字节,缺省的码指针是 far。所
谓小数据就是只有一个数据段,缺省的数据指针是near。所谓大数据
就是有多个数据段,缺省的数据指针是 far。下面还会逐个谈到它们
之间的差别,并通过同一程序在六种不同模式下的输出结果,来进一
步加深对这六种模式的理解。但先要强调一点:无论使用哪一种编译
模式,单个的Turbo C源文件不可能生成大于64K字节的代码,也不能
生成大于64K字节的静态(包括全局)数据。例如下面这个程序:
int a[15000],b[20000];
void main(){}
在任何模式下都不能编译。这是因为,两个数组所要求的总存储量达
70K字节。编译时会报出"Too much global data defined in file"
的出错信息。为了处理大于64K 字节的代码或静态数据,必须分成几
个源文件。以上面这个程序为例,可以分成文件A1.C和A2.C,分别用
巨模式对这两个源文件进行编译,最后连接成一个可执行文件。
al.c a2.c a.prj
int a[15000]; int b[20000]; a1
void main() a2
a1.obj(30k) a2.obj(40k) a.exe(71k)
六种编译模式的差别是:它们对来自不同源文件的码和数据段的
处理不同,对动态分配的堆空间的处理不一样,对指针使用也不一样。
此外,它们的所形成的 .obj 文件中传给连接程序的信息也不一样,
以便连接程序相应地安排码段和数据段,把相应的说明放在 .exe 文
件的头中并借此通知DOS:当执行这个程序时如何装入码段和数据段,
如何设置各个段寄存器。
用于演示六种编译模的程序是由两个源文件X.C和Y.C组成,如下
所示:
/* X.C */
#include<general.h>
void a()
{
static int b;
int c;
printf("In function A \n");
printf(" CS : %X \n",_CS);
printf(" DS : %X \n",_DS);
printf(" SS : %X \n",_SS);
printf(" Static B : %p \n",&b);
pritnf(" Automatic C

第1页

TOP相关主题

热门文档

站点地图 | 文档上传 | 侵权投诉 | 手机版
新浪认证  诚信网站  绿色网站  可信网站   非经营性网站备案
本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
文档下载 Copyright 2013 doc.docsou.com All Rights Reserved.  闽ICP备15022310号-9  闽公网安备 35021102001881号  email
返回顶部