文档库 最新最全的文档下载
当前位置:文档库 › 实验5 动态申请内存

实验5 动态申请内存

实验5   动态申请内存
实验5   动态申请内存

实验5 动态申请内存

【实验目的】

(1)掌握linux中动态申请内存的方法。

(2)了解操作系统对于高级语言程序设计所提供的环境支撑。

【实验原理/实验基础知识】

为了提高内存利用率,用户程序常采用动态请求内存的方式使用内存。Linux 提供了3种动态内存分配方式,3种动态内存分配方式下申请内存空间后,可以调整空间大小,使用完毕后需释放申请到的内存空间。

1.第一种动态内存分配方法

第一种动态内存分配方法作为高级语言的库函数直接提供给用户使用。使用方法如下:

1)用malloc()申请一块内存;

2)用realloc()调整内存大小;

3)用free()释放内存。

[例]:申请、使用、释放内存。

#include

#include

#include

Int main(void)

{

Char *str;

If((str=(char*)malloc(10))==null)

{

Printf(“Not enough memory to allocate buffer\n”);

Exit(1);

}

Strcpy(str,”hello”);

Printf(“string is %s\n”,str);

Free(str);

Return 0;

}

2.第二种动态内存分配方法

第二种动态内存分配的方法是逆向栈方式,栈中可以存放任意多个大小不同的存储块,存取方式为后进先出。使用方法如下:

1)使用obstack_init()初始化一个逆向栈;

2)使用obstack_blank()在栈中加入新的可用空间;

3)使用obstack_copy()对该地址空间进行操作;

4)使用obstack_free()释放栈中空间。

3.第三种动态内存分配方法

第三种内存动态分配方法是半自动式,程序员只需要给出申请空间的大小就可以使用内存空间,使用完之后也不需要释放,而是由系统自动释放。使用方法很简单,只需要使用alloca()完成空间申请,使用完后由系统自动释放。

【实验环境】VMware Workstation、RedHat

【实验步骤】

(1)使用键盘命令以字节为单位显示当前系统中内存使用情况,特别是当前系统中的空闲内存大小。

(2)编写一个程序申请两块大小为10的内存,分别存放字符串“123456789”和“987654321”,并输出字符串及存放地址,然后重新调整内存大小为20,再次输出地址。

(3)再次显示系统中的内存使用情况,对比前后系统中的空闲内存大小有无变化。

【实验报告】

填写《信息技术学院学生上机实验报告》。

【思考题】

(1)实验内容2中前后两次输出的内存地址有何不同?

(2)在程序中申请使用了内存后有没有释放?如果不释放申请的内存,会产生什么情况?

相关文档