-
구글링을 하면 나오는 union에 관한 얘기 중에 다른 변수에 값을 넣으면 이전에 넣은 데이터가 지워진다는 이야기가 나옵니다. 반은 맞고 반은 틀렸습니다.
struct Test { union { int i; struct { unsigned int t1 : 1; unsigned int t2 : 1; unsigned int t3 : 1; unsigned int t4 : 1; unsigned int t5 : 1; unsigned int t6 : 1; } s; } u; };
Test 객체를 만들어서 크기를 보면 4바이트가 나옵니다. union 안에 있는 구조체는 멤버 변수는 1비트만 갖게 했기 때문에 멤버 변수가 32개가 넘지 않는 한 4바이트가 나옵니다.
union은 메모리를 공유하기 때문에 마지막으로 덮어씌운 데이터로 갱신되지만 건드리지 않은 비트는 그대로 남아 있습니다. t1 ~ t6에 1씩 할당하고 i에 1024를 넣으면 비트는 다음과 같은 상태가 됩니다.
int main() { Test test; cout << sizeof test << endl; test.u.i = 1024; test.u.s.t1 = 1; test.u.s.t2 = 1; test.u.s.t3 = 1; test.u.s.t4 = 1; test.u.s.t5 = 1; test.u.s.t6 = 1; cout << bitset<12>(test.u.i) << endl; }
'개발 > C·C++' 카테고리의 다른 글
객체 생성 시 함수 호출 순서 (0) 2021.12.27 바이트 정렬 (0) 2021.09.24 스마트 포인터 (0) 2021.09.19 스레드 함수를 람다식 안에서 사용할 때 주의할 점 (0) 2021.09.15 split() (0) 2021.09.11