Какова стоимость malloc(), с точки зрения циклов процессора? (Vista/OS, последняя версия gcc, самый высокий уровень оптимизации,...)
В принципе, я реализую сложную структуру DAG (похожую на связанный список) состоящий из 16B (менее распространенных) и 20B узлов (более общий).
Иногда мне придется удалить некоторые узлы, а затем добавить некоторые. Но, вместо того, чтобы всегда использовать malloc() и free(), я могу просто переместить ненужных узлов до конца моей структуры данных, а затем обновить по мере продолжения моего алгоритма. Если доступен бесплатный node, я обновить поля; если нет, мне придется выделить новый.
Проблема заключается в том, что у меня может быть только один бесплатный node доступный при наличии для ввода, например, 20 узлов данных. Это означает:
- Я проверю наличие бесплатного node
- Проверка будет успешной, и бесплатный node будет обновлен
- Я буду проверять наличие node еще 19 раз
- Все проверки будут терпеть неудачу, и malloc() будет вызываться каждый раз
Вопрос: Это действительно стоит? Должен ли я просто malloc() и free(), как обычно, или стоит ли хранить свободные узлы в конце списка, и продолжайте проверять, даже если он обычно терпит неудачу и приведет к malloc() в любом случае?
Более конкретно,
Какова стоимость процессора для malloc()??