int allot_mem(file* f) { int start_block_id = 0; int file_size = f->size;//记录动态分配中,文件的大小变化 free_block* fb = NULL; free_block** fbt = fb_arr; for (; *fbt; fbt++)//遍历所有的空闲块,查找空的空闲块进行分配 { if ((*fbt)->state == 0) { if ((*fbt)->mem_size >= f->size)//若空闲块大小足够容纳整个文件,则分配,并返回该空闲块编号 { (*fbt)->state = 1; (*fbt)->remain_mem_size -= f->size; return (*fbt)->block_id; } else {//该空闲块的大小不足以容纳整个文件 if (file_size == f->size)//文件大小等于当前空闲块的大小/ //文件还未分配 { start_block_id = (*fbt)->block_id;//记录分配的首块号 file_size -= (*fbt)->mem_size;//记录剩余未分配到内存的文件 (*fbt)->remain_mem_size = 0;//将已分配的盘块空间记为0 (*fbt)->state = 1;//将已分配的盘块状态标记为1 fb = (*fbt); } else { if ((*fbt)->mem_size >= file_size) { (*fbt)->remain_mem_size -= file_size; (*fbt)->state = 1; fb->next = (*fbt); fb = fb->next; return start_block_id; } else { (*fbt)->remain_mem_size = 0; (*fbt)->state = 1; fb->next = (*fbt); fb = fb->next; file_size -= (*fbt)->mem_size; } } } } } cout<<"空间不足,内存分配失败"; return -1; }
时间: 2023-06-25 16:03:07 浏览: 53
这段代码是一个动态内存分配函数,用于在文件系统中为一个文件分配内存块。函数首先遍历所有的空闲块,查找一个空的空闲块进行分配。如果找到了一个空闲块,且其大小足够容纳整个文件,则将该空闲块标记为已分配,更新剩余内存大小,并返回该空闲块的编号。如果找到的空闲块大小不足以容纳整个文件,则需要进行动态分配。在动态分配的过程中,函数会记录分配的首块号,以及剩余未分配到内存的文件大小。如果还有未分配到内存的文件,则继续在空闲块中查找空闲块进行分配,直到所有的文件都被分配到内存中或者空闲块不足以容纳文件。如果空闲块不足以容纳文件,则输出错误信息并返回-1。
相关问题
-param:JOB_NAME=job_ads_fin_wip_account_allot_d -param:ETL_FILE=/19_ADS_FIN/ETL/job_ads_fin_wip_account_allot_d.kjb -param:MIN_START_DATE=20230701 -param:MIN_END_DATE=20230702 -param:MAX_START_DATE=20230709 -param:MAX_END_DATE=20230710 -param:INCR_STEP=1M
这看起来像是一组作业参数的设置。这些参数用于指定一个名为"job_ads_fin_wip_account_allot_d"的作业的执行配置。
下面是每个参数的说明:
- JOB_NAME:作业的名称,设定为"job_ads_fin_wip_account_allot_d"。
- ETL_FILE:ETL文件的路径,设定为"/19_ADS_FIN/ETL/job_ads_fin_wip_account_allot_d.kjb"。
- MIN_START_DATE:最小开始日期,设定为"20230701"。
- MIN_END_DATE:最小结束日期,设定为"20230702"。
- MAX_START_DATE:最大开始日期,设定为"20230709"。
- MAX_END_DATE:最大结束日期,设定为"20230710"。
- INCR_STEP:增量步长,设定为"1M"。
这些参数可能会在作业执行过程中被使用,用于指定作业的输入、输出、日期范围等信息。
23/07/10 09:32:13 INFO fs.TrashPolicyDefault: Moved: 'hdfs://mideaservice1/user/hive/warehouse/ads_fin.db/tmp_ads_fin_wip_account_allot_d_01/part-00007-cc8293f8-6f62-4ad6-a6e9-52c31772c927-c000' to trash at: hdfs://mideaservice1/user/hive/.Trash/Current/user/hive/warehouse/ads_fin.db/tmp_ads_fin_wip_account_allot_d_01/part-00007-cc8293f8-6f62-4ad6-a6e9-52c31772c927-c000
这是一个关于Hadoop文件系统操作的日志信息。它显示了一个文件从原始路径移动到垃圾箱的过程。具体来说,文件'part-00007-cc8293f8-6f62-4ad6-a6e9-52c31772c927-c000'被移动到了路径'hdfs://mideaservice1/user/hive/.Trash/Current/user/hive/warehouse/ads_fin.db/tmp_ads_fin_wip_account_allot_d_01/'下的垃圾箱中。这个操作通常是为了防止误删文件,提供了恢复的机会。