C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[25874] Re:델파이 레코드 가변부분에 대하여
kylix [] 5656 읽음    2016-03-31 10:52
가변레코드는 C/C++의 union과 같습니다.

메모리는 데이터를 담을 수 있는 최대 크기가 됩니다.

yes가 True일 경우
yes : 4byte, tel: 4byte => 8byte
yes가 False일 경우
yes: 4byte, phone: 4byte, address: 24byte => 32byte

두가지 경우를 모두 담을수 있게하기 위해서 32byte가 필요한겁니다.
*위의 경우 레코드에 packed를 안쓰셨기 때문에 4byte align을 위해서 padding byte가 추가된 크기입니다.

필요한 이유는 자신이 찾아야겠죠. 이러한 것을 안쓰고도 다른 방식으로 얼마든지 프로그래밍이 가능하니까요.

아래 선언은 델파이 도움말에 있는것인데, 이것을 잘 보시고 가변레코드를 안썼을 때와 비교해보세요.

type
  TShapeList = (Rectangle, Triangle, Circle, Ellipse, Other);
  TFigure = record
    case TShapeList of
      Rectangle: (Height, Width: Real);
      Triangle: (Side1, Side2, Angle: Real);
      Circle: (Radius: Real);
      Ellipse, Other: ();
  end;

델마를 향하여 님이 쓰신 글 :
: 델파이 가변부분이 왜 필요한지 모르겠어여
:
: type
:   TRecord5 = record  
:     case yes : boolean of
:        True: (tel : integer);
:        False: (phone:integer;
:                    address : String[20]);
: end;
:
: 이렇게 선언하고 인스턴스 생성하면 sizeof(record5) ===>32byte나옵니다.
: 이걸로 봐서 메모리는 선언한 변수만큼 전부 할당되는것으로 보여집니다. (메모리효율적인 부분도 아니고)
: case문에 의해 접근을 여부가 결정되는것도 아닙니다. case 값이 True여도 False쪽 변수에 값넣고 showMessage로
: 찍어보면 찍힙니다.
:
: 즉 , 아래 일반적인 레코드랑 사용하는데 별 차이가 없는듯합니다. 책에 나온 내용도 딱히 이해가 안가고요.
:
: type
:   TRecord5 = record  
:        tel : integer;
:        phone:integer;
:        address : String[20];
: end;
:
: 구체적으로 레코드 가변부분이 필요한 이유와 예를 하나 들어주시면 감사하겠습니다.
:

+ -

관련 글 리스트
25873 델파이 레코드 가변부분에 대하여 델마를 향하여 6077 2016/03/30
25874     Re:델파이 레코드 가변부분에 대하여 kylix 5656 2016/03/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.