[C++] Что быстрей? Сортировка указателей или объектов?

  Рет қаралды 9,279

Efremov Engineer

Efremov Engineer

7 жыл бұрын

Как ускорить сортировку массива объектов в 2 и более раз? В этом видео Вы узнаете об этом и не только, так же мы узнаем, что такое функциональные объекты и указатели на функции.
Файлы этого урока на GitHub: i2m.su/DmuvqY
Задавайте Ваши вопросы:
Я в VK - id297086696
Я в FB - i2m.su/klotNf
Group VK - codrob
Group FB - i2m.su/xRPlWf

Пікірлер: 14
@eush445
@eush445 7 жыл бұрын
Автор несёт несусветную чушь! Не в моих привычках оставлять комментарии, но в этот раз подгорело. И так хороших разработчиков C++ днём с огнём не найдёшь, так ещё и обучающий контент клепают дилетанты. Аргументы: - Автор не сортирует указатели. В обоих случаях автор сортирует объекты, хранящиеся по указателю. Указатель - переменная хранящая адрес. Сортировка указателей - это сортировка адресов. Сравнивать скорость сортировки адресов со скоростью сортировки объектов - сравнения тёплого с мягким. Сортировать адреса, конечно, иногда приходится, но на практике это случается очень редко (например если пишется собственный memory manager) - Автор сравнивает скорость свопа указателя со скоростью свопа данных по указателю. А значит вопрос сводится к простому - что быстрее, переместить указатель или переместить данные по указателю, ответ на этот вопрос понятен интуитивно. Но даже если именно этот вопрос хотел затронуть автор - он его не раскрыл ни разу. - Оба рассмотренных подхода крайне неэффективны и их применение крайне нежелательно. На пальцах: В обоих случаях условием для сортировки являются данные объекта, а не адреса. Т.е. в любом случае в сортировке автор разыменовывает указатель. Просто в одном случае он в массиве перемещает сам указатель, а во втором данные по указателю. В итоге отсортированными становятся не указатели (адреса), а собственно объекты. Адреса как были вперемешку, так и будут вперемешку, хоть и в другом порядке. А теперь мякотка!!! В любом случае, варианты бредовые!)) Для кого-то будет удивительным чудом, но у процессора есть занимательная штука - кэш. Именно в кэш перемещаются данные из оперативки, для оптимальной работы над ними. Если вы обращаетесь к i-му элементу массива, то в кэше окажется сам i-ый элемент, сколько-то до него и сколько-то после. Поэтому обращение к последовательно расположенным данным в памяти значительно быстрее, чем к данным которые лежат в разных частях этой памяти. Что происходит в указанном примере? Всё просто. Массив указателей попадает в кэш. Обращение к указателям происходит очень быстро. А вот обращение к данным по указателям - нет. Процессор понятия не имеет, что значат данные в массиве и что вы собираетесь с ними делать. И если вы обратитесь к данным по первому указателю, в кэше окажется чучуть до, чучуть после. Но крайне мало вероятности, что туда попадут данные по второму указателю в массиве. А что в итоге? А в итоге - фэйл автора) Вот сравнительный пример производительности. ideone.com/MydCIv или drive.google.com/open?id=0BxB6pDkBxRb4SjB0bWpueVN3ODQ Сортировка массива указателей (с обращением к данным объекта), вызывает накладные расходы в связи с кэш промахами. И в итоге, даже простой своп указателя (тех самых "четырёх или двух байт", занимает значительно больше времени, чем своп ДАННЫХ (sizeof(TestObject)) Выводы! - Не слушайте дилетантов! - Избегайте по возможности динамических аллокаций. - Располагайте данные оптимально, избегая кеш миссов. - Думайте головой и читайте книги
@micolashhostofthenightmare1150
@micolashhostofthenightmare1150 7 жыл бұрын
Раз ты такой умный то сам снимай
@sunheretic13
@sunheretic13 7 жыл бұрын
Евгений Шляпин, с тобой полностью согласен. Урок пришлось быстро проматывать, не могу смотреть на это художество. От себя: 1. Как ускорить сортировку массива объектов в 2 и более раз? Воспользоваться библиотечной функцией сортировки. 2. Где delete в конце?
@oskabarpablo4363
@oskabarpablo4363 7 жыл бұрын
Хуйню ты написал, автор привёл хорошие и полезные примеры для новичков. Объекты которые я сортирую могут весить и по 10 mb, в этом случае размышление о кэше бессмысленны. Мы живём в эпоху многопоточных систем, и работа с указателями основа высокопроизводительных приложений.
@sasichkamega
@sasichkamega 5 жыл бұрын
@@oskabarpablo4363 не могут онистолько весить, в стек не поместятся, ты пиздишь
@Shpinog
@Shpinog 5 жыл бұрын
@@oskabarpablo4363 Ну так опровергни написанное , он по фактам написал, а ты только оскорбил .
@BlinCT
@BlinCT 7 жыл бұрын
Очень интересное видео. Скажите а с каких видео надо начинать смотреть? А то у вас прилично их но в каком лучше порядке смотреть не понятно(
@aglproject9611
@aglproject9611 7 жыл бұрын
1. Зачем так спешить? 2. Замерять время лучше до вывода, cout занимает приличное время 3. Передавать адрес функции можно намного проще
@Vitrebenki
@Vitrebenki 7 жыл бұрын
Лучше наверное назвать методы не сортПоинтер а свапПоинтер. Но урок уже сделан так что это уже не важно. Не совсем понятно зачем используется ссылка на указатель? Есть ли в этом какой-то сакральный смысл? Не проще просто передавать указатели.
@mkeyreal
@mkeyreal 7 жыл бұрын
Без ссылки функция обменяет указатели, хранящиеся на стеке.
@Vitrebenki
@Vitrebenki 7 жыл бұрын
Понял. Спасибо!
@SuperTechnorider
@SuperTechnorider 7 жыл бұрын
музыку бы убрал. слушать проблемно. это же не развлекательное видео. из-за музла отменил подписку
[C++] Память: Стек и Куча
12:38
Efremov Engineer
Рет қаралды 30 М.
[C++] Лямбда выражения
20:27
Efremov Engineer
Рет қаралды 10 М.
ПОМОГЛА НАЗЫВАЕТСЯ😂
00:20
Chapitosiki
Рет қаралды 2,9 МЛН
لقد سرقت حلوى القطن بشكل خفي لأصنع مصاصة🤫😎
00:33
Cool Tool SHORTS Arabic
Рет қаралды 29 МЛН
ОБЯЗАТЕЛЬНО СОВЕРШАЙТЕ ДОБРО!❤❤❤
00:45
Всё об указателях в C++ за 20 минут
20:00
Добро пожаловать в C++
16:08
Winderton
Рет қаралды 457 М.
Зачем нужны указатели в C++?
8:14
Dima
Рет қаралды 11 М.
[C++] Битовые поля и объединения
17:40
Efremov Engineer
Рет қаралды 10 М.
Собеседование Junior C++
45:32
Ambushed Raccoon
Рет қаралды 109 М.
[C++] STL: Введение
9:00
Efremov Engineer
Рет қаралды 18 М.
Move Semantics in C++
13:10
The Cherno
Рет қаралды 287 М.
ПОМОГЛА НАЗЫВАЕТСЯ😂
00:20
Chapitosiki
Рет қаралды 2,9 МЛН