下面的圖像可視化所需的壽命爲各種尺寸的16個內存塊:如何最小化固定分配方案所需的內存量?
什麼,我基本上是在尋找被賦予了許多大小大小的ň塊我和壽命[開始我,端我 ),我們的總時間間隔期間返回到包含它們所需的最小尺寸的總的存儲塊和Ñ偏移,偏移我,到用於輸入塊這個總的內存塊。
一個微不足道的非最優算法將是以下幾點:
int offsets[N];
offsets[0] = 0;
int total_size = size[0];
for (int i = 1; i < N; ++i)
{
offsets[i] = offsets[i - 1] + size[i - 1];
total_size += size[i];
}
我們目前的算法是按大小排序的塊,然後從最大處理它們到最小,尋找第一偏移,其中塊不與已分配的塊重疊。這本質上是一個貪婪的算法,所以我有一種感覺,可以做得更好。
該算法只需要在應用程序啓動時運行一次,因此它不必超快。分配的數量大約爲10-50個,爲了我們的目的,時間可以分散到大約50個固定大小的單位。
這是一個非常模糊的提示,但不是規避貪婪算法的規範方式,嘗試幾種可能的解決方案,在這些方案中引入隨機性或其他偏離直接方法的偏差,並查看是否有改進? (例如,成對交換TSP等) – millimoose
(另外:你的可視化有點令人困惑,難道「使用的內存」會更好嗎?它可能會或可能不會讓你找到差距以及它們如何被填充。 「分配ID」似乎不是很重要。) – millimoose
你能詳細說明一下嗎?分配ID基本上表示不同的對象,並且條形圖表示在其期間執行它們活動的程序的週期,這是非常重要的。 –