new_align_val_t

new_align_val_t (std::align_val_t)

<new> 헤더에 정의되어 있어요. 정렬 요구가 __STDCPP_DEFAULT_NEW_ALIGNMENT__보다 큰 객체에 대해 new·delete 표현식이 선택된 할당/해제 함수에 std::align_val_t 타입 인자로 정렬 요구를 전달할 때 쓰는 타입이에요. C++17부터 도입됐어요.

출처: cppreference

본문

enum class align_val_t : std::size_t {};

(C++17부터)

new-표현식과 delete-표현식 모두, 정렬 요구가 __STDCPP_DEFAULT_NEW_ALIGNMENT__보다 큰 객체를 쓸 때 그 정렬 요구를 std::align_val_t 타입의 인자로 선택된 할당/해제 함수에 전달해요.

주의 (Notes)

정렬(alignof로 얻은 값)은 std::size_t 타입이지만, 이미 std::size_t를 추가 매개변수로 받는 placement 형태의 할당·해제 함수가 쓰이고 있으므로 이 타입을 따로 사용해요.

기능 테스트 매크로는 __cpp_aligned_new로, 값은 201606L(C++17)이에요. 즉 과정렬(over-aligned) 동적 메모리 할당을 지원하는지 나타내요.

// alignas(64) 인 struct 의 new 는 과정렬 오버로드 사용
struct alignas(64) Foo {};
Foo* p = new Foo;   // operator new(std::size_t, std::align_val_t) 호출 가능
delete p;

align_val_t를 쓰면 과정렬 타입의 할당이 기본 최대 정렬을 넘는 경우에도 올바른 정렬로 수행될 수 있어요.

더 알아보기 (Learn more)

cppreference