일반적인 경험 법칙 (Intels 및 AMD의 최적화 매뉴얼에서 직접 확인)은 모든 데이터 유형이 자체 크기로 정렬되어야한다는 것입니다. int32
은 32 비트 경계에 맞추고, int64
은 64 비트 경계에 정렬해야합니다. char는 어디서나 잘 어울립니다.
또 다른 어림짐작은 "컴파일러가 정렬 요구 사항에 대해 말한 것"입니다. 컴파일러가 올바른 패딩과 오프셋을 추가하여 데이터에 효율적으로 액세스 할 수 있기 때문에 걱정할 필요가 없습니다.
유일한 예외는 대부분의 컴파일러에서 수동으로 정렬을해야하는 SIMD 명령어를 사용하는 경우입니다. 정확하면
둘째, 만약 하나는 8 바이트 경계 상에 데이터 구조 부재를 정렬한다. 그러나 나는 사람들이이 프로세서 대신에 4 바이트 정렬 을 사용하는 것을 보았습니다.
어떻게 차이가 나는지 알 수 없습니다. CPU는 이러한 4 바이트를 포함하는 64 비트 블록에 대한 읽기를 단순히 발행 할 수 있습니다. 즉, 요청 된 데이터 이전에 4 바이트가 추가되거나 그 이후에 추가 바이트가 4 바이트가됩니다. 그러나 두 경우 모두 단일 읽기만 필요합니다. 32 비트 폭 데이터의 32 비트 정렬은 64 비트 경계를 넘지 않도록합니다.
이 질문의 의미는 모르겠지만 프로그래밍과 관련하여 어떻게 관련되어 있는지, 그리고 이것이 나를 어떻게 영향을 줄 수 있는지에 대해 흥미가 있습니다. 이 저수준 유형 물건에 대한 기본 소개를 어디에서 읽을 수 있습니까? –
"모든 프로그래머가 메모리에 대해 알아야 할 내용"참조 : http://people.redhat.com/drepper/cpumemory.pdf – Crashworks
"요청 된 읽기는 항상 8의 배수입니다."에서 "데이터가 항상 시작되어야합니다 8 바이트 경계 "? 나는 이들 사이의 논리적 연결을 보지 못했다. 데이터가 8 바이트 경계를 넘지 않는 한, 우리는 훌륭합니다. 그렇죠? – jalf