54.0 공용체 꼭 알아야 하는건가요?
, Lee Seok님이 작성자주 안쓰인다고 본문에 나와 있어 스킵 하고 싶은데, 거의 안쓰이나요? 그리고 한글로 공용체르고 나오는데 괄호로 영어 이름도 같이 나오면 좋겠는데요.
Re: 54.0 공용체 꼭 알아야 하는건가요?
, 도장_ 관리자님이 작성공용체(union)를 일반적인 코딩에서는 잘 쓰지 않지만,
데이터 공간 효율이 중요한 네트워크, 운영체제 같은 시스템 프로그래밍에서는 널리 쓰입니다.
대한민국의 하루 인터넷 사용량은 알 수 없지만, 모바일 데이터가 월 40만 TB를 돌파했다고 합니다.
http://it.chosun.com/site/data/html_dir/2019/03/07/2019030702947.html
데이터 통신에서 패킷은 소켓으로 전달됩니다. 소켓의 기본 크기가 만약 32바이트인것과 64바이트인 것은 차이가 커지겠죠.
이러한 공간 효율을 위해 union을 자주 사용합니다.
리눅스 커널 소스 코드에서 네트워크를 담당하는 헤더 파일에 보면 struct sock_common 구조체가 선언되어 있습니다.
https://elixir.bootlin.com/linux/v4.14/source/include/net/sock.h
일부만 옮기면
struct sock_common { /* skc_daddr and skc_rcv_saddr must be grouped on a 8 bytes aligned * address on 64bit arches : cf INET_MATCH() */ union { __addrpair skc_addrpair; struct { __be32 skc_daddr; __be32 skc_rcv_saddr; }; }; union { unsigned int skc_hash; __u16 skc_u16hashes[2]; }; /* skc_dport && skc_num must be grouped as well */ union { __portpair skc_portpair; struct { __be16 skc_dport; __u16 skc_num; }; };
...
이와 같이 union이 쓰이고, 익명 구조체도 쓰입니다.
시스템 프로그래밍 개발자가 목표이면 공용체는 매우 자주 쓰입니다. 위와 같은 자료 구조를 해석할 수 없으면 실무 개발이 어려워집니다.