0

이제 C++에는 std :: align_val_t 매개 변수가있는 몇 가지 추가 및 삭제 연산자가 새로 추가되었으므로 그 값은 무엇입니까?C++ 할당 자의 std :: align_val_t에 대한 올바른 정렬 값은 무엇입니까?

1, 2, 4, 8, ... 등입니까?

값의 상한선이 있습니까?

컴파일러에서 정의 할 수 있습니까?

+1

값이 [alingas'] (http://en.cppreference.com/w/cpp/language/alignas) – StoryTeller

+0

과 같을 것으로 기대합니다. @StoryTeller C++ 표준의 섹션이 있습니까? 그들은 alignas와 동일해야한다고 말했습니까? 당신이 그 (것)들이 동일 할 것이라는 점을 무엇이 예상합니까? – LincolnMan

+0

글쎄, 비슷한 목적, 하나. – StoryTeller

답변

1

std::align_val_t이며 제약 조건은 언어 지원 헤더 <new>의 개요에 지정되어 있습니다. 하나 [new.delete]를 읽는 경우에 따라서는 다음 말한다 : 달리 규정 한 경우를 제외하고

, 의 규정은 [basic.stc.dynamic] new 연산자와 운영자 삭제의 라이브러리 버전에 적용됩니다. 이 함수의 에 전달 된 정렬 인수의 값이 유효한 정렬 값이 아니면 동작은 으로 정의되지 않습니다.

선형

이 형 표준 : : size_t로의 값으로 표현된다 :

그래서 당신은 유효한 정렬의 정의가 [basic.align]/4에서 주어진 유효한 값을 전달해야합니다. 유효한 정렬은 기본 유형에 대한 표현식의 alignof 반환 값과 추가 구현 정의 값 집합을 포함하며 비어있을 수 있습니다. 모든 정렬 값은 의 음수가 아닌 2의 누승이어야합니다.

그렇기 때문에 구현에 명시 적으로 허용되는 값과 2의 제곱 수를 더하면됩니다. 위의 std::size_t에 대한 언급은 걱정하지 마십시오.

enum class align_val_t : size_t {}; 

이 또한 본질적으로 std::numeric_limits<std::size_t>::max()에 대해 질문 상한을 의미한다 : std::align_val_t은 단순히 기본 유형으로 std::size_t에 열거 클래스입니다. 물론 당신의 구현은 더 낮은 것을 강제 할 수 있습니다.

+0

감사합니다. 그것은 그것이 좋은만큼 좋습니다. 제 질문의 다른 부분에 대답 할 수 있습니까? 지원되는 정렬의 상위 값은 무엇입니까? – LincolnMan

+0

@LincolnMan - 유일한 바인딩은'std :: numeric_limits :: max()'인 것 같습니다. – StoryTeller