2011-01-19 10 views
1

저는 클래스를 위해 할당 유틸리티를 개발해야합니다.할당 된 주소에서 구조를 인스턴스화하십시오 (할당 할당)

안전을 제외하고, 나는 멀리 포인터를 사용하여 일부 구조에 주소를 할당하고 할당합니다. 나는 또한이 과제에서 "memalloc"을 사용할 수 없다.

memalloc을 사용하지 않고 링크 된 구조를 만드는 방법을 배우려면 Linked Lists in C without malloc 을 참조하십시오. 그러나 특정 주소에 새 인스턴스를 할당하는 방법을 알아야합니다. 예를 들어 주소가 0x5000 인 시작 포인터가있는 경우 주소를 기준으로 256 바이트 앞으로 다음 구조를 시작하기 위해 점진적 오프셋 (예 : 256)을 사용할 수 있도록 목록을 작성하고 싶습니다. 내 출발점.

이 할당은 세그먼트 화 및 x86 아키텍처에 익숙한 것에 기반합니다.

도움을 주시면 감사하겠습니다.

답변

3

가 수행하려는 작업에 따라, 당신은 아마 다음과 같은 도구의 조합을 사용할 수 있습니다 :

배치를 새로운 : 다음 구문을 사용하여 특정 메모리 위치에서 객체를 생성 할 수 있습니다 :

new (reinterpret_cast<void*>(0x500)) MyObject(/* ...ctor args... */); 

새 메모리를 할당하지 않습니다. 대신 지정된 메모리 주소를 수신기 객체로 사용하여 생성자를 호출합니다. 정렬 제한에주의하십시오!

맞춤 할당 기.std::allocator<T>의 줄을 따라 새 클래스를 정의하면 지정한 위치에 메모리가 예약됩니다. 그런 다음 원하는 위치에서 자동으로 메모리를 사용하는 STL 컨테이너를 만들 수 있습니다.

+0

안녕하십니까. 답변 해 주셔서 감사합니다. 무엇인가를 명확히해야합니다. 내가 만들고있는 할당 유틸리티 외에 할당 유틸리티를 사용할 수 없습니다. 그래서 새로운, 삭제, 무료, 등등 ... 내가 할 수있게되고 더 찾고있는 포인터를 만들고, 일부 주소를 가리킨 다음 변수와 데이터 구조를 포인터로 참조 된 뾰족한 주소에 만듭니다. – MHZ

+0

질문에 대해 더 자세히 설명하겠습니다. 주소를 디 프리젠 테이션하고 데이터 유형으로 변환 할 수 있습니까? – MHZ

+0

@ user580887- 새로운 배치는 메모리 할당 기술이 아닙니다. 그것은 당신이 묘사 한 것입니다. 메모리의 어느 지점을 가리킬 수 있다면, 새로운 위치 지정을 사용하여 그 위치에있는 객체를 생성 할 수 있습니다. 공간을 확보하기 위해 표준 freestore 할당자를 호출하지 않으며 충분한 공간이 있음을 완전히 신뢰합니다. – templatetypedef

0

방금 ​​교수님의 이메일을 받았는데 "새로운"연산자를 사용할 수 없습니다. 그냥 당신이 얘기 한 것을 확인 두 배로,이 예를 다시 요청할 수 있습니다 : 그 라인을 따라

struct example{ 
    int a; 
    struct example *next; 
}; 

void *ptr; 
ptr = 0x5000; 
ptr = &((example)*ptr); 

또는 무언가?

+0

이 작업을하려면'example * ptr = (example *) 0x5000;'이라고 쓰면됩니다. 이것은 결국'void *'로의 전환을 우회합니다. 왜냐하면 결국, 당신이 종말에 얻으려고하는 것은'example' 객체를 가리키는 포인터이기 때문입니다. – templatetypedef

+0

도움을 많이 주셔서 감사합니다. 일단 사람들을 투표하는 방법을 찾으면, 나는 당신을 위해 그렇게 할 것입니다. – MHZ