Вы можете найти его ограничения в разделе OVS limit doc :
Предел потоков ядра:
Потоки ядра ограничены только памятью, доступной ядру , Производительность снизится за пределы 1 048 576 потоков ядра на мост с 32-разрядным ядром, за пределы 262 144 с 64-разрядным ядром
blockquote>Предел потоков OpenFlow:
Потоки OpenFlow ограничено только доступной памятью. Производительность линейна по числу уникальных шаблонов подстановочных знаков.
BLOCKQUOTE>
Microsoft предоставляет альтернативы memcpy и wmemcpy, которые проверяют их параметры.
memcpy_s говорит: «Хм, прежде чем я начну читать с этого адреса, позвольте мне лично убедиться, что это не нулевой указатель; и прежде, чем я напишу по этому адресу, я проведу этот тест еще раз. Я также сравню количество байтов, которые меня попросили скопировать, с заявленным размером места назначения; если и только если вызов проходит все эти тесты, я должен выполнить копию ».
memcpy говорит:« Заполнить адресат в регистр, заполнить источник в регистр, заполнить счетчик в регистре, выполнить MOVSB или MOVSW ». (Пример для геогородов, недолго для этого мира: http://www.geocities.com/siliconvalley/park/3230/x86asm/asml1013.html )
Изменить: В качестве примера подхода Your Wish Is My Command к memcpy, рассмотрим OpenSolaris, где memcpy (для некоторых конфигураций) определяется в терминах bcopy и bcopy (для некоторых конфигураций) ...
void
33 bcopy(from, to, count)
34 #ifdef vax
35 unsigned char *from, *to;
36 int count;
37 {
38
39 asm(" movc3 12(ap),*4(ap),*8(ap)");
40 }
41 #else
42 #ifdef u3b /* movblkb only works with register args */
43 unsigned char *from, *to;
44 int count;
45 {
46 asm(" movblkb %r6, %r8, %r7");
47 }
48 #else
49 unsigned char *from, *to;
50 int count;
51 {
52 while ((count--) > 0)
53 *to++ = *from++;
54 }
55 #endif
Редактировать: Спасибо, Милли Смит! Вот что было на странице geocities, на которую я ссылался выше:
MOVS
Инструкция movs используется для копирования исходной строки в место назначения (да, копировать, не перемещать). У этой инструкции есть два варианта: movsb и movsw. Команда movsb («перемещение байта строки») перемещает по одному байту за раз, тогда как movsw перемещает два байта за раз.
Поскольку мы хотим перемещать несколько байтов за раз, эти инструкции movs выполняются пакетами с использованием rep префикс. Количество перемещений определяется регистром CX. См. Пример ниже:
:
lds si, [src]
les di, [dest]
cld
mov cx, 100
rep movsb
:
В этом примере будет скопировано 100 байт из src в dest. Если вы замените movsb на movsw, вместо этого вы скопируете 200 байт. Если вы удалите префикс rep, регистр CX не будет иметь никакого эффекта. Вы переместите один байт (если это movsb, или 2 байта, если это movsw).
Бензопила при правильном использовании безопасна. То же самое и с memcpy (). Но в обоих случаях, если вы ударите гвоздь, он может полететь и поранить вас.
Короче говоря, memcpy () требуется для низкоуровневых вычислений и никуда не денется, но для программирования высокого уровня вы этого не сделаете. Мне это не нужно.
В самой статье описана более безопасная альтернатива: memcpy_s, которая требует от вас укажите максимальную длину мишени. Когда это число предоставляется независимо от количества байтов для копирования, оно действует как барьер для предотвращения переполнения буфера. Конечно, вы можете злоупотребить этим, присвоив обоим один и тот же номер.
Я думаю, что C должен оставить программисту возможность стрелять собственной ногой. ручное управление памятью безопасно, если все сделано правильно.
Вместо этого вы должны использовать memcpy_s (). Такие же версии _s существуют для множества других функций, считающихся незащищенными.
Делает ли запрет memcpy () в моем коде лучшим программистом, а мое приложение - более безопасным или просто несовместимым? Я не уверен, действительно ли MS хочет что-то изменить или просто сделать новый код C несовместимым с другими компиляторами. Кстати. MS делает этот трюк для многих функций, и это довольно раздражает. strcpy -> strcpy_s -> StringCchCopy.
Не беспокойтесь. Альтернативы Microsoft не намного лучше. Основная ценность заключается в том, что из-за этого ваш код становится недоступным для Linux. Microsoft зарабатывает гораздо больше денег на ОС, которую они продают вашим клиентам, чем на копии Visual C ++, которую вы купили.
Вы сами сказали: «Microsoft запрещает функцию memcpy () в своих магазинах безопасного программирования , я понимаю уязвимости, присущие функции , "
memcpy () и множество других стандартных функций, как известно, вызывают уязвимости, так почему же в магазине безопасного программирования разрешено их использование, если улучшение (хотя и постепенное) тривиально?
Вне всяких сомнений, в их усилиях по повышению безопасности своих продуктов, обзоры кода ясно показали, что эти функции были ответственны за значительную часть уязвимостей, переполнения буфера и т. Д. Вместо того, чтобы делать оболочки только для внутреннего использования, они ввели их в стандартная библиотека и добавлено предупреждение компилятора (не запрет) для всеобщего блага.