Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Голосование по эффективности и расходам ресурсов
PD>https://rsdn.org/poll/9966Автор: Pavel Dvorkin
Дата: 23.02.24
Вопрос: Надо обработать большой массив по не совсем тривиальному алгоритму. Можно создать его копию, можно и не создавать. На написание кода с копией уйдет час Вашего времени, без копии — 4 часа. Что предпочтете ?
Просто из своего опыта построения числодробилок.
— Организуется конвейер.
— Массивы выделяются предварительно и в процессе вычислений затем не выделяются и не освобождаются.
— При межпоточной передаче работает что-то вроде круговой очереди указателей на такие массивы.
— Перекладывать данные при расчётах в новое место или делать их inplace зависит сугубо от характера вычислений и ни от чего более. Например, преобразование блока сигнала, представленного int32, во float32 можно и нужно делать только inplace, иначе попахивает профнепригодностью.
— Рассуждения Синклера про "гарантии" и прочее можно смело в dev/null, бо инкапсуляцию данных модулей/объектов еще никто не отменял. Способы владения (и передачи владения) блоков данных подчиняются исключительно и только алгоритмам, их обрабатывающим, а не внутренним взглядам и жизненным принципам особо упрямых коллег. ))