2017-09-15
man-pages-ru
Russian man pages from the Linux Documentation Project
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
ИМЯ
memcpy - копирует участок памяти
ОБЗОР
#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
ОПИСАНИЕ
Функция memcpy() копирует n байт из участка памяти src в участок памяти dest. Адреса участков памяти не должны перекрываться друг другом. Если это неизбежно, используйте memmove(3).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция memcpy() возвращает указатель на dest.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
memcpy() | Безвредность в нитях | MT-Safe |
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
ЗАМЕЧАНИЯ
Несоблюдение требования не перекрытия областей памяти является источником серьёзных ошибок (в стандартах POSIX и C явно указано, что выполнение memcpy() над перекрывающимися областями приводит к непредсказуемому поведению). Что особенно важно, в glibc 2.13 для оптимизации производительности memcpy() на некоторых платформах (включая x86-64) изменён порядок копирования байт из src в dest.
Это изменение привело к поломкам многих приложений, которые выполняли копирование перекрывающихся областей. В предыдущей реализации порядок, в котором копировались байты, случайно скрывал ошибку, который выявилась при изменении порядка копирования. В glibc 2.14 был добавлен символ версии для того, чтобы старые двоичные файлы (т.е., скомпонованные с версиями glibc до 2.14) вызывали реализацию memcpy(), которая безопасно обрабатывает случай перекрывающихся буферов (предоставляя «старую» реализацию memcpy(), которая была просто ещё одним именем memmove(3)).