Практическое применение 'stackalloc' ключевого слова

Вы можете использовать это регулярное выражение, чтобы захватить все предложения.

[A-Z][^.]+\.?

Демо

Попробуйте этот код PHP,

$s = "Hi, my name is Bob, I am 20 years old and like cats. Hi, my name is Dylan, I am 25 years old and like dogs. Hi, my name is Tambourine, I am 30 years old and like turtles";
preg_match_all('/[A-Z][^.]+\.?/', $s, $matches);
print_r($matches);

Prints,

Array
(
    [0] => Array
        (
            [0] => Hi, my name is Bob, I am 20 years old and like cats.
            [1] => Hi, my name is Dylan, I am 25 years old and like dogs.
            [2] => Hi, my name is Tambourine, I am 30 years old and like turtles
        )

)

Если вы кодируете его в Javascript, вот демонстрация в JS,

var s = "Hi, my name is Bob, I am 20 years old and like cats. Hi, my name is Dylan, I am 25 years old and like dogs. Hi, my name is Tambourine, I am 30 years old and like turtles"
console.log(s.match(/[A-Z][^.]+\.?/g))

121
задан Bill the Lizard 16 August 2010 в 15:40
поделиться

3 ответа

Единственная причина использования stackalloc - это производительность (либо для вычислений, либо для взаимодействия). Используя stackalloc вместо выделенного массива кучи, вы создаете меньшее давление GC (GC должен работать меньше), вам не нужно закреплять массивы вниз, их выделять быстрее, чем массив heap, и он автоматически освобождается при выходе из метода (выделенные в куче массивы освобождаются только при запуске GC). Также, используя stackalloc вместо собственного распределителя (например, malloc или эквивалент .Net), вы также получаете скорость и автоматическое освобождение при выходе из области.

Мудрость производительности, если вы используете stackalloc вы значительно увеличиваете вероятность попадания кэша в процессор из-за локальности данных.

132
ответ дан 24 November 2019 в 01:32
поделиться

Я использовал stackalloc для выделения буферов для [DSP] работы в реальном времени. Это был очень специфический случай, когда производительность должна была быть максимально последовательной. Обратите внимание, что есть разница между согласованностью и общей пропускной способностью - в этом случае я не был обеспокоен слишком медленным распределением кучи, просто недетерминированностью сборки мусора в этой точке программы. Я бы не использовал его в 99% случаев.

35
ответ дан 24 November 2019 в 01:32
поделиться

stackalloc относится только к небезопасному коду. Для управляемого кода вы не можете решить, где разместить данные. Типы значений распределяются в стеке по умолчанию (если только они не являются частью ссылочного типа, в этом случае они размещаются в куче). Ссылочные типы выделяются в куче.

Размер стека по умолчанию для простого ванильного приложения .NET составляет 1 МБ, но вы можете изменить это в заголовке PE. Если вы запускаете потоки явно, вы также можете установить другой размер через перегрузку конструктора. Для приложений ASP.NET размер стека по умолчанию составляет всего 256 КБ, что следует учитывать при переключении между двумя средами.

24
ответ дан 24 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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