Есть задача - реализовать двусвязный список(хранимые значения - целые числа) при помощи структур. При заполнении списка 10^7 значениями память программы доходит примерно до 580МБ. Затем вызывается функция очистки списка, и память программы снижается до ~16-17МБ.(Память смотрю внутри VS). Что это за оставшаяся память? Я проверял, вызовов new и delete при очистке списка одинаковое количество. Интересен тот факт, что если провернуть такую штуку со встроенным списком, то останется 7-8МБ памяти.
Вот вид моей структуры двусвязного списка:
struct doubly_linked_list{
struct list_node
{
int value;
list_node* next = nullptr;
list_node* prev = nullptr;
~list_node() = default;
};
list_node* head = new list_node;
list_node* tail = head;
int size = 0;
Это функция очистки:
void doubly_linked_list::clear(){
for(list_node* current = tail->prev; current != nullptr; current = current->prev)
{
delete current->next;
}
head->next = nullptr;
tail = head;
size = 0;}
Функция добавления в конец списка:
void doubly_linked_list::add_last(int value){
list_node* new_node = new list_node;
new_node->value = value;
tail->next = new_node;
new_node->prev = tail;
tail = new_node;
size++;}
Полный код: doubly_linked_list.h:
#include <iostream>
#include <random>
#include <time.h>
struct doubly_linked_list
{
struct list_node
{
int value;
list_node* next = nullptr;
list_node* prev = nullptr;
~list_node() = default;
};
list_node* head = new list_node;
list_node* tail = head;
int size = 0;
void add_last(int value);
void clear();
};
doubly_linked_list* create_random_list(int size, unsigned int min, unsigned int max);
int get_random(unsigned int min, unsigned int max);
doubly_linked_list.cpp:
void doubly_linked_list::add_last(int value)
{
list_node* new_node = new list_node;
new_node->value = value;
tail->next = new_node;
new_node->prev = tail;
tail = new_node;
size++;
}
void doubly_linked_list::clear()
{
for(list_node* current = tail->prev; current != nullptr; current = current->prev)
{
delete current->next;
}
head->next = nullptr;
tail = head;
size = 0;
}
doubly_linked_list* create_random_list(int size, unsigned min, unsigned max)
{
srand(time(nullptr));
doubly_linked_list* list = new doubly_linked_list;
for (int index = 0; index < size; index++)
list->add_last(get_random(min, max));
return list;
}
int get_random(unsigned int min, unsigned int max)
{
return rand() % (max - min) + min;
}
main.cpp:
#include "doubly_linked_list.h"
int main()
{
doubly_linked_list* test = create_random_list(10000000, 10, 100);
test->clear();
system("pause");
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Данный калькулятор рассчитывает цену проката авто в зависимости от сезона, на каждый из 3 сезонов задано 5 разных ценМне нужно усложнить его,...
Например есть такой плагин mmenu, как сделать чтобы он срабатывал только на определенной ширине экрана? подобно медиа запросам в css нашла вот...
При этом,если в медизапросе убрать высоту (на скрине справа - elements), то не перекрывает
Есть выдвижной чатик с ответами на вопросы и надо добавить справа (в раскрытом виде) возможность пролистывать этот чатВот какая штука нужна...