Как я безопасно перезапускаю TortoiseSVN?

Гарантирует ли стандарт такое поведение?

Нет. Стандарт не гарантирует этого.

Или я могу безопасно доверять n == 1 всегда на любой конкретной платформе?

Количество выделений при вводе ограничено сложностью методов контейнеров. Например, для std::map::insert стандарт определяет (из cppreference , только первые 3 перегрузки, вставляя один элемент):

1-3) Логарифмический по размеру контейнер, O (log (размер ())).

blockquote>

Тогда разработчики могут свободно выбирать реализацию, которая удовлетворяет этой спецификации. Часть log(size()) состоит в том, что вам нужно найти место, куда вставить и выделить место для фиксированного числа элементов - это просто постоянный вклад в сложность. Реализация может выбрать выделение пространства для двух элементов при каждом втором вызове. 2 так же постоянна, как и 1. Однако не должно быть слишком сложно найти случаи, когда распределение 1 более эффективно, чем распределение 2 в абсолютном выражении. Более того, std::map и std::set не обязаны хранить свои элементы в смежной памяти.

Следовательно, я бы предположил, что это всегда 1, но у вас нет гарантии. Если вы хотите быть уверенным, вам нужно взглянуть на конкретную реализацию, но тогда вы полагаетесь на детали реализации.

allocate(n) - это не то же самое, что allocate(1) n раз.

A::allocate(n) должен возвращать один указатель, поэтому нетрудно выделить несмежную память. Однако не требуется, чтобы этот указатель был T*. Вместо этого A::allocate(n) возвращает A::pointer. Это может быть любой тип, если он удовлетворяет NullablePointer, LegacyRandomAccessIterator и LegacyContiguousIterator.

cppreference упоминает boost :: interprocess :: offset_ptr в качестве примера того, как распределить сегментированную память. Возможно, вы захотите взглянуть на это. Вот полная цитата:

Необычные указатели

Когда указатель типа элемента не является необработанным указателем, его обычно называют «причудливым указателем». Такие указатели были введены для поддержки архитектуры сегментированной памяти и сегодня используются для доступа к объектам, расположенным в адресных пространствах, которые отличаются от однородного виртуального адресного пространства, к которому обращаются необработанные указатели. Примером причудливого указателя является сопоставление, не зависящее от адреса, указатель boost :: interprocess :: offset_ptr, который позволяет выделять структуры данных на основе узлов, такие как std :: set, в разделяемой памяти и отображенные в память файлы, сопоставленные по разным адресам каждый процесс. Необычные указатели могут использоваться независимо от предоставившего их распределителя через шаблон класса std :: pointer_traits.

BLOCKQUOTE>

14
задан CVertex 10 November 2008 в 01:17
поделиться

2 ответа

При уничтожении TSVNCache Вы не должны вручную перезапускать его, расширение оболочки сделает в тот следующий раз, когда ему нужен он.

При попытке перезапустить расширение оболочки, Вы могли бы достигнуть его путем уничтожения всех процессов Explorer.exe и чего-либо еще, что закончилось с незавершенным TSVN. Это - в основном любое приложение, которое спросило оболочку о значках или использовало общий файл / диалоговые окна каталога. Вы, возможно, должны использовать что-то как "Проводник Процесса" (sysinternals) для нахождения, каким процессам загрузили TSVN DLLs.

17
ответ дан 1 December 2019 в 08:53
поделиться

Фоновый процесс, который наблюдает Вашу файловую систему за SVN, связал файлы, и папки TSVNCache.exe. Можно уничтожить тот процесс и запустить его снова или просто перезагрузить машину :)

3
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

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