1. 程式人生 > 其它 >實現一個簡易記憶體池

實現一個簡易記憶體池

1、題目描述

https://blog.51cto.com/u_15127575/3271270

2、程式碼:

import java.util.*;

//        樣例2:
//        5
//        REQUEST=10
//        REQUEST=20
//        RELEASE=0
//        REQUEST=20
//        REQUEST=10
//        輸出樣例2:
//        0
//        10
//        30
//        0
public class 記憶體分配_self {

    // key存記憶體開始地址,value存記憶體的結束地址
    public
static TreeMap<Integer, Integer> treeMap = new TreeMap<>(); public static int defaulttart = 0; public static int defaultEnd = 100; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int line = Integer.parseInt(scanner.nextLine());
for (int i = 0; i < line; i++) { String command = scanner.nextLine(); if (command.startsWith("REQUEST=")) { String s = command.split("=")[1]; int size = Integer.parseInt(s); System.out.println(request(size)); System.out.println(treeMap.toString()); }
else { String s = command.split("=")[1]; int startAddress = Integer.parseInt(s); release(startAddress); System.out.println(treeMap.toString()); } } } // 返回分配到的記憶體首地址 // 0-9 20-39 50-69 public static String request(int size) { if (size < 0 || size > 100) { System.out.println("erro"); } if (treeMap.isEmpty()) { treeMap.put(defaulttart, defaulttart + size - 1); return String.valueOf(defaulttart); } int curStart = defaulttart; ArrayList<Integer> begains = new ArrayList<>(treeMap.keySet()); // 判斷已使用的記憶體中間是否有空閒的記憶體 for (int i = 0; i < begains.size(); i++) { if (begains.get(i) - curStart >= size) { treeMap.put(curStart, curStart + size-1); return String.valueOf(curStart); } else { curStart = treeMap.get(begains.get(i)) + 1; } } // 最大記憶體和已使用的記憶體地址的最大值是否空閒 if (defaultEnd - curStart >= size) { treeMap.put(curStart,curStart+size-1); return String.valueOf(curStart); } else { return "erro"; } } // 釋放記憶體 public static void release(int startAddress) { if (treeMap.containsKey(startAddress)) { treeMap.remove(startAddress); } else { System.out.println("erro"); } } }

。。