![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
![]() 유니코드 지원에 대해 관심있으신 다른 분들의 의견도 듣고싶네요. 위에 적은 내용은 제 개인적인 경험만을 바탕으로 한 '선호도' 수준의 의견일 뿐입니다. 사실... 세미나 장소에서 뭔가 의견을 이야기 하고 싶다는 생각은 굴뚝같았습니다만... 스스로도 '어떤 방식이 좋다' 라는 결론을 내릴 수가 없더군요. 그런 의미에서 저도 정리가 필요한것 같습니다. 다른 사람들이 선호하는 것 까지 고려하는것은 주제넘은 짓이고, 일단 저 스스로가 원하는게 뭔지부터...
패패루님이 지금 일본에서 미국 회사의 일본 지사에 근무하고 있는데, 그래서 현지화 관련으로 유니코드 관련 작업을 많이 하고 계시죠.
패패루님과 유니코드 관련 얘기들을 많이 해했었는데, 위의 글에서 "메모리를 두배 차지하는 대신 성능면에서는 월등해집니다"라고 말씀하신 게 바로 NT 커널의 기본 문자열 처리가 유니코드이기 때문라고 하더군요. 근데 빼빼루, 그러면 니가 한번 코드기어에 구현할 방식을 제안해보면 어때? 내 생각에 그쪽에는 유니코드를 직접 사용하는 개발자가 거의 없어서 향후에 발생할 수 있는 문제에 대해 고려가 좀 부족할 거 같은데. 여러해 동안 유니코드 관련으로 가장 많은 고민을 한 니가 직접 구현 방법을 제안하는 것 이상의 좋은 결과 있을까? 아니... 아예 코드기어에 지원해보면 어때? 마침 코드기어에서 개발자를 구하더군! http://blogs.codegear.com/michaeldevery/2007/10/19/33778/ 요즘 니 고민이 지금 회사에서 재미가 떨어져간다는 거였잖어. 어차피 일본에서 미국회사에 일하나, 미국에서 일하나 별 차이가 있을 거 같지도 않구. 결혼도 안했으니 훌훌 미국으로 건너가서 지대루 재밌는 개발 해보는 것도 좋지 않겠냐? 마침 C++빌더 프로덕트 매니저도 대단한 사람을 영입해서 C++빌더 쪽으로 더욱 강화하려고 하는 거 같던데. 니가 지원한다면, 통할지는 몰라도 포럼 명의로 해서 코드기어로 추천 메일은 확 날려주겠어. 이거 농담 절대루 아님. 나 지금 진지 모드. 혹시 문자열 레퍼런스 문제가 이것이던가요?
http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.language.delphi.win32&messageid=430f013c$1@newsgroups.borland.com 내용 뒤쪽에 변수에 직접값이 아닌 다른 변수로 대입할 경우 레퍼런스 카운터가 증가되어 이미 해제되었지만 잘못된 레퍼런스 카운터로 문자열변수를 free해서 익셉션이 발생할 수 있다는 내용이 있네요. AnsiString은 레퍼런스 카운트를 관리하기 때문에 함수의 리턴값으로 사용해도 성능의 저하가 거의 없습니다.
예를 들면 이런거죠... AnsiString DoubleStr(const AnsiString arg) { return arg + arg; } 사용 방법도 아주 직관적이 됩니다. AnsiString aa = DoubleStr("안녕하세요"); 반면 WideString은 BSTR과의 호환성에 너무 얽매인 나머지... 레퍼런스 카운트 관리가 없기 때문에 앞선 예제처럼 만들면 메모리 복사 문제가 일어나서 성능에 영향을 줍니다. void DoubleStr(WideString &Dest, const WideString &Source) { Dest = Source + Source; } 사용법도 WideString aa; DoubleStr(aa, "안녕하세요"); 이런식으로... 이 외에도 BSTR과 wchar_t*는 사실상 타입은 동일하지만 메모리 운영은 다르기 때문에 WideString aa; aa = L"안녕하세요"; 이런식으로 쓰다간 난리납니다. aa = "안녕하세요"; 이건 괜찮죠. 이유는... 몇가지 실험과 소스를 추적해 보시면 금방 눈치 채실겁니다. 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |