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의 거듭제곱이어야 해요. ptr이 T 타입(각 수준의 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)이에요.
이 페이지는 아직 예제가 없는 미완성 상태예요.