PropertySet
전산
2004/09/08 06:22
새벽 6시지만 도대체가 잠이 안와서 공상하다 다시 뭔가를 만들고 있다.
GPG 의 PropertySet 은 Property 정보 저장을 위한 hash 가 각각의 인스턴스마다 생성되기 때문에 매번 인스턴스를 생성할 때마다 모든 멤버를 register 해야하는 단점이 있었다.
이것은 1. 저장공간의 낭비 그리고 2. 인스턴스 하나 만들때마다 register 부하 가 걸린다는 단점이 있어서 좀더 진보된 PropertySet 을 생각해 보았다.
아이디어는 아주 간단한데, 같은 타입은 모두 같은 메모리 배열을 따른다는것에 착안, 각 멤버변수가 위치한 offset 정보를 타입별로 하나씩만 유지해 이용하는 것이다.
아래는 int 타입만 지원하는 PropertySet 을 간략히 map 으로 구현해 본 것이다. 대충 만들었는데 뭐 의도대로 잘 동작한다. 컨셉을 대충 구현한 프로토타입 이므로 코드는 전혀 세련되지 않았다. 의사코드로 봐 주시면 될듯. 어쨌든 과외시간에 작성한 코드이므로 공개한다.
설계상의 개선사항들
1. 초기 binding 할때 임시객체가 무조건 필요한데 저것은 상속을 이용해 구현하면 없앨 수 있을듯.
2. RTTI 의 type_info 를 사용하면 getClassName() 따위는 없어도 된다.
GPG 의 PropertySet 은 Property 정보 저장을 위한 hash 가 각각의 인스턴스마다 생성되기 때문에 매번 인스턴스를 생성할 때마다 모든 멤버를 register 해야하는 단점이 있었다.
이것은 1. 저장공간의 낭비 그리고 2. 인스턴스 하나 만들때마다 register 부하 가 걸린다는 단점이 있어서 좀더 진보된 PropertySet 을 생각해 보았다.
아이디어는 아주 간단한데, 같은 타입은 모두 같은 메모리 배열을 따른다는것에 착안, 각 멤버변수가 위치한 offset 정보를 타입별로 하나씩만 유지해 이용하는 것이다.
아래는 int 타입만 지원하는 PropertySet 을 간략히 map 으로 구현해 본 것이다. 대충 만들었는데 뭐 의도대로 잘 동작한다. 컨셉을 대충 구현한 프로토타입 이므로 코드는 전혀 세련되지 않았다. 의사코드로 봐 주시면 될듯. 어쨌든 과외시간에 작성한 코드이므로 공개한다.
설계상의 개선사항들
1. 초기 binding 할때 임시객체가 무조건 필요한데 저것은 상속을 이용해 구현하면 없앨 수 있을듯.
2. RTTI 의 type_info 를 사용하면 getClassName() 따위는 없어도 된다.
코드보기







Textcube 1.8.5 : Accelerando