В настоящее время я пишу некоторые абстракции ввода-вывода для двоичных данных. На данный момент я не уверен, насколько хорошо STL выполняет некоторые из этих задач. Например, у меня есть много вещей, которые я могу закодировать в двоичном формате либо в char *, либо в std :: vector. Сейчас, когда у меня есть объект такого типа, я просто пишу его с помощью ostream :: write () или выполняю std :: copy в массиве в ostream_iterater в потоке. Теперь мне было интересно, что будет делать внутренняя копия.
Из того, что я слышал, STL разрешено оптимизировать все что угодно. Например, в Теории копия двух векторов, хранящих символы с использованием std :: copy, не должна копировать эти символы побайтно, а должна использовать системные примитивы для копирования фрагментов данных, где они доступны. Как это делается внутренне.
Причина, по которой я спрашиваю это, состоит в том, что я сейчас пытаюсь переключить файл в память mmaped вместо std :: ostreams. Это означает, что запись данных char * будет действительно простой, но запись векторов будет побайтовой. Что я должен был бы предусмотреть в своем классе для STL, чтобы оптимизировать копирование (возможно, с использованием memcpy)? Я предполагаю, что мне нужны правильные итераторы, но что им нужно, так что STL будет знать, что он может просто записывать, а не ходить по ним.
Я знаю, что это требует много вещей, о которых я не должен беспокоиться (принцип инкапсуляции, как правило, великая вещь). И, конечно, я знаю правило оптимизации Кнутса, поэтому я забочусь о средствах автоматической оптимизации STL.