北邮OJ-277. 内存分配-14计院上机B

2024-08-23 02:38

本文主要是介绍北邮OJ-277. 内存分配-14计院上机B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem B. 内存分配
题目描述
在操作系统中,内存分配是非常重要的工作。
已知内存空间由N个内存块组成,这些内存块从1到N编号,进行内存分配时,操作系统将选择一块大小足够的内存全部分配给请求内存的进程。例如,当进程请求10MB的内存时,操作系统必须向该进程分配一个不小于10MB的内存块。内存块不能被重复分配。
操作系统有三种基本的分配方式,分别为:
首次适应:从1号到N号内存块依次查找,直到找到第一块足够大的且未分配出去的内存块,将其分配给进程。
最佳适应:找到当前未分配出去且大小足够的内存块中最小的内存块分配给进程。
最差适应:找到当前未分配出去且大小足够的内存块中最大的内存块分配给进程。
其中,最佳适应是应用最为广泛的分配方式。现在,操作系统要依次处理M个进程的内存请求,请按照最佳适应方式分配内存,并输出相应分配到的内存块的大小。如果没有大小足够的内存块可以满足当前请求,则输出“NULL”(不包含引号),并跳出该请求。
输入格式
输入数据的第一行是测试数据组数T(T<=50)
每组数据由4行构成:
第一行为一个整数N(1<=N<=100),表示有N个内存块。
第二行有N个整数,第i个整数表示第i块内存块的大小。
第三行为一个整数M(1<=M<=100),表示有M个请求。
第四行有M个整数,表示进程所请求的内存空间。
输出格式
每组数据输出一行,每行有M个数,表示操作系统采用最佳适应方式,依次分配给进程的内存块大小;如果没有可用的内存块,输出“NULL”(不包含引号)
请不要输出多余的行尾空格,否则会被判为格式错误。
输入样例
2
4
7 5 10 3
2
4 6
4
3 5 9 10
3
5 12 6
输出样例
5 7
5 NULL 9

#include <cstdio> 
#include <iostream>
#include <algorithm>
#define MAXSIZE 120
using namespace std;
int main(){int t,n,m;int buf[MAXSIZE];int applySize;bool turnOn[MAXSIZE];bool firstCase;scanf("%d",&t);while (t--){//input && initiatescanf("%d",&n);for (int i=0;i<n;i++){scanf("%d",&buf[i]);turnOn[i]=false;}firstCase=true;//sortsort(buf,buf+n);//debug****
//      for (int i=0;i<n;i++){
//          cout<<buf[i]<<' ';
//      }
//      return true;//*********//alloc scanf("%d",&m);for (int i=0;i<m;i++){//m times applications int j;scanf("%d",&applySize);for (j=0;j<n;j++){//traverse the buf[]if (turnOn[j]==false&&buf[j]>=applySize){//found &&outputif (firstCase==true)firstCase=false;elseprintf(" ");printf("%d",buf[j]);/*bug*/turnOn[j]=true;break;}}if (j==n){//not find&&outputif (firstCase==true)firstCase=false;elseprintf(" ");printf("NULL");}}printf("\n");} return true;
}

这篇关于北邮OJ-277. 内存分配-14计院上机B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098117

相关文章

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.