这是我的第一个问题,我已尝试遵循发布规则,如果我有任何错误,请让我知道如何改进。
无论如何,我一直使用BestFit处理内存分配和释放。 分配现在可以正常工作,但是,我收到的反馈是存在不必要的for循环,并且分配应该使用一种算法(如果有大量数据)工作。我的问题是我该如何更改代码,以便所有事情都在一种算法中完成,而不是拥有三个for循环?
指针是指向内存中地址的类。空闲列表是具有位置和内存的节点的链接列表。这是我的分配方法:
@Override
public Pointer alloc(int size) {
int pointerAdress = 0;
for (int i = 0; i < freeList.size(); i++) {
for (Node n : freeList) { //Looks for a node that's big enough
if (n.getMemory() >= size) {
bestNode = n;
pointerAdress = bestNode.getPosition();
break;
}
if (n.equals(freeList.getLast())) {
System.out.println("No node has enough free memory-space");
return null;
}
}
Node n = freeList.get(i);
if (n.getMemory() == size) { //If this node's space equals the size = this node is the best fit
bestNode = n;
pointerAdress = bestNode.getPosition();
break;
//If the node has a space that's big enough, and is smaller than best fit
} else if (n.getMemory() >= size && n.getMemory() < bestNode.getMemory()) {
pointerAdress = bestNode.getPosition();
}
}
allocated.put(pointerAdress, size);
for (int i = 0; i<freeList.size(); i++) {
if (freeList.get(i).getPosition() == pointerAdress) {
freeList.get(i).decreaseFreeMemory(size);
if (freeList.get(i).getMemory() == 0) {
freeList.remove(i);
}
break;
}
}
return new Pointer(pointerAdress, this);
}