memalign 예제

By 2019. augusztus 2. Egyéb kategória No Comments

POSIX는 posix_memalign()에서 얻은 메모리를 free(3)를 사용하여 해제할 수 있어야 합니다. 일부 시스템은 memalign() 또는 valloc()으로 할당된 메모리를 회수할 수 있는 방법을 제공하지 않습니다(malloc(3)에서 가져온 포인터를 free(3)로만 전달할 수 있기 때문에 예를 들어 memalign()은 malloc(3)을 호출한 다음 얻은 값을 정렬합니다. glibc 구현을 사용하면 이러한 함수에서 얻은 메모리를 free(3)로 회수할 수 있습니다. 많은 시스템에서 정렬 제한이 있습니다, 예를 들어, 직접 블록 장치 I/O에 사용되는 버퍼에 POSIX는 경로 conf (경로,_PC_REC_XFER_ALIGN) 정렬이 필요한 것을 알려주는 호출을 지정합니다. 이제 posix_memalign()을 사용하여 이 요구 사항을 충족할 수 있습니다. 다음 예제에서는 응용 프로그램이 posix_memalign()을 호출하기 전에 * memptr을 null 포인터로 설정하여 오류에 대한 일관된 동작을 얻을 수 있는 방법을 보여 주었습니다. 임베디드 리소스 git 리포지토리에서 정렬된 malloc 예제를 찾을 수 있습니다. 위의 예와 같이 오프셋 크기를 포함하여 주소를 정렬합니다. 포인터가 이미 정렬된 최상의 시나리오에서도 이 API를 일반적인 방식으로 처리해야 합니다. 오프셋 스토리지는 항상 필요합니다. “구현에 의해 지원되는” 요구 사항의 예로 POSIX 함수 posix_memalign은 두 개의 힘과 sizeof(void *)의 배수인 모든 정렬을 허용하며, aligned_alloc의 POSIX 기반 구현은 이 요구 사항을 상속합니다.

그것을 구축하려면, 단순히 최상위 수준에서 확인을 실행, 또는 예제 / c / 실행 메이크 또는 malloc_aligned합니다. SYNOPSIS에서는 를 더 이상 포함할 필요가 없습니다. 정렬된 할당에 대해 별도의 무료 API가 필요한 이유는 무엇입니까? 우리는 오프셋을 저장하고 malloc에서 반환하는 주소와 다른 주소를 반환할 것입니다. 해당 메모리에서 무료로 호출하기 전에 정렬된 포인터에서 malloc에서 반환된 원래 포인터로 변환해야 합니다. posix_memalign()는 성공 시 0을 반환하거나 실패시 다음 섹션에 나열된 오류 값 중 하나를 반환합니다. errno는 설정되지 않았습니다. 새 정렬된 주소가 있으면 정렬된 위치에서 메모리를 뒤로 이동하여 오프셋을 저장합니다. 이제 우리는 항상 진정한 오프셋을 찾기 위해 정렬 된 포인터에서 한 위치를 다시 보아야한다는 것을 알고 있습니다.

완전히 무료 소프트웨어인 GNU(보다 정확하게는 GNU/Linux 배포판)의 설치 가능한 버전을 권장합니다.