Используя STL увеличит Ваш двоичный размер для двух основных причин:
По умолчанию, компилятор рассматривает код шаблона как встроенный. Поэтому, если Вы будете использовать std::list
в нескольких различных единицах компиляции, , и компилятор встраивает тот код , то у них каждый будут свои собственные локальные встроенные определения std::list
функции (который, вероятно, не является грандиозным предприятием, так как компилятор только встроит очень маленькие определения по умолчанию).
Примечание, которые (поскольку Martin указывает в другом месте) умножаются - определенные символы разделяются всеми современными компоновщиками C++ на больших платформах, как описано в документация GCC . Таким образом, если компилятор оставит код шаблона исключительным, то компоновщик удалит дубликаты.
из-за самой природы шаблонов C++, std::list
потенциально произвольно отличается, чем std::list
. На самом деле стандартные мандаты, который std::vector
определяется как битовый вектор, так большинство операций, там полностью отличающиеся, чем значение по умолчанию std::vector
.
Только специалист по обслуживанию библиотеки может иметь дело с этим. Одно решение состоит в том, чтобы взять базовую функциональность и "un-templatize" это. Превратите его в структуру данных C-стиля с void*
везде. Затем шаблонный интерфейс, который видят нисходящие разработчики, является тонкой оберткой. Уменьшение объема дублированного кода, потому что шаблонные специализации вся доля общее основание.
loop
{
NSDate *start = [NSDate date];
// a considerable amount of difficult processing here
// a considerable amount of difficult processing here
// a considerable amount of difficult processing here
NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:start];
NSLog(@"Execution Time: %f", executionTime);
}
Должно работать.