C++ 0x атомарная шаблонная реализация

Ваша обработка массива сбора неэффективна. Подумайте о том, чтобы прочитать весь реестр клиентов в массив с помощью MyArray = Range.Value. Затем подготовьте выходной массив в памяти и запишите его на лист после того, как все циклы будут выполнены, за один раз, с TargetRange.Value = collect.

Избегайте вставки строк. Что не так с существующим? Если вы готовите все данные в массиве для вставки на лист, пустые элементы массива будут создавать пустые ячейки листа. Таким образом можно избежать вставки, и все, что вам нужно сделать, это отформатировать.

Существует время для каждого доступа к рабочему листу, будь то чтение или запись. Даже для форматирования попробуйте создать диапазоны, которые обрабатываются одинаково. Избегайте доступа к листу в виде петель.

9
задан Jacek Ławrynowicz 7 February 2009 в 14:16
поделиться

1 ответ

Можно найти дискуссии об этой реализации функции в повышении там: http://lists.boost.org/Archives/boost/2008/11/144803.php

> Может N2427 - C++ Атомарные Типы и Операции быть реализованным

> без справки компилятора?

Нет.

Они не должны быть intrinsics, если можно записать встроенный ассемблер (или отдельно скомпилированный ассемблер в этом отношении) затем, можно записать сами операции непосредственно. Вы могли бы даже смочь использовать простой C++ (например, просто присвоение для загрузки или хранилища). Причина Вам нужна поддержка компилятора, предотвращает несоответствующую оптимизацию: атомарные операции не могут быть оптимизированы и обычно не должны переупорядочиваться прежде или после никаких других операций. Это означает, что даже неатомарные хранилища, выполненные перед атомарным хранилищем, должны быть завершены, и не могут кэшироваться в регистре (например). Кроме того, загрузки, которые происходят после атомарной операции, не могут быть подняты перед атомарным op. На некоторых компиляторах, просто с помощью встроенного ассемблера достаточно. На других, вызывая внешнюю функцию достаточно. MSVC обеспечивает _ReadWriteBarrier () для обеспечения упорядочивания компилятора. Для других компиляторов нужны другие флаги.

14
ответ дан 4 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: