Namespaces
Variants

std:: assume_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
헤더 파일에 정의됨 <memory>
template < std:: size_t N, class T >
constexpr T * assume_aligned ( T * ptr ) ;
(C++20부터)

구현체에게 ptr 가 가리키는 객체가 최소 N 에 정렬되어 있음을 알립니다. 구현체는 이 정보를 사용하여 더 효율적인 코드를 생성할 수 있지만, 이 가정은 객체가 assume_aligned 의 반환값을 통해 접근될 때만 적용될 수 있습니다.

N 은 2의 거듭제곱이어야 합니다. ptr T 타입의 객체를 가리키지 않거나(모든 수준의 cv-qualification은 무시), 객체의 정렬이 최소 N 이상이 아닌 경우 동작은 정의되지 않습니다.

목차

반환값

ptr .

예외

아무것도 던지지 않습니다.

참고 사항

프로그램이 assume_aligned 에 의해 활성화된 최적화의 이점을 얻도록 하려면, 해당 객체를 반환값을 통해 접근하는 것이 중요합니다:

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // p1을 사용하고 p를 사용하지 않음으로써 정렬 가정의 이점을 보장합니다.
    // 그러나 p가 정렬되지 않은 경우 p1의 사용 여부와 관계없이 프로그램은 정의되지 않은 동작을 가집니다.
}

프로그램은 정렬 가정이 실제로 유지되도록 보장해야 합니다. assume_aligned 호출은 컴파일러가 이를 검증하거나 강제하도록 하지 않습니다.

기능 테스트 매크로 표준 기능
__cpp_lib_assume_aligned 201811L (C++20) std::assume_aligned

예제

참고 항목

alignof (C++11) 타입의 정렬 요구 사항을 조회함
(연산자)
alignas (C++11) 변수의 저장 공간이 특정 크기로 정렬되도록 지정함
(지시자)
(since C++11) (deprecated in C++23)
주어진 크기의 타입들을 위한 초기화되지 않은 저장 공간으로 사용하기 적합한 타입을 정의함
(클래스 템플릿)
(C++11)
버퍼에서 포인터를 정렬함
(함수)
[[ assume ( expression )]]
(C++23)
해당 표현식 이 특정 지점에서 항상 true 로 평가됨을 지정함
(속성 지정자)