Цитата:
Сообщение от Marchello
Вот например метод FromArray, ты там юзаешь memcpy для того чтобы заполнить масив в this извне.
Но ведь при таком раскладе не будут вызываться операторы '=' для
кастумных типов. Хотя может тут какой-то скрытый смысл?
|
нет - просто сделал под себя, С-ые массивы не нуждаются в операторе копирования( т.к. в C нет классов ), а в С++ я использую vector, согласен - я предопределю этот метод для базовых типов, а для остальных сделаю через явное копирование
Цитата:
Сообщение от Marchello
И потом, скольо весит пустой такой массив? У меня в 2008 студии пустой вектор весит 20 байт (и 24 в релизе), тогда у тебя выйдет где-то:
(20+20+20) + 6*4 (bool, size_t, ArraySortFunction) + 2*sizeof(T) +
+ размер String (который будет минимум 4*2 байт) = 100 байт для типа int.
|
обычно содержимое массива значительно больше 100 байт, в данном случае я думаю это оправданная трата ресурсов, но конечно же посмотрю где можно будет соптимизировать, спасибо за совет
Цитата:
Сообщение от Marchello
А потом еще вызывается reserve(256) в конструкторе...
|
он позволит в большинстве случаев обойтись без лишних движений по мере заполнения массива, как по мне затраты на выделение/перемещение блоков памяти для каждого нового элемента стоят большего внимания чем небольшой перерасход памяти
Цитата:
Сообщение от Marchello
Я вот думаю даже иметь две реализации класса массива - первая ну как обычно, и вторая - для типов не имеющих кастумного оператора присваивания (аля POD). Тогда для простых типов можно будет
повсевместно юзать memcpy - что упростит и ускорит это дело
|
как я уже писал - можно просто переопределить этот метод для таких типов, например - void Array<char>::FromArray, благо шаблоны позволяют такое
Цитата:
Сообщение от Marchello
ну и в таком случае конечно не использовать std::vector, будет такой себе PlainArray - конечно с меньшей функциональностью, но зато шустрый (что важно для gamedev-a).
|
лично проведенные бенчмарки( на массивах из пяти миллионов элементов ) показали, что vector ничем не уступает С-массиву по скорости, видно оптимизация все разворачивает в работу с тем же С-массивом