2、完成对思考题6.5、6.6的调试。
3、完成对思考题6.9的编制,并使用make进行维护。
五.实验结果
实验项目六 Linux内存管理
一、实验目的
(1)了解Linux内存管理的基本原理和方法; (2)了解内存申请和释放的方式;
(3)掌握malloc,realloc,free,calloc 函数的使用。
二、实验内容
(1)使用C语言编写一个包含内存分配与释放的程序,观察分析并显示运行结果; (2)通过gdb等工具对程序进行调试;
(3)在程序运行过程中观察系统内存的使用情况,验证内存管理函数的执行效果。 三.实验软件
VMWare Workstation 5.0; Red hat linux 9.0;
四.实验主要步骤
(1)内存库函数实验-malloc函数,运行程序清单6-1,写明运行结果。 (2)内存库函数实验-calloc函数,运行程序清单6-2,写明运行结果。 (3)内存库函数实验-realloc函数,运行程序清单6-3,写明运行结果。 (4)内存错误分析实验:
指出程序清单6-4的内存错误原因。 指出程序清单6-5的内存错误原因。
通过比较程序清单6-6、6-7输出结果,分析程序6-3内存错误原因。 五.实验结果
程序清单: (1)5-1
#include
char *p; clrscr();
// clear screen
p=(char *)malloc(100); if(p)
printf(\
else
printf(\free(p); return 0; }
(2)5-2
#include
char *p; clrscr();
// clear screen
p=(char *)calloc(100,sizeof(char)); if(p)
printf(\else
printf(\free(p); return 0; }
(3)5-3
#include
char *p; clrscr();
// clear screen
p=(char *)malloc(100); if(p)
printf(\else
printf(\p=(char *)realloc(p,256); if(p)
printf(\else
printf(\free(p); return 0; } (4)5-4 …… Void
ApplyForMem(char *p,int num) {
p=(char*)malloc(sizeof(char)*num); return; } int main() {
char *str=NULL; ………….
ApplyForMem(str,300); free(str);
infile.close(); return 0; }
(5)5-5
#include
char z = *(const char *)0; exit(EXIT_SUCCESS); }
(6)5-6
#include “stdlib.h”
#define HEAP_BLOCK_SIZE 32 int main() {
// 分配申明heap 内存块1
char *pbuf1 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf1 = '1';
//分配申明heap 内存块2
char *pbuf2 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf2 = '2';
//分配申明heap 内存块3
char *pbuf3 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf3 = '3';
// 释放heap 内存块1
printf(\block 1 (%d bytes) at Xh freed\pbuf1);
free(pbuf1);
//释放heap 内存块2
printf(\block 2 (%d bytes) at Xh freed\pbuf2);
free(pbuf2);
//释放heap内存块3
printf(\block 3 (%d bytes) at Xh freed\pbuf3);
free(pbuf3);
//分配申明heap 内存块4
char *pbuf4 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf4 = '4';
//分配申明heap 内存块5
char *pbuf5 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf5 = '5';
//分配申明heap 内存块6
char *pbuf6 = (char *) malloc( HEAP_BLOCK_SIZE);
printf(\*pbuf6= '6'; for(;;) { Sleep(1000); }
return 0; }
(7)5-7
#include “stdlib.h”
#define HEAP_BLOCK_SIZE 32 int main() {
// 分配申明heap 内存块1
char *pbuf1 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf1 = '1';
//分配申明heap 内存块2
char *pbuf2 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf2 = '2';
//分配申明heap 内存块3
char *pbuf3 = (char *) malloc(HEAP_BLOCK_SIZE);
printf(\*pbuf3 = '3';
// 释放heap 内存块3
printf(\block 3 (%d bytes) at Xh freed\