2011-11-02 2 views
0

나는 노동 조합을위한 메모리 주소 alingment에 대해 약간 혼란 스럽다. , 전 코드를 작성하는 동안주소 Union을위한 정렬

typedef union { 
       char state[x]; 
       char encode[4]; 
       int index; 
} Location; 

우리는 여러 정렬 규칙을 사용

int  4 bit alignment 
double 4 bit for linux 
char * 4 bit for linux 

이러한 조건에 대한 "그 노동 조합이 정렬되는 방식"; 플랫폼 리눅스 조립의 x86 64 비트

x < 4  ? 
    x = 4  ? 
    x > 4  ? 

하면

참고 : 당신은 더 나은 의견이있는 경우 그 질문에

답변

1

을 개선 할 때 주시기 내가 무엇을 실제 문제에 관해서는 조금 혼란 스러워요 :-)

그러나 노동 조합이 어떻게 정렬 될 것인지 묻는다면 노동 조합은 여기서 두 가지 관련 규칙을 따라야합니다.

  1. 모든 항목은 공용품의 처음부터 시작해야합니다.
  2. 전체적으로 유니온은 가장 엄격한 구성 요소의 정렬을 가져야합니다. 환언

, 그것은 int가 구동력 단일 char의 배향 한 경우 x의 값은 여기 무관 배향

면에서 여기했을 수 있습니다. 배열이 정렬 될 필요는 없으며, 각 요소가 정렬되어야합니다.

+0

감사합니다. 질문을 추가하십시오. –

+0

@fatai : 더 이상 혼동하지 않지만 내 대답은 같습니다. 'x'는 정렬 될 필요가있는 _arrays_가 아니기 때문에 정렬에 아무런 영향을 미치지 않습니다. 64 비트 int는 8 비트'char' (또는 10 억 개의 8 비트'char' 요소의 배열)보다 더 엄격한 정렬 요구 사항을 갖습니다. – paxdiablo