2010-10-26 5 views
5

gcc 4.5에서 함수를 호출 할 때 스택은 16 바이트 경계에 정렬되어야합니다 (이전 버전은 4 바이트 정렬 만 필요함).스택 경계가 더 작 으면 어떻게 되나요?

32 비트 컴퓨터에서는 4 바이트가 적당합니다. 16 바이트는 "0xfffffff0, % esp"로 정렬하기 쉽습니다.

그러나 4 바이트 경계보다 훨씬 많은 메모리가 필요할 수 있습니다. 그렇습니까? 간단히 말해, 제 질문은 gcc 4.5가 16 바이트를 기본으로 사용하는 이유입니다. 그것은 가치가 있니?

고맙습니다.

답변

3

최신 프로세서 용 벡터 확장 번호는로드/저장을 위해 16 바이트 정렬이 필요합니다. 일부 아키텍처는 정렬되지 않은로드를 제공하지만 일반적으로 이러한 아키텍처는 상당히 느립니다.

memcpy 및 이와 유사한 낮은 수준의 작업에 대해이 정렬에 대한 몇 가지 이점이 더 엄격하게 정렬 된 원본/대상을 더 자주 접할 수 있습니다.

또한 최근의 gcc 버전에 포함 된 자동 벡터화가 성공할 확률이 거의 높아졌습니다.

관련 문제