memory_assume_aligned

memory_assume_aligned (std::assume_aligned)

<memory> 헤더에 정의되어 있어요. ptr이 가리키는 객체가 적어도 N만큼 정렬되어 있음을 구현에 알려줘요. 구현은 이 정보로 더 효율적인 코드를 생성할 수 있어요. C++20부터 도입됐어요.

출처: cppreference

본문

template< std::size_t N, class T >
constexpr T* assume_aligned( T* ptr );

(C++20부터)

ptr이 가리키는 객체가 적어도 N만큼 정렬되어 있음을 구현에 알려줘요. 구현은 이 정보로 더 효율적인 코드를 만들 수 있지만, 객체가 assume_aligned의 반환값을 통해 접근될 때만 그 가정을 쓸 수 있어요.

N은 2의 거듭제곱이어야 해요. ptrT 타입(각 수준의 cv-한정은 무시)의 객체를 가리키지 않거나, 객체의 정렬이 적어도 N이 아니면 동작은 미정의예요.

반환값

ptr.

예외

아무 것도 던지지 않아요.

주의 (Notes)

assume_aligned가 켜는 최적화의 이점을 얻으려면 그 반환값으로 객체에 접근하는 것이 중요해요.

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // 정렬 가정의 이점을 얻으려면 p1 을 사용해요 (p 가 아님).
    // 다만 p 가 정렬되지 않았다면 p1 을 쓰든 말든 UB.
}

프로그램이 정렬 가정이 실제로 성립함을 보장하는 것은 프로그래머 몫이에요. assume_aligned 호출이 이걸 컴파일러가 검증·강제하게 만들지는 않아요.

기능 테스트 매크로는 __cpp_lib_assume_aligned로, 값은 201811L(C++20)이에요.

이 페이지는 아직 예제가 없는 미완성 상태예요.

더 알아보기 (Learn more)

cppreference