2012-05-15 2 views
-1

로 표시된 메모리 위치를 상쇄 을 IntPtr (void *allocatedObject;)의 메모리에 위치를하고 INT64에 메모리 포인터로 변환 : 나는 C++에서 이것을 달성 할 수 어떻게 INT64방법 C에서 객체 ++ 나 C#에서이 구현이

short size = getSize(); 

IntPtr allocatedObject; 

long posInMemory = allocatedObject.Offset(size).ToInt64(); 

에 메모리 포인터로 변환.

미리 감사드립니다.

+0

매우 위험한 것처럼 보입니다. 이게 필요한게 뭐하고 있니? –

+1

C++에서 임의의 메모리 영역을 잡아낼 이유가 거의 없습니다. 마이크로 컨트롤러를 프로그래밍하지 않으면 그렇게하지 마십시오. –

+4

우리가 여기있는 것은 그가하고있는 일을 모르는 OP입니다. 그는 C#을 C++로 번역 할 수있는 "할 수 있을지"묻습니다. 그러나 전체 코드를 보여주지 않고 3 번 이상 질문을 퍼뜨리지 않아도됩니다. 잘못된 X/Y 문제 질문. 달콤한 – sehe

답변

2

당신은 (정의 sizeof = 1있다가 있음), 다음 다음 포인터에 다시 캐스팅, 크기하여 오프셋 char에 대한 포인터 포인터를 캐스팅 첫째, 당신은이 64bit 정수를 나타내는 int64_t 유형을 것이다 가정 int64_t. 당신이 void 포인터 포인터를 arithmetics을 할 수 없기 때문에이 더 크기가 없기 때문에

static_cast< int64_t* >(static_cast< char* >(allocatedObject) + size) 

가 있다고. 또는 reinterpret_caststd::intptr_t (포인터를 포함 할만큼 충분히 큰 정수)에 대한 포인터를 크기에 따라 늘린 다음 int64_t에 대한 포인터로 캐스트 할 수 있습니다.

+1

그냥'(int64_t *) (allocatedObject + 크기)'왜? – Abyx

+0

@Abyx : C 스타일의 캐스트가 지구의 쓰레기이기 때문에? – Puppy

+1

@DeadMG, 정수로 포인터를 캐스팅 할 때'manyletters_cast'를 사용 하시겠습니까? – Abyx

관련 문제