memalign 예제

POSIX는 posix_memalign()에서 얻은 메모리를 free(3)를 사용하여 해제할 수 있어야 합니다. 일부 시스템은 memalign() 또는 valloc()으로 할당된 메모리를 회수할 수 있는 방법을 제공하지 않습니다(malloc(3)에서 가져온 포인터를 free(3)로만 전달할 수 있기 때문에 예를 들어 memalign()은 malloc(3)을 호출한 다음 얻은 값을 정렬합니다. glibc 구현을 사용하면 이러한 함수에서 얻은 메모리를 free(3)로 회수할 수 있습니다. 위의 예와 같이 오프셋 크기를 포함하여 주소를 정렬합니다. 포인터가 이미 정렬된 최상의 시나리오에서도 이 API를 일반적인 방식으로 처리해야 합니다. 오프셋 스토리지는 항상 필요합니다. 그것을 구축하려면, 단순히 최상위 수준에서 확인을 실행, 또는 예제 / c / 실행 메이크 또는 malloc_aligned합니다. 임베디드 리소스 git 리포지토리에서 정렬된 malloc 예제를 찾을 수 있습니다. 많은 시스템에서 정렬 제한이 있습니다, 예를 들어, 직접 블록 장치 I/O에 사용되는 버퍼에 POSIX는 경로 conf (경로,_PC_REC_XFER_ALIGN) 정렬이 필요한 것을 알려주는 호출을 지정합니다. 이제 posix_memalign()을 사용하여 이 요구 사항을 충족할 수 있습니다.

다음 예제에서는 응용 프로그램이 posix_memalign()을 호출하기 전에 * memptr을 null 포인터로 설정하여 오류에 대한 일관된 동작을 얻을 수 있는 방법을 보여 주었습니다. “구현에 의해 지원되는” 요구 사항의 예로 POSIX 함수 posix_memalign은 두 개의 힘과 sizeof(void *)의 배수인 모든 정렬을 허용하며, aligned_alloc의 POSIX 기반 구현은 이 요구 사항을 상속합니다. “자유 소프트웨어 재단(FSF)은 컴퓨터 사용자의 자유를 증진하는 전 세계적인 사명을 가진 비영리 단체입니다. 우리는 모든 소프트웨어 사용자의 권리를 보호합니다.” 완전히 무료 소프트웨어인 GNU(보다 정확하게는 GNU/Linux 배포판)의 설치 가능한 버전을 권장합니다. GNU에 대한 자세한 내용은 아래와 같습니다. posix_memalign() 함수는 자문 정보 옵션의 일부이며 모든 구현에서 제공할 필요는 없습니다. 이제 높은 수준의 전략을 수립되었으므로 정렬된 malloc 구현에 대한 호출을 프로토타입으로 프로토렛해 보겠습니다. memalign을 미러링, 우리는있을 것이다 : 기술 및 네트워크 사용의 발전은 1983 년보다 지금 이러한 자유를 더욱 중요하게만들었습니다. 함수 memalign(), valloc(및 pvalloc())는 모든 Linux libc 라이브러리에서 사용할 수 있습니다.