Ну, решение вашей проблемы действительно зависит от того, что именно вас просят сделать. Существует большая разница между общим использованием памяти приложением и памятью, используемой связанным списком. Если вам нужно знать, сколько памяти использует ваш связанный список, вам нужно умножить количество узлов на размер одного узла. Вот простой пример (в C вам придется немного его настроить, чтобы сделать его совместимым с C ++):
#include <stdio.h>
#include <stdlib.h>
struct list_node {
int data;
/* ... other stuff ... */
struct list_node *next;
};
int main(void)
{
int i;
struct list_node *list;
struct list_node *node;
/* Create a single linked list with 5 elements */
node = list = malloc(sizeof(struct list_node));
if (!node)
abort(); /* Not enough memory */
node->data = 0;
for (i = 1; i < 5; ++i) {
node->next = malloc(sizeof(struct list_node));
if (!node->next)
abort(); /* Out of memory */
node = node->next;
node->data = i;
node->next = NULL;
}
/* Print a list, count a number of nodes, and estimated memory usage. */
i = 0;
for (node = list; node != NULL; node = node->next) {
++i;
printf("Node %d\n", node->data);
}
printf("%d nodes use %ld bytes of memory (%ld per node).\n",
i, i * sizeof(struct list_node), sizeof(struct list_node));
/* TODO: Free resources... */
return 0;
}
В этом примере было создано 5 узлов для формирования связанного списка. Таким образом, общий объем памяти, необходимый для списка, составляет 5 * sizeof(struct list_node)
.
Конечно, когда вы выделяете память с помощью функции malloc()
, она выделяет дополнительное пространство. Например, ему нужно где-то хранить информацию, чтобы знать, сколько байтов было выделено для данного указателя, чтобы освободить его, он также заботится о выравнивании и может выделить больше места, чем необходимо, чтобы в следующий раз вы вызывали malloc()
память уже будет там.
Так что если вы действительно хотите знать все эти детали, то вам нужно использовать интерфейс, специфичный для операционной системы, чтобы определить, сколько виртуальной памяти использует ваше приложение. В частности, вам нужно два числа - использование памяти до и после создания связанного списка. К сожалению, для этого не существует стандартного API. Но вот хороший Q & A, который может помочь вам обойти вашу платформу и решить эту проблему - Как определить потребление ресурсов процессора и памяти внутри процесса?
Скорее всего, ваш учитель хотел, чтобы вы сделали простую вещь. Но если вы сделаете и то, и другое - это будет для вас только плюсом.
Удачи!