Если вы знаете максимальный (или фиксированный) размер вашей таблицы ha sh, вы можете статически распределить ее.
Основная причина динамического распределения c состоит в изменении размер во время выполнения и возможность передавать владение структурой от функции к функции. Например (и это вообще не связано с таблицами sh, поэтому я просто использую обобщенную структуру c):
Item *GetItem() {
return new Item();
}
, которая динамически распределяет элемент и передает его обратно вызывающий абонент (вместе с владельцем (ответственность за управление его временем жизни)). Наивный способ избежать динамического выделения c будет выглядеть так:
Item *GetItem() {
Item item;
return &item;
}
К сожалению, этот адрес не может быть использован при возврате, так как item
вышел из области видимости в тот момент, так что вы можете предотвратить это. with:
Item *GetItem() {
static Item item;
return &item;
}
Сохраняет объект даже после возврата из функции, но имеет ограничение на существование только одной его копии. Если вы попытаетесь получить два элемента из этой функции, они будут одинаковыми, и у вас могут появиться ошибки, если вы не поймете это.
Итак, я бы сказал, что, если вам нужен только один га sh таблица, вы можете избежать динамического распределения памяти c, просто имея ее статическую c копию.
Конечно, кроме ограничения на единственную копию, у этого также есть недостаток, требующий выделения памяти. максимальное пространство, необходимое. Это не обязательно плохая идея (особенно если это фиксированный размер), но это может вызвать неэффективность.
В любом случае вы можете беспокоиться о производительности без необходимости. Вы также можете легко динамически распределить структуру в ее максимальном / фиксированном размере заранее (вместо того, чтобы делать много небольших выделений и перераспределений). Так как это действительно происходит только один раз за стол * га sh (с надеждой, что многие используют таблицы ха sh до освобождения), стоимость будет относительно небольшой.
И это дает вам возможность иметь более одной таблицы ha sh в программе.