DOS用一种段地址结构来编址计算机的内存,每一个物理内存位置都有一个可通过段地址一偏移量的方式来访问的相关地址。为了支持这种段地址结构,大多数C编译程序都允许你用以下6种存储模式来创建程序:
-----------------------------------------------------------------------
  存储模式              限制                    所用指针
-----------------------------------------------------------------------
  Tiny(微)             代码、数据和栈一64KB      Near
  Small(小)            代码一64KB                Near
                       数据和栈一64KB            Near
  Medium(中)           代码一1MB                 Far
                       数据和栈一64KB            Near
  Compact(紧缩)        代码一64KB                Near
                       数据和栈一1MB             Far
  Large(大)            代码一1MB                 Far
                       数据和栈一1MB             Far
  Huge*(巨)            代码一1MB                 Far
                       数据和栈一1MB             Far
-----------------------------------------------------------------------
*注意:在Huge存储模式下,静态数据(如数组)可以超过64KB,这在其它存储模式下都不行。

Tiny存储模式的限制很严(所有的代码、数据和栈都被限制在64KB中),它通常用来生成"COM"文件。由于内存地址的“安排”方式的限制,Huge模式会带来显著的性能损失,因此它很少被使用。

最常使用的存储模式有哪些?

最常使用的存储模式有Small,Medium和Large这几种。Tiny存储模式一般只用来生成".COM"文件,在现在的高性能计算机上,它已很少
被使用了。Compact存储模式允许程序有很少的代码和大量的数据,在今天的商业应用环境中,它同样也不常用了。由于Huge存储模式的存储地址机制导
致它的效率较低,所以它也很少被使用。

一般说来,你应该根据程序的大小选用Small,Medium或Large中的一种存储模式。对一个小的实用程序来说,Small存储模式可能是最合适
的,这种存储模式允许有64KB的代码和64KB数据和栈。如果程序有更大一些的数据要求,你可以使用Medium存储模式,它允许程序有多达1MB的可
寻址数据空间。对于更大的程序,你应该使用Large存储模式,它允许程序有1MB的代码和1MB的数据和栈空间。

如果你在编写一个Windows程序或者在使用一个32位编译程序,那么你最好使用Small存储模式,因为这样的环境并不受DOS程序的段地址结构的限制。

应该使用哪种存储模式?

如果要生成一个“.COM”文件,匦胧褂肨iny存储模式,即所有的代码、数据和栈空间都被限制在64KB中。小的实用程序普遍使用这种存储模式。相对较
小的程序也可以使用Small存储模式,只不过不必把整个程序都限制在64KB中。在Small存储模式下,有64KB的代码空间和64KB的数据和栈空
间。除了用于小程序外,Small存储模式还可用在Windows或32位编译程序这样的环境中,因为在这些环境中内存寻址并不受DOS中16位的限制。

如果一个程序的代码量相对较大而静态数据量相对较小,你可以用Medium存储模式来创建程序。如果程序很大(需要很多模块,大量的代码和数据),那么你应该选用Large存储模式,这种存储模式常用在DOS下编写商用软件。

与Small,Medium和Large存储模式相比,Compact和Huge存储模式要少用得多。Cornpact存储模式允许程序有大量的静态数据
和相对较少(64KB或更少)的代码。满足这种模式的程序很少,常常是一些转移程序,它们有大量必须存到内存中的静态转移表。Huge存储模式与
Large存储模式基本相同,只是Huge存储模式允许程序有超过64KB的静态数据。与Compact存储模式相似,Huge存储模式也很少被使用,这
主要是因为它会带来显著的性能损失。由于Huge存储模式的执行效率较低,因此你应该避免使用这种模式,除非你确实需要超过64KB的一个数组或其它静态
数据。记住,数组和其它程序结构可通过malloc()和calloc()在程序运行时进行动态分配,它们在本质上并不必须是静态的。

C语言各种存储模式的区别?最常用的存储模式有哪些?的更多相关文章

  1. VMWare虚拟机bridged、host-only和NAT网络模式的区别和用法

    VMWare提供了三种工作模式,它们是bridged(bridged 模式).NAT( 网络地址转换模式)和host-only(主机模式) . 1  VMWare虚拟机bridged.host-onl ...

  2. VMware 三种网络模式的区别

    VMware 三种网络模式的区别 VMware 三种网络模式的区别 我们首先说一下VMware的几个虚拟设备 VMnet0:用于虚拟桥接网络下的虚拟交换机 VMnet1:用于虚拟Host-Only网络 ...

  3. 模型-视图-控制器模式(MVC模式,10种常见体系架构模式之一)

    一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式.是软件 ...

  4. OPM与ILE编程模式的区别

    OPM与ILE编程模式的区别 OPM是传统编程模式,即一个可执行的程序只用一种语言编程:一个可执行程序只有一段程序代码组成:程序之间的调用关系是动态的调用关系. ILE是多语言开发集成编程模式,即一个 ...

  5. LR两种录制模式的区别

    loadrunner的录制模式分为如下两种录制模式: HTML-based script,也称为高层录制: URL-based script,也称为底层录制. 两种录制模式的区别:1)脚本不同:高层录 ...

  6. C、C++、C#、Java、php、python语言的内在特性及区别

    C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...

  7. Socket阻塞模式和非阻塞模式的区别

    简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系 ...

  8. MySQL存储引擎的区别

    一.mysql中myisam,innodb和memory三个存储引擎的区别 1.区别:1) MyISAM管理非事务表.提供高速存储和检索,以及全文搜索能力.MyISAM在所有MySQL配置里被支持,是 ...

  9. Java虚拟机6:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别

    前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露.并行与并发.Client模式和Server模式.Minor GC和Full GC,本文详细讲解下这些概念的区别. 内存溢出 ...

随机推荐

  1. iOS状态栏详解(隐藏)

    状态栏的隐藏 状态栏的隐藏主要有两种方法:方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusB ...

  2. js获取相同name文本框的value

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> < ...

  3. C语言 · 输出日历

    算法提高 输出日历   时间限制:1.0s   内存限制:512.0MB      按照下述格式打印2006年12月日历: Calendar 2006-12---------------------- ...

  4. find 命令一个命令多参数如何使用,????,perm

    [root@ob2 mytmp]# find -mtime -7 -type f \( -name "*.html" -o -name "*.tar.gz" \ ...

  5. [ Laravel 5.1 文档 ] 服务 —— 任务调度

    1.简介 在以前,开发者需要为每一个需要调度的任务编写一个Cron条目,这是很让人头疼的事.你的任务调度不在源码控制中,你必须使用SSH登录到服务器然后添加这些Cron条目.Laravel命令调度器允 ...

  6. 让IE6支持min-height,max-height等的方法

    1.IE6支持max-height解决方法    IE6支持最大高度解决CSS代码:.yangshi{max-height:1000px;_height:expression((document.do ...

  7. main函数位置

    c语言中main函数的位置可以任意位置.在执行一个c语言编写的程序时,main函数就相当于是执行程序的入口.只要是没有语法和逻辑上的错误,main函数可以放在任意位置.

  8. tomcat安装不成功.提示:failed to install tomcat6 service ,check your setting and permissions

    这个问题主要是因为旧版本卸载不完全导致的,可通过彻底删除旧版本解决,方案如下: 以管理员身份运行 命令提示符,弹出窗口 ,选择“是”,输入 sc delete tomcat5 ,或者 sc delet ...

  9. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

  10. 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...