`

堆空间,近堆和远堆

阅读更多
near 和 far指针
        如果动态创建的数据量比较大,用一个数据段(一般是64K,此时段指针不变,偏移量指针在16bit内变化)放不下的时候,需要重新开辟一个数据段供存放更多的数据,此时称原来的堆部分为近堆,改变段地址后的新的数据段所在的堆部分称为远堆。

        PC机的存储器地址是由段地址和偏移地址组合而成,每一段不能超过64k字节地址,因而统一个段内的地址存取,即段内寻址,用偏移地址就可以实现,所以段地址寄存器所存的段地址是不变。当用指针时,只16位即4个字节就够了,这一类就是near指针。当要在另一个段内取数据,就要跨段,即要指明存取段的段地址和偏移地址,这时段地址寄存器所存段地址要改变,在使用指针指向另一个段内地址时,就要用32位表示,就是far指针了。

        由于dos是16位的操作系统,故程序代码受到segment的限制,near指针最多只能指向64k以内的代码或数据。而far指针则可以跨段寻址,还有huge类型的远指针。但是由于watcom,djgpp等dos下的编译器,以及所有windows下的编译器都是32位的,没有 64k的限制,指针也就不分远近了。
分享到:
评论

相关推荐

    C,C++内存分配的详细讲解包括堆,栈,数据段等

    2. **堆区**:用于动态分配的内存空间,由程序员负责分配和释放。常见的堆内存分配函数有`malloc()`、`calloc()`和`realloc()`。若程序员忘记释放内存,则可能会导致内存泄漏,直到程序结束时由操作系统回收。 3. *...

    ARM 提供的堆和使用堆的函数

    ### ARM 提供的堆和使用堆的函数 #### 1. ARM 堆内存的重要性 - 在ARM开发过程中,堆内存是非常重要的资源之一。当使用ARM开发环境(如ADS编译器)进行编程时,开发者经常会遇到需要动态分配内存的情况。 - 如果...

    c++ 大根堆和小根堆

    二是堆有两种类型——大根堆和小根堆。在大根堆中,每个父节点的值都大于或等于其子节点的值,而在小根堆中,情况相反,每个父节点的值都小于或等于其子节点的值。这些特性使得堆在查找最大或最小元素时非常高效。 ...

    matlab在一个坐标系内让二维图片堆叠形成三维空间的表示

    二维数据或者图片堆叠在三维空间的表示,图片堆叠方便查看 类似origin里面的瀑布图的方法,只是这是在matlab里面实现。 matlab多张图片同时在三维空间中显示,沿着某一个坐标轴 matlab在一个坐标系画不同三维图综合...

    堆溢出和堆利用

    堆溢出是由于程序在分配和管理内存时,未能正确控制堆空间,导致数据超出预设边界,进而可能破坏相邻内存区域的数据,甚至控制程序执行流程,从而引发严重的安全问题。 首先,我们要理解堆的基本概念。堆是计算机...

    堆和栈的区别和联系。

    "堆和栈的区别和联系" 堆和栈是 C 语言中两个基本的存储区,它们是程序中实现数据存储的方式。了解堆和栈的区别和联系是非常重要的,因为它们对程序的运行和内存管理有着至关重要的影响。 栈 栈是一块自动分配和...

    用C++写的堆排序(最大堆和最小堆)

    堆可以分为最大堆和最小堆,最大堆中每个父节点的值都大于或等于其子节点的值,而最小堆则相反,每个父节点的值小于或等于子节点的值。 首先,我们需要理解堆的基本操作。建堆通常从最后一个非叶子节点开始,按照从...

    堆排序算法源代码

    在堆排序的过程中,通常包括两个主要步骤:建堆和调整堆。 1. 建堆:将待排序的序列构造成一个大顶堆或小顶堆。这个过程通常从最后一个非叶子节点开始,自底向上进行。对于每个节点,如果它比它的子节点小(大顶堆...

    内存中堆和栈的分配区别

    ### 堆和栈的定义 #### 栈(Stack) 栈是一种遵循先进后出(LIFO,Last In First Out)原则的数据结构,在程序中用于存储函数调用过程中的局部变量、函数参数和返回地址等信息。栈由操作系统自动管理,具有快速的...

    C语言 堆和栈的区别

    C语言堆和栈的区别 C语言中,堆(heap)和栈(stack)是两种不同的内存分配机制。堆是由malloc或new分配的内存,系统不释放,需要程序员自己释放,否则会出现“内存泄露(Memory Leak)”。栈是自动分配的内存,...

    堆和栈详解

    堆和栈是计算机内存管理中的两个重要概念,它们在程序执行过程中起着至关重要的作用。在深入探讨这两个概念之前,我们需要明确一点:堆和栈在内存结构上有着本质的区别。 栈(Stack)是一种线性数据结构,其特点是...

    堆与堆排序.ppt

    堆和堆排序 堆的定义:堆是满足特定性质的完全二叉树。对于一个含有n个元素的序列 {a1, a2, …, an},如果满足ai ≤ a2i 或 ai ≥ a2i,則称该序列为小根堆或大根堆。小根堆指的是每个非叶子节点的值小于或等于其...

    算法设计实验报告堆排序代码

    堆排序的时间复杂度主要由构建堆和调整堆两部分组成。构建堆的过程需要O(n)时间,每次调整堆的时间复杂度为O(logn),总共需要调整n-1次,因此总的时间复杂度为O(nlogn)。空间复杂度为O(1),因为只需要常数级别的额外...

    Java中堆内存与栈内存分配浅析

    程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的工作原理及其区别对于优化程序性能、避免内存泄漏等问题至关重要。本文将深入探讨Java中堆内存与栈内存...

    堆和栈的详细分析

    ### 堆和栈的详细分析 #### 一、引言 在计算机科学与软件工程领域,堆(heap)和栈(stack)是两种极为重要的内存管理机制。这两种内存分配方式各自具有独特的特点和用途,对于理解程序运行时内存管理至关重要。 #...

    堆栈和托管堆的详解堆栈和托管堆的详解

    ### 堆栈和托管堆的详解 #### 一、引言 在计算机科学中,内存管理是一项核心技能,尤其对于编程语言的学习者而言更是如此。C#作为一种广泛使用的面向对象编程语言,提供了多种内存管理和数据存储的方式。本文将...

    二维数据或者图片堆叠形成三维空间的表示.zip_matlab_matlab 图像处理_matlab在一个坐标系画不同三维图_ma

    matlab在一个坐标系内让二维图片堆叠形成三维空间的表示 二维数据或者图片堆叠在三维空间的表示,图片堆叠方便查看 类似origin里面的瀑布图的方法,只是这是在matlab里面实现。 matlab多张图片同时在三维空间中显示...

    数据结构堆的插入与删除 堆排序

    首先,堆是一种完全二叉树,可以分为最大堆和最小堆。在最大堆中,每个节点的值都大于或等于其子节点的值;在最小堆中,每个节点的值都小于或等于其子节点的值。堆通常用数组来表示,因为这种表示方式便于进行插入、...

Global site tag (gtag.js) - Google Analytics