조무위키
조무위키
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
행위
문서
토론
편집
역사 보기
C언어
편집하기 (부분)
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
===공용체=== 공용체란 단어의 의미를 생각하면 쉽게 알듯이 다른 자료형의 변수들과 메모리 영역을 공유한다. 뭔 지랄맞은 소리냐 하면, 예를들어 변수 3개가 선언된 구조체는 해당 변수의 자료형을 토대로 3개의 구분된 메모리 공간을 할당한다. 허나 공용체는 3개의 변수를 선언했을 때 제일 큰 자료형의 크기만큼 1개의 메모리 공간할당이 된후 그 메모리 공간을 3개의 변수가 같이 쓴다. 구조체와 쓰는법은 흡사하다. <pre> #include <stdio.h> struct st { char sc; int si; double sd; }; union un { char uc; int ui; double ud; }; int main() { struct st s; union un u; printf("구조체 크기 : %d, 공용체 크기 : %d \n",sizeof(s),sizeof(u)); printf("sc=%p si=%p sd=%p\n",&s.sc,&s.si,&s.sd); printf("uc=%p ui=%p ud=%p\n",&u.uc,&u.ui,&u.ud); } 실행 결과 구조체 크기 : 16, 공용체 크기 : 8 sc=0012FF70 si=0012FF74 sd=0012FF78 uc=0012FF68 ui=0012FF68 ud=0012FF68 </pre> 출처 : 제대로 배우는 C언어 프로그래밍 이해가 쉽도록 예제를 찾아 가져왔다. 구조체와 공용체 변수를 만들고, 크기와 해당 변수들의 주소를 반환하는 것을 출력하는 예제이다. 여기서 눈여겨 볼 점은 구조체 크기는 단순히 생각하면 char, int, double 자료형의 변수 3개가 있으니 크기가 13 아닌가 할 수도 있지만, Struct Alignment라는 Visual C/C++의 내부 기능에 의해 16바이트로 맞춰진 것이니 그리 상관하지 않아도 좋다. (프로세스 성능 저하 방지, 좀더 따지자면 해당 변수에 접근할 때 변수가 메모리상의 2의 n승 단위의 값에 위치한 메모리에 있으면 효율적으로 메모리를 읽을 수 있기에 사용하는 것이다) (사실 좆도 몰라도 보통은 상관 안하더라) 아무튼 공용체의 크기는 8이라는 점이다 이는 제일 큰 자료형의 크기를 가진 double형의 변수가 있기에 8로 만들어진 것이다 그리고 주소도 구조체는 각 변수의 주소가 나눠져 있는데 비해, 공용체는 주소가 나눠지지 않고 하나의 시작주소로 시작한다. 이걸로 암호화하거나 몇몇 알고리즘에 이용할 수 있다. 근데 난 게임개발 하면서 과제를 하려든 대회를 나가든 뭐하든 별로 안써봤다. 내가 병신인지 원래 게임에서 사용빈도가 높지 않은건지는 글쎄~
요약:
조무위키에서의 모든 기여는 CC BY-SA 4.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
조무위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)