Search
Write a publication
Pull to refresh
35
0
Антон @tntnkn

Не шалю, пишу статьи, починяю поломанное.

Send message

Спасибо, что вернулись дописать комментарий) Рад, что статья понравилась!

Использовать односвязный список и аллоцировать каждую ноду через malloc?

Нет разработчиков - нет багов!)

Ну да, аллокация в масисвах - это немного неортодоксально)

Типо, аллокацию как в `std::vector`?

Я ни сколечки не лоулевел програмист, и на сигнатуре функции malloc моя экспертиза в нём заканчивается.

Но.

В худшем случае реаллок правда, если правильно понимаю, может быть дороже маллока, так как в первом может произойти мемкопи сверху обычной аллокации. Вот, например, как это имплеменировано в glibc.

А в остальном я, если честно, потерял нить беседы, поэтому на этом комментарии ограничусь))

Побоюсь про VLA что-нибудь говорить)

Ну да, эдакий зверь. Забавно, что если толкать массив через указатель на массив в сях, то проверка типа и sizeof будет работать, как положено. Хотя синтакс при этом, конечно, несколько усложняется без нормальной на то причины - https://godbolt.org/z/c8KT7EPM8. Не совсем прозрачно, почему такой же тайпчек нельзя было сделать и без бубнов с указателем на сам массив)

О, это моё)

Кстати, говоря о constexpr - в качестве оффтопа вспомнил соревнование по простым числам на канале Dave's Garage, где один умелец сделал версию, работающую в компайл-тайме, которая, формально, вроде как победила)

https://github.com/PlummersSoftwareLLC/Primes/tree/drag-race/PrimeCPP/solution_3

Спасибо!

Но тогда нельзя будет кастомизировать размер массива. Ну и в целом, на O3 GCC оптимизировал на ура.

Хорошее замечание, спасибо! Но там придётся либо зашивать размер в сигнатуру, либо передавать его параметром. Второй случай получается идентичным передаче по указателю.

Тогда массив будет копироваться при передаче, это дорого.

Не, ну я же не рентв)

Ну да, хвост появится, если элементов останется меньше, чем размер векторного регистра. Вполне возможно, этот хвост тоже обработается через одну векторную операцию, если в наборе инструкций есть шафл вектора.

Ну да, в чистых сях массив как таковой, фактически, и нельзя передать как параметр. В плюсах можно толкнуть именно встроенный массив как таковой по ссылке. Компиляторы хорошо это понимают. У меня есть пример в статье, где GCC не векторизовал это на O2, но это, скорее, просто интересная особенность.

То есть, руками векторизовали этот кусок - `dst[i] = src[i] + n;`, и в нём пессимизация случилась? А можно на весь цикл посмотреть?

А ссылки на массивы я тоже смотрю, только пониже в статье)

Статья по факту про simd, тут ускорение за счёт нескольких операций за раз получается.

Без векторов сама по себе операция чтения по индексу у обоих одинаковая выходит.

Давеча закончил отличную игрульку Plague's Tale: Requiem, там в конце была фраза "All natural laws end here". Мне кажется, к UB она подходит замечательно)

Строго говоря, начать печатать стек можно и с обычным массивом. В моей прошлой статье был вот такой пример подобного.

1
23 ...

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Application Developer
C++
English
Linux
C
Python