Тема: Less Toolkit
Показать сообщение отдельно
Старый 03.05.2009, 14:24   #28 (Ссылка на пост)
Lester
Гаденыш
 
Аватар для Lester
Пол:
 
Активность Longevity
3/20 16/20
Today Сообщения
0/5 sssss4648
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея: 0
Вес репутации: 78 Lester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторы
Цитата:
Сообщение от 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 ничем не уступает С-массиву по скорости, видно оптимизация все разворачивает в работу с тем же С-массивом
__________________
- Слава Україні! - закричали они, вместо приветствия.
- Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским?
Lester вне форума  
Ответить с цитированием