Работа с небезопасным кодом в C#

Язык C# поддерживает указатели, однако несколько ограниченно. Ограниченность заключается в том, что применение указателей не поощряют, поскольку справедливо считается, что это может повлиять на надежность как кода, так и среды выполнения в целом.
Указатель - это переменная, содержащая в себе адрес памяти, в которой…
Статья
16 8 803
25
uranus, быстрее чем функции стандартной библиотеки можно добиться и не прибегая к небезопасному коду (написать собственную реализацию), тут о другом речь.
8
Реально же практическое применение я вижу в двух вариантах:
Если не ошибаюсь, на хабре доказывали, что таким способом можно добиться большей скорости, чем у аналогичных функций стандартной библиотеки. Только не кидайте камнями, может, я не так понял просто.
38
Или foreach, вообще внутри всё запаковано
25
Msey, плохой случай. Надо писать так, чтобы проверки границ в сейф коде убирались оптимизатором.
То есть допустим в случае
//a - некоторый массив
for(int i = 0; i < a.Length; i++)
проверки границ не будет. И разницы производительности с небезопасным вариантом тоже. Потому что оптимизатор умный.
Лезть ради этого в небезопасный контекст - крайне сомнительное занятие, нужно просто правильно писать в безопасном.
29
Самый частый случай, который встречался мне на практике - это более шустрые операции с массивами и строками за счет отсутствия проверки их границ.
25
Забыл написать для чего это вообще надо. Для начала использования небезопасного кода нужно стараться избегать (помните что 95% дырок безопасности в истории это вина программиста, прозевавшего проверки в неуправляемом коде). Реально же практическое применение я вижу в двух вариантах:
  1. Если в проекте используется неуправляемая библиотека. И то очень специфически, если у вас структуры данных прибиты гвоздями. В большинстве же случаев можно обойтись маршалингом в безопасным контексте.
  2. Вы кулхацкер, который по каким-то причинам захотел использовать именно шарп. Тогда думаю вы в этой статье и не нуждаетесь. Хотя кстати я могу привести личные примеры такого применения )
29
BrEd Pitt: по-разному бывает. Часть напишу сам, часть возьму из одного источника, часть из мсдн.
Первые статьи вообще полностью сам писал, опираясь изредка на оф. документацию, чтобы лишний раз не сморозить дезинформирующую отсебятину.
19
Msey, это "записки по своему опыту" или из книги какой? Читается легко и плавно, словом, тутор классный.
Итак, я хотел разбить регуляркой такую сроку:
aaaaa bbb "ccc ссс"
На такой массив:
[0] = aaaaa 
[1] = bbb 
[2] = ccc ссс
Когда-то давно я уже задавал такой вопрос, на что мне ответили таким вот паттерном:
[^\s"']+|"([^"]*)"|'([^']*)'
И все бы хорошо, но теперь мне понадобилось сохранять…
Вопрос
9 2 704
20
Попробуйте такую строку
new Regex(@"[^\s""']+|""([^""]*)""|'([^']*)'")
Загруженные файлы
Принятый ответ