2016-11-04 1 views
-2

나는 CPP의 STL 코드를 읽고 뭔가를 알아 낸다.언제 그리고 왜이 함수는 다른 것을 반환 할 것인가

static size_type __align_it(size_type __new_size) _NOEXCEPT 

    {return __new_size + (__bits_per_word-1) & ~((size_type)__bits_per_word-1);}; 

말하자면 size_type size_t와, 그리고 __bits_per_word은 다음과 같습니다 : 그리고 벡터 헤더 파일에서 함수를 도달하는 기능입니다

static const unsigned __bits_per_word = static_cast<unsigned>(sizeof(__storage_type) * CHAR_BIT); 

제 컴파일러는 그 소리하고 버전은 그 소리-800.x 같다 .더블 엑스.

제 질문은 언제, 왜 __align_it이 __new_size가 아닌 다른 것을 반환하는지입니다.

+0

다양한 값을 __align_it()에 전달하는 샘플 코드를 작성하고 반환되는 샘플 코드를 표시하는 이유는 무엇입니까? 그것은 아주 분명해야합니다. –

+0

좋아요, 내가 잊어 버린 것처럼 보입니다 +가 & 연산자 앞에 있기 때문에 정렬됩니다. 내 잘못이야. –

답변

1

__new_size__bits_per_word으로 나눌 수없는 경우 __new_size과 다른 값을 반환합니다. 즉,이 함수는 __new_size__bits_per_word의 가장 가까운 배수로 반올림하는 데 사용됩니다.

이것은 컴파일러가 자동으로 결정하지 않는 경우 구조체 멤버를 올바르게 정렬하는 데 사용되는 매우 일반적인 함수입니다. 예를 들어 우리가 char 배열을 가지고 있지만 액세스 최적화 때문에 unsigned 필드와 동일한 주소로 정렬하려고합니다.

관련 문제