Предположим, я хочу отслеживать, сколько ассигнований моей программы сделано, поэтому я увеличиваю/уменьшаю счетчик, когда я malloc
или free
. Аналогично, я могу подсчитать длину связанного списка.Какой тип C следует использовать для подсчета объектов в памяти?
Какой тип следует использовать для такого значения? Я думаю, что худшим случаем для «количества объектов в памяти» является количество байтов в адресном пространстве. То есть мой счетчик должен быть того же размера, что и тип указателя. Это наводит на мысль, я должен установить свой счетчик, как:
void * num_allocated_objects = 0;
Однако, это выглядит как нетрадиционное использование void*
! Один источник говорит мне, что я должен использовать size_t
: "You use size_t
when you are counting something, and are sure that it cannot be negative."
Я не уверен. size_t
is "used to represent the size of an object". Эти два ответа кажутся несовместимыми: я могу представить себе систему, в которой возможное количество объектов больше размера самого большого объекта в байтах. Использование size_t
для подсчета вещей в памяти должно предполагать, что самым большим объектом в памяти является размер всего адресного пространства.
Каков правильный, идиоматический тип C для подсчета объектов в памяти? Это size_t
, или тип указателя, или что-то еще?
1) Указатели - это ** нет ** целые числа, а не для подсчета. 2) Вы не можете делать арифметику на 'void *'. 3) Как бы вы проверили указатель? Сравнение указателей с несвязанными адресами вызывает UB. Сказал, что: это зависит от реализации. – Olaf