brk()--重置数据段存储空间函数

来源:互联网 发布:linux sync命令 编辑:程序博客网 时间:2024/06/05 04:48

资料出处:http://book.51cto.com/art/201203/326322.htm

第1章 动态内存管理函数:alloc.h

动态内存管理函数在程序执行过程中为程序中的数据分配内存,这些函数都通过指针来指明内存地址。

最常用的动态内存管理函数是stdlib中的malloc()、calloc()和free(),这组函数在同一数据段中分配内存,当程序中动态分配的内存很多,以至于跨跃数据段分配时,用到本章中的函数,其实用性稍差。

本章程序不能用VC编译,所有程序均在TC 2.0中编译运行。

1.1  brk()--重置数据段存储空间函数

brk()函数

brk()函数用于通过重新设置数据段结束位置,改变数据段存储空间大小。

语法

  1. int brk(void *endds); 

brk()函数的语法参数说明如下:

参数endds为重新设置的数据段结束地址。

brk()函数的返回值:函数成功执行时返回值为0,不成功则为-1。

示例

本示例演示读取文本文件中的所有整数。使用malloc()分配MAX个整数空间,用于保存数据,执行中如果MAX个空间用完而文件中还有未读完的数据,则用brk()函数重新设置数据段存储空间。

程序执行前先在D:\下用记事本建立文件aa.txt,输入1 2 3 4 5 6 7 8(每个数之间用一个空格分开)。其具体代码如下:

  1. #include "stdio.h"  
  2. #include "alloc.h"  
  3. #define MAX 500                 /*预定义空间,也是每次增加的空间容量*/  
  4. main()  
  5. {  
  6.     int *p,n=0,max=MAX;         /*max实际已分配的空间*/  
  7.     FILE *fp;  
  8.     clrscr();                       /*清屏*/  
  9.     fp=fopen("d:\\aa.txt","r");     /*打开文件*/  
  10.     p=(int*)malloc(MAX*sizeof(int));    /*预先分配MAX个整数空间*/  
  11.     while(!feof(fp))                /*只要没到文件尾就从文件输入*/  
  12.     {  
  13.         if(n==max)              /*空间用完时,增加数据段大小*/  
  14.         {  
  15.             maxmax=max+MAX;  
  16.             brk(p+max);         /*将数据段结束位置定在max+MAX,即增加MAX*/  
  17.         }  
  18.         fscanf(fp,"%d",&p[n]);      /*从文件读一个整数*/  
  19.         printf("%d ",p[n]);         /*显示这个数*/  
  20.         n++;                    /*实际读出数据个数*/  
  21.     }  
  22.     fclose(fp);                 /*关闭文件*/  
  23.     free(p);                        /*释放内存*/  

运行结果如图1.1所示。 图1.1  brk()函数的
执行结果(文件中只有8个数)

原创粉丝点击