Я создал программу диспетчера памяти, которая использует узлы в связанном списке, которые хранят номер задания узла и начальный и конечный байт памяти, используемой узлом.Функция отчета со списком связанных с C++
У меня возникли проблемы с мыслью о способе сделать мою работу report_jobs
. Я хотел бы выход выглядеть как этот
JOB Memory Usage
1 10 – 50 54 – 75 200 – 240
5 1 – 9 101 – 134
3 180 – 184 185 – 192
С тем, что множество узлов может иметь ту же работу, у меня возникли проблемы, выясняя, как цикл через это таким образом, что это будет только распечатать работу один раз, но пройти через все узлы и посмотреть, есть ли у него этот номер задания, а затем распечатать начальный и конечный байты.
Вот пример кода, с которым я возился, im позитивный я уже усложняю вещи, и мне просто нужно увидеть его более простым способом.
void report_jobs(void)
{
ALLOCPTR t = alloclist;
ALLOCPTR m = alloclist;
int numberofnodes = 0;
int job = 0;
while(m!=NULL)
{
jobb++;
while(t!=NULL)
{
if(t->id == job)
{
cout << t->id << t-> start_byte << t-> end_byte << endl;
}
t = t->next;
}
m = m->next
}
Почему бы не поставить эти данные в dict и output – michaeltang
Это не совсем тривиально. Вам необходимо агрегировать (отсортированные?) Диапазоны адресов в отношении ваших заданий. Вам понадобятся некоторые вещи под капотом, чтобы это хорошо работало, в зависимости от ожидаемых случаев использования. Например, если у вас есть минимальная привязка к идентификаторам работы, с которыми вам нужно работать, вы можете создать структуру, содержащую начальный и конечный байты, и создать упорядоченный длинный вектор связанных списков этой структуры для организации данных. Если идентификаторы работы сходят с ума, вы можете использовать хэш связанных списков структуры. –