内存管理

  内存的类型
         PC机有三种类型的储存器:常规内存、扩展内存和扩充内存。可以使用C:/> Mem/Classify<Enter>查看。 常规内存一般为RAM的第一个1MB,而用户程序和DOS通常驻留在常规内存的第一个640KB中。而介于640KB和1MB之间的384KB的区域称为上端内存,BIOS服务和视频内存就驻留在该区域。 扩充内存在上端内存中,通常由扩充内存规范软件分配一个64KB的内存块,在将其分为四页,每个逻辑页为16KB,程序对扩充内存的操作都是基于页的。 扩展内存驻留在1MB内存之上的高端内存区,只有在保护模式下才能访问该内存区。

堆栈
        堆栈是程序执行时暂时存放数据的内存区域。PC通过两个寄存器定位堆栈——堆栈段寄存器(SS)指向堆栈的开始,堆栈指针寄存器(SP)指向堆栈顶端。当程序使用小内存模式时,C将从数据段中分配堆栈空间,使用大内存模式或者压缩内存模式时,C将把64KB段都分配给堆栈。

        当程序动态分配内存时,C运行时程序库从一组被称为堆的未使用内存中获得内存。小内存模式时,堆是位于程序数据顶端与堆栈之间的内存区域。

内存区域的操作
#include <mem.h>
#include <malloc.h>
#include <alloc.h>
赋值
  void * memset(void * ptr, int character, size_t num_bytes);
拷贝  将某种类型数组从source拷贝到target
          void *memmove(void * target, const void * source, size_t num_bytes);
          void * memcpy(void *target, const void * source, size_t num_bytes);
         拷贝内存区域直到指定字节
         void * memccpy(void * target, const void * source, int character, size_t num_bytes);
比较无符号字符数组
         int memcmp(const void * block_1, const void * block_2, size_t num_bytes);
         int memicmp(const void * block_1, const void * block_2, size_t num_bytes);
分配动态内存
         void * malloc(size_t number_of_bytes);
         void * calloc(size_t number_of_items, size_t item_size);
改变内存区域大小
        void * realloc(void * block, size_t desired_bytes);
释放内存
         void * free(void * ptr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值