Windows очень хорошо.
Солярис является замечательной средой разработки Java также (мне нравится он лучше, чем Windows, но по субъективным причинам), но если Вы не развертываетесь на нем, на это не могло бы стоить переключаться.
Linux является немного неуклюжим для разработки Java, но выполнимым.
единственным, который я не могу рекомендовать, является Mac, потому что они находятся всегда до сих пор позади на версии доступного Java (Не обеспеченный Sun, Apple делает их собственное).
С memcpy
место назначения вообще не может перекрывать источник. С memmove
это возможно. Это означает, что memmove
может быть немного медленнее, чем memcpy
, поскольку он не может делать те же предположения.
Например, memcpy
может всегда копировать адреса из снизу вверх. Если пункт назначения перекрывается после источника, это означает, что некоторые адреса будут перезаписаны перед копированием. memmove
обнаружит это и скопирует в другом направлении - от высокого к низкому - в этом случае. Однако проверка этого и переключение на другой (возможно, менее эффективный) алгоритм требует времени.
memmove
может обрабатывать перекрывающуюся память, memcpy
не может.
Учтите
char[] str = "foo-bar";
memcpy(&str[3],&str[4],4); //might blow up
Очевидно, что источник и место назначения теперь перекрываются, мы перезаписываем
«-bar» с «bar». Это неопределенное поведение с использованием memcpy
, если исходный код
и место назначения перекрываются, поэтому в этом случае нам понадобится memmove
.
memmove(&str[3],&str[4],4); //fine
Из справочной страницы memcpy .
Функция memcpy () копирует n байтов из области памяти src в область памяти dest. Области памяти не должны перекрытие. Используйте memmove (3), если память области действительно перекрываются.
Один обрабатывает перекрывающиеся пункты назначения, другой - нет.