2010-12-21 2 views
3

이 유형의 개체를 스택에 만들면이 개체의 메모리가 올바르게 정렬됩니다.메모리 정렬 문제가있는 유니온

union my_union 
{ 
    int value; 
    char bytes[4]; 
}; 

우리는 스택 [4] 문자 바이트를 만든 다음 그것을 정렬에 문제가있을 수 있습니다 정수로 캐스팅해야 할 경우. 우리는 힙으로 생성하여이 문제를 피할 수 있지만, 조합 객체에 대한 보장은 있습니까? 논리적으로는 있어야하지만, 확인하고 싶습니다.

감사합니다.

답변

3

글쎄, 그게 무슨 뜻인지에 달려 있습니다.

뜻 경우 내가 서로 독립적으로 사용할 수 있도록

두 노조의 intchar[4] 회원이 제대로 정렬됩니까?

그렇다. 당신이 의미하는 경우 : 나는 char[4] 통해 int의 개별 바이트에 액세스 할 수 있도록

intchar[4] 회원은 동일한 양의 공간을 차지하기 위해 정렬이 보장됩니까?

다음. 이는 sizeof(int)이 4가 될 수 있다고 보장하지 않기 때문입니다. int이 2 바이트 인 경우 char 요소 중 (표준이 지정되지 않음)의 두 요소를 알고있는 사람은 누구입니까? 당신이 int의 개별 바이트에 액세스하기 위해 노동 조합을 사용하려면

이 사용 : 각 구성원이 같은 크기

union { 
    int i; 
    char c[sizeof(int)]; 
}; 

때문에, 동일한 공간을 차지 보장하고 있습니다. 이것은 내가 당신이 알고 싶어하는 것이라고 믿는 것이며, 나는 그것에 대답하기를 희망합니다.

+0

오래된 C 코드에서 그들은'c [0]'으로 선언했습니다. 그런 다음 정상적으로 액세스하십시오. 이것이 C++에서 여전히 유효한지 확실하지 않습니다. –

+0

나는 첫번째를 의미했다. 대답 해줘서 고마워요. – confucius

+0

@ Martin - 아마 그렇지는 않지만'c [1]'도 잘 작동 할 것이라고 확신합니다. –

1

그래, 그렇지 않으면 노동 조합은 전혀 쓸모가 없을 것이다.

+0

동의 함. 그것은 저의 인상 이었지만, 확인하는 것이 더 낫습니다. 감사합니다 :) – confucius