华为OD机试C卷-- 堆内存申请(Java & JS & Python & C)
飞码创造者 2024-06-24 15:35:01 阅读 63
获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
有一个总空间为100字节的堆,现要从中新申请一块内存,内存分配原则为:优先紧接着前一块已使用内存,分配空间足够且最接近申请大小的空闲内存。
输入描述
第1行是1个整数,表示期望申请的内存字节数
第2到第N行是用空格分割的两个整数,表示当前已分配的内存的情况,每一行表示一块已分配的连续内存空间,每行的第1和第2个整数分别表示偏移地址和内存块大小,如:
0 1
3 2
表示 0 偏移地址开始的 1 个字节和 3 偏移地址开始的 2 个字节已被分配,其余内存空闲。
输出描述
若申请成功,输出申请到内存的偏移;
若申请失败,输出 -1。
备注
1.若输入信息不合法或无效,则申请失败
2.若没有足够的空间供分配,则申请失败
3.堆内存信息有区域重叠或有非法值等都是无效输入
题目解析
这个问题要求实现一个内存分配器,遵循以下规则:
1.优先级原则:优先选择紧接着前一块已分配内存之后的位置分配新的内存。
2.空间足够原则:新分配的内存区域必须有足够的空间来满足申请的大小。
3.最接近原则:在满足上述条件的情况下,选择与申请大小最接近的空闲区域。
java
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。