記憶體管理(3602017秋招真題)

2021-08-07 09:47:36 字數 1739 閱讀 8993

題目描述

物聯網技術的蓬勃發展,各種感測器紛紛出現。小b所在的專案組正在開發乙個物聯網專案,她們在研究設計一種新的感測器。這種感測器有自己的基本處理單元,具有一定的自主性,能夠進行簡單的資料收集、處理、儲存和傳輸。為降低系統功耗並保證系統可靠性和可控性,他們要對記憶體進行基本的管理。研究小組計畫開發乙個實驗性記憶體管理器,實現對記憶體的分配、釋放和整理。對應的介面為new、del和def,使用語法為:

new size:分配size位元組大小的記憶體塊,返回該記憶體塊的控制代碼handle,size為正整數;

del handle:釋放控制代碼handle指向的記憶體塊;

def:整理記憶體碎片,將所有已分配記憶體塊按位址從低到高的順序遷移,使空閒記憶體碎片在高位址端拼接在一起;

初始記憶體為 initsize 位元組大小的整片空閒記憶體,編號為 1 到 initsize 。

new size操作中,若存在不小於size的連續空閒記憶體,則按照小位址優先的原則從空閒記憶體區域中分配size大小的記憶體塊,標記該記憶體塊狀態為已分配,並返回指向該記憶體塊的控制代碼。若無法分配,則返回空(null)。

del handle操作釋放由handle標記的記憶體塊,標記被釋放的記憶體狀態為空閒。若handle為無效控制代碼,則返回illegal_operation。

def 完成記憶體整理工作,無返回值。

根據設計,每次成功記憶體分配返回的控制代碼為乙個正整數,從1開始,依次計數。失敗的儲存分配操作不影響計數。

專案小組將此項任務分配給小b,小b向你求助,你能幫她嗎?

輸入輸入中有多組測試資料。每組測試資料的第一行為兩個正整數t和maxmem(1<=t<=10000, 1<=maxmem<=10000),其中t為操作次數,maxmem為初始記憶體大小,隨後有t行操作指令。

對每組測試資料,按操作順序輸出操作結果。對每個new操作,在單獨行中輸出結果,成功時輸出其返回控制代碼值,失敗則輸出null。若del操作失敗,輸出illegal_operation。def不產生輸出。

樣例輸入

6 10

new 5

new 3

del 1

new 6

defnew 6

樣例輸出12

null

3這種的資料不是很強,用模擬可以過,模組化一下,呼叫三個函式就好了,具體實現可以參考**

ac**:

#include #include #include # define f(i,m,n) for(int i=m; i<=n; i++)

# define mem(s) memset(s, 0, sizeof(s));

using namespace std;

struct node ;

int t, mmax, handle;

string ope;

vectorv;

int newfunc(int size)

else

} else

else

}if (mmax - v[len - 1].y >= size)

return -1;

} } }

void deffunc()

}int delfunc(int h)

} return -1;

}int main()

else printf("%d\n", flage);

}else if (ope == "del")

else

} }return 0;

}

奇虎360 2017春招真題

1.分金子 a b兩夥馬賊意外地在一片沙漠中發現了一處金礦,雙方都想獨佔金礦,但各自的實力都不足以吞下對方,經過談判後,雙方同意用乙個公平的方式來處理這片金礦。處理的規則如下 他們把整個金礦分成n段,由a b開始輪流從最左端或最右端佔據一段,直到分完為止。馬賊a想提前知道他們能分到多少金子,因此請你...

2017秋招真題 360

題目描述 寫入記憶體1到n之間的n個自然數,記憶體寫入只接受二進位制的形式,所以十進位制表達中除0和1之外的其他值都沒有成功寫入記憶體。所以有多少數字寫入了伺服器的記憶體!輸入輸入中有多組測試資料。每組測試資料在單獨的一行中,為整數n 1 n 109 109 樣例輸入 1020 輸出23 100 正...

JS刷秋招真題

嗶哩嗶哩2020校園招聘前端筆試卷 一 1.找出有序陣列 從小到大排列 中和為sum的兩個數,要求複雜度為o n 找到一組即可 求和輸入描述 第一行 陣列長度 第二行 陣列各項的值 第三行 sum 輸出描述 若存在,輸出和為sum的兩個數,以空格分隔 若不存在,輸出notfound 輸入例子1 51...