Я работаю с al oop с очень большим количеством итераций, и поэтому код внутри него будет весьма критичным по производительности. В какой-то момент в l oop я беру ранее заполненный массив значений типа double и передаю его функции, которую для наших целей мы можем рассматривать просто как функцию суммы, то есть, поскольку ей необходимо l oop для каждого элемента в массиве и объединить его в стоимость.
Затем позже мне нужно взять этот первый массив и снова передать его той же функции, но с измененным последним элементом. Непосредственный подход, который приходит на ум, состоит в том, чтобы скопировать первые n-1 элементов в новый буфер, а затем установить этот последний элемент по мере необходимости. Тем не менее, я чувствую, что в большом l oop это было бы неэффективно, поэтому я думал о способах минимизировать эти издержки.
В частности, мне интересно, можно ли было бы использовать mmap
для отображения первых n-1 элементов нашего второго буфера на первые n-1 элементов исходного буфера, а затем изменить последний, неотображенный элемент по мере необходимости. Это должно быть в состоянии работать с использованием копирования при записи, поэтому, хотя второй буфер выделен, копирование данных фактически не происходит (очевидно, пока второй буфер только читается). Затем я смог бы передать этот второй буфер той же функции, которая будет прозрачно воздействовать на него без какого-либо знания отображения, преобразования адресов до n-1 в первый буфер и n-го адреса, фактически находящегося во втором буфере. ,
Я пытался собрать воедино некоторый код, чтобы посмотреть, можно ли это сделать и работать так, как ожидалось, но сейчас моя главная проблема заключается в том, что mmap
отображает только массивы в дескрипторы файлов, а не массивы в массивы.
Мои вопросы:
- Можно ли добиться такого поведения, используя
mmap
? - Как я могу реализовать это, не используя файловые дескрипторы, и если мне нужно использовать их, как лучше это сделать?
Я также упомяну, что было бы лучше, если бы решение оставалось полностью прозрачным для функции, которой передаются эти буферы, из-за того, как эта база кода предназначен для использования.