• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: Buddy  伙伴  算法  

资源简介

Buddy 伙伴 算法 ,Windows编程环境。

资源截图

代码片段和文件信息

#include//包含头文件
int free[10]= {0000000001}
              use[100][2]= {0}buddy[10]= {2481632641282565121024}
                           free_add[10][50]= {0}usenum=0;     //定义外部变量
void PrintTable( ) //输出功能表函数
{
    printf(“功能说明表:\n“);
    printf(“1.申请内存\n“);
    printf(“2.释放内存\n“);
    printf(“3.退出\n“);
}
void show()     //输出内存占用情况
{
    int ij;
    printf(“\n内存空闲区剩余情况:\n“);
    for(i=0; i<10; i++)                  //输出空闲情况
    {
        printf(“%4d:有%d个空闲块    起始地址分别为: “buddy[i]free[i]);
        for(j=0; j            printf(“%4d~%4d “free_add[i][j]free_add[i][j]+buddy[i]-1);//??
        printf(“\n“);
    }
    printf(“\n内存已分配区情况:\n“);     //输出占用情况
    for(i=0; i        printf(“%2d:  大小:%4d   内存地址:%4d~%4d\n“i+1buddy[use[i][0]]use[i][1]use[i][1]+buddy[use[i][0]]-1);
}
void main()
{
    int ijkordersizestartmaxsize=9usepageshengfree_startflag;
    PrintTable();
    // free_add[2][0]=0;
    free_add[9][0]=0;//初始化已分配内存
b:
    show();
    printf(“\n输入你要执行的命令:“);
    scanf(“%d%*c“ &order);
    while( order != 3 ) //接受命令
    {
        if ( order < 1 || order > 3 )    //非法命令检测
        {
            printf(“输入的非法命令,请重新输入:“);
            scanf(“%d%*c“ &order);
            continue;
        }
        if ( order == 1 )
        {
a:
            printf(“输入作业申请空间的大小(1~1024):“); //输入要申请内存的大小
            scanf(“%d%*c“ &size);
            if(size<1||size>1024)
            {
                printf(“请输入1~1024之间的数字\n“);     //检查输入正确性
                goto a;
            }
            else if(size>buddy[maxsize])
            {
                printf(“没有足够的内存,请先释放\n“);     //检查内存空间
                goto a;
            }
            else
            {
                for(i=0; i<10; i++)
                {
                    if(free[i]!=0&&size<=buddy[i]) break;     //寻找合适内存
                }
                usepage=i;
                free[i]--;
                for(i=0; i<10; i++)
                {
                    if(buddy[i]>=size) break;     //寻找分裂大小
                }
                use[usenum][0]=i;
                use[usenum][1]=free_add[usepage][free[usepage]]; //添加已分配表
                sheng=buddy[usepage]-buddy[use[usenum][0]];
                start=free_add[usepage][free[usepage]]+buddy[usepage]-buddy[usepage-1];       //首地址确定
                usenum++;
                for(i=usepage-1; i>=0; i--)             //添加其他页面内存大小
                {
                    if(sheng>=buddy[i])
                    {
                        free[i]++;
                        free_add[i][free[i]-1]=start;
                        sheng-=buddy[i];
                        start-=buddy[i-1];       //首地址确定
                    }
                    if(sheng==0) break;
                }
                if(free[maxsize]==0)             //确定最大剩余空间
                {
                    maxsize=0;
                    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        6108  2011-08-31 09:49  myBuddy.c

评论

共有 条评论