원본 : http://www.debuglab.com/knowledge/basedaddressing.html
1.요약
microsoft c++에서는 __base 키워드를 사용해서 base pointer를 지정할 수 있습니다.
2.본문
다음 예제를 보시면 쉽게 이해하실 수 있습니다.
= 다음 예제 =
= 예제 결과 =
*p = 2
*p = c
여기서 느낄 수 있는 바는 다음과 같습니다.
p의 값은 바꾸지 않았는데도, p가 가리키는 주소의 의미가 변하는구나.
다음과 같은 응용 범위가 있겠습니다.
혹은 공유메모리를 사용하는 경우에, 공유메모리 오브젝트가 NT에서는 프로세스 주소공간에서 다른 위치로 맵핑될 수 있습니다. 만약에 공유 데이타에 포인터가 포하된다면 문제가 될 수 있겠죠?
그런 경우에 based addressing 을 사용하면 쉽게 문제를 피해갈 수 있습니다.
- 2001.08.13 Smile Seo -
1.요약
microsoft c++에서는 __base 키워드를 사용해서 base pointer를 지정할 수 있습니다.
2.본문
다음 예제를 보시면 쉽게 이해하실 수 있습니다.
= 다음 예제 =
char* psz = "0123456789"; char __based(psz)* p = reinterpret_cast<char __based(psz)*>(0x2); std::cout << "*p = " << *p << std::endl; psz = "abcdefghijklmnopqrstuvwxyz"; std::cout << "*p = " << *p << std::endl;
= 예제 결과 =
*p = 2
*p = c
여기서 느낄 수 있는 바는 다음과 같습니다.
p의 값은 바꾸지 않았는데도, p가 가리키는 주소의 의미가 변하는구나.
다음과 같은 응용 범위가 있겠습니다.
void *vpBuffer;
struct llist_t
{
void __based( vpBuffer ) *vpData;
struct llist_t __based( vpBuffer ) *llNext;
};
위와 같은 식으로 정의해서 리스트를 만들면, vpBuffer를 바꿔 줌으로써 쉽게 리스트 전체의 내용이 변하겠죠. 혹은 공유메모리를 사용하는 경우에, 공유메모리 오브젝트가 NT에서는 프로세스 주소공간에서 다른 위치로 맵핑될 수 있습니다. 만약에 공유 데이타에 포인터가 포하된다면 문제가 될 수 있겠죠?
그런 경우에 based addressing 을 사용하면 쉽게 문제를 피해갈 수 있습니다.
- 2001.08.13 Smile Seo -
"C++" 카테고리의 다른 글
- 메모리가 모자랄 경우에 대비한다 (0)2007/03/19
- malloc과 free 보다는 new와 delete를 사용한다. (0)2007/03/19
- based addressing (0)2007/03/17
- stringstream (0)2007/03/08
- upper_bound/lower_bound (0)2007/03/08

수안이의 컴퓨터 연구실



Leave your greetings.