Как только вы выделите память для узла (используя malloc), вы сможете использовать sizeof (yourDataType).Таким образом, чтобы получить общий размер связанного списка, вы просматриваете список и получаете количество узлов:
Total Size Of Linked List = SizeOf(One Node) * Count Of Nodes
Например:
int getCountOfList()
{
Node* temp = head; //assign a temp node to the head of the list
int count=0;
while(temp) {
count++;
temp = temp->next; //move to next node
}
return count;
}
Затем вы берете это количество и умножаетесь наsize:
size = getCountOfList * sizeof (mydatatype);
Это даст вам размер фактического связанного списка, но будьте осторожны, так как узел связанного списка имеет элементы указателя, которые в исами по себе могут выделить память, а также.Это необходимо учитывать ...
Например, один из этих элементов char * в узле может выделять немного больше места и занимать немного памяти.
Если вына самом деле нужен весь размер списка, включая выделенные элементы для всех других указателей char *, например, вы просто:
1) просмотрите список и загляните в каждый узел
2) для каждого узлаВы проверяете, указывают ли элементы каждого узла на какое-либо другое распределение (например, данные char * могут выделять 50 символов для хранения).Если оно не равно нулю, вы получаете длину строки + 1 (для завершения символа) и умножаете ее на sizeof (char) (для этого примера)
3) Вы делаете это для каждого узла и сохраняетеэтого размера, затем перейдите к следующему узлу
4) Вы берете сумму всех этих символов * (в данном случае) для каждого узла и накапливаете для всего списка.
5) Один разу вас есть это просто добавить эту сумму, которая даст вам размер всех узлов.
Тогда общий размер становится:
SizeOfAllNode + (SizeOf(dataType) * CountOfNodes)