C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[967] [퀴즈] vcl에서 copy-on-wirte 방식의 class는 어떤것들이 있을까요?
장성호 [nasilso] 7808 읽음    2010-03-15 00:02
[Copy-On-Write 란?]

음...
저도 설명을 잘 못하겠네요..
검색해보시면 많이 나오는데..

객체(구조체,data)를 복사할때 
내용이 같으면 실제 data를 복사하지 않고 , 참조(Refrence) 횟수만 증가시켜두구요

어느쪽에서는 내용을 수정(write) 할때 ,  새로은 메모리를 확보하여 원본을 복사해 수정하는 방식입니다.

vcl에서 대표적이 것이 바로 String 입니다.
다른 언어에서도 String클래스는 Copy-On-Write방식을 많이 쓰는것 같습니다.(정확히 잘 모름)

이전에 한 퀴즈중에 두 코드의 차이점을 묻는 퀴즈가 있었는데..
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=963

Lyn님 답변에 char *cp가 무효화될 가능성이 있다는 얘기가 바로 위와같은 이유이죠~!


그런데 VCL에는 String 클래스말고 Copy-On-Write 방식의 Class 들이 여럿 더 있는것 같습니다.

[ vcl에서 Copy-On-Write 방식의 class가 어떤것들이 있을까요?]

1. String 클래스

String s1="1234567890";
String s2=s1; //이때 문자열"1234567890" 이 복사되지 않습니다.
               //문자열의 RefCount만 증가되지요

s2[1]='a'; //이때 새로운 메모리가 확보되어 문자열이 Copy됩니다.  
             //원본의 RefCount는 하나 줄어들구요

String s3=s1;

s1="ABCDEFG";// 이때도  s1이 원래 가지고 있던 RefCount는 1 줄어들고 , 
          // 원래 문자열 정보는 s3만 가지고 있구
         //s1은 새로운 메모리를 확보하여 문자열"ABCDEFG"를 저장해 둡니다.




또 어떤게 있을까요?



미리 말씀드리지만 저도 몇개만 알고있을뿐 다는 모릅니다.

그럼..
Frigate [devilica]   2010-03-15 18:29 X
Graphics유닛에서 Copy on write기법을 사용하는 클래스(TBitmap, TIcon)를 찾았습니다.
TBitmap은 주석에 Copy on write라는 단어도 보이네요.

TBitmap은  TBitmapImage, TIcon은 TIconImage 라는 TSharedImage타입의 변수가 사용되고 있습니다.
TSharedImage의 Refrence와 Release 메소드가 Copy-On-Write기법을 사용하도록 도와주고 있습니다.

다른 유닛에도 유사한 방식으로 동작하는 클래스가 있을것으로 보입니다.
혹시나 싶어, VCL 소스 전체를 Copy on write로 검색했는데 주석에 친절하게 설명을 달아놓은건 TBitmap이 유일하네요.
장성호 [nasilso]   2010-03-16 01:19 X
네 맞습니다.
TBitmap이 Copy On Write 기법을 사용합니다.
TBitmap의 Canvas에 무엇을 draw하거나 ..
TBitmap.ScanLine을 호출할때 RefCount가 1보다 크면 새로운 bitmap을 생성해서 cpy한후에 이미지르 변경하도록 동작하지요

TJpegImage에서도 Bitmap을 assign하면 내부적으로 bitmap을 그냥 가지고 있는것 같습니다.

다른것은 별로 중요한것은 아니구 bitmap과 String은 copy on write방식으로 동작한다는것은 꼭 알고 있어야 할듯 하네요

그밖에 TIcon ,  TFont , TPen , TBrush , Exception 객체등이 copy on write방식으로 동작하는것 같습니다.

그럼..

+ -

관련 글 리스트
967 [퀴즈] vcl에서 copy-on-wirte 방식의 class는 어떤것들이 있을까요? 장성호 7808 2010/03/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.