【编程题目 | 200分】内存资源分配 [ 2021 Q1 考试题 ]
相似题目:华为机试内存资源分配-大厂笔经 (online1987.com)
时间限制:C/C++ 1000ms | 其他语言:2000ms
空间限制:C/C++ 262144K | 其他语言:524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并提交“按钮进行代码提交。
■ 题目描述
【内存资源分配】
定义了如下内存管理规则:
(1)按块进行内存管理,有若干个pool,每个pool管理一种大小内存块;每块内存的地址是连续的,但是内存块间地址不连续
(2)只要不超过内存块大小,该内存块可以被多次申请;
(3)一次内存申请只能从一个内存块中申请,不能跨内存块申请;
(4)剩余内存大小仅统计完全未被使用的内存块的总大小;
要求给定申请内存块的需求,求解剩下的完全未使用的内存块大小总和最大是多少?
注意:只要有一次申请不到内存,返回-1;
输入描述:
- 第一行输入N,代表不同规格内存的个数。
- 之后N行分别输入该规格内存的个数、内存的规格,使用空格分隔。
- 第N+2行输入M,代表需要申请的内存数目,单位为KByte 。
- 之后一行输入M个内存的大小,使用空格分隔。
- 其中N小于50,总的内存块个数小于50,M小于15。
如:三种内存块,分别是:2块大小4KByte的内存,3块大小8KByte的内存,4块大小16KByte的内存,输入格式:
3
2 4
3 8
4 16
一次申请7KByte,9KByte,11KByte,4KByte这4块内存,输入格式:
4
7 9 11 4
输出描述:
输出的剩余内存块大小:64KByte,输出格式:
64
备注:
- 如果没有优化方法,可能申请情况如下:
- 7KByte占用1个8KByte内存块,9KByte占用1个16KByte内存块,11KByte占用1个16KByte内存块,4KByte占用1个4KByte内存块
- 这样,完全未使用的内存块总大小是 4KByte + 2*8KByte + 2*16KByte = 52KByte
—————————————————————————————————————————————
- 如果优化方法,申请如下:
- 7KByte占用1个16KByte内存块,9KByte复用之前16KByte内存块剩下的内存,11KByte占用1个16KByte内存块,4KByte占用之前16KByte剩下的内存
- 这样,完全未使用的内存块总大小是 2*4KByte + 3*8KByte + 2*16KByte = 64KByte
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
2 4
3 8
4 16
4
7 9 11 4
输出
64
代码实现
CPP
剩余50%内容,订阅会员后查看
隐藏内容
此处内容需要权限查看
会员免费查看声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。