linux系统及应用应用开发实验报告册

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 #include main() {

char *p; clrscr();

// clear screen

p=(char *)malloc(100); if(p)

printf(\

else

printf(\free(p); return 0; }

(2)5-2

#include #include main() {

char *p; clrscr();

// clear screen

p=(char *)calloc(100,sizeof(char)); if(p)

printf(\else

printf(\free(p); return 0; }

(3)5-3

#include #include main() {

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 #include #include int main() {

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\

联系客服:779662525#qq.com(#替换为@)