2009-10-28 4 views
1

이상한 질문이 있지만 저는 g ++를 사용하여 Solaris에서 64 비트 컴파일시 32 비트 포인터를 만들 수 있는지 궁금합니다. 최종 객체는 64 비트 일 필요가 있지만 내 포인터 오프셋 중 하나는 솔라리스에서 더 커지고 있습니다. 그런 다음 컴파일 할 때 64 비트를 사용하면 윈도우에 있습니다. 이것은 큰 문제를 일으키는 것입니다. 64 비트 컴파일 된 객체 내에서 32 비트 포인터를 만들 수 있는지 궁금합니다.64 비트 Solaris에서 32 비트 포인터로 컴파일

+1

정말로 원하는 것을 이야기하기 위해 질문을 수정해야합니다. 플랫폼간에 포인터 크기가 같아지는 것보다 더 좋은 방법이있을 수 있습니다. 단계가 아니라 목표를 설명하십시오 (http://catb.org/~esr/faqs/smart-questions.html#goal). –

+0

이 질문에는 구체적인 대답이 부족하여 대답하기가 어렵습니다. "큰 문제"는 무엇입니까? 64 비트 창에서 포인터 오프셋이 커지지 않도록하는 방법은 무엇입니까? 질문의 첫 부분조차도 ""64 비트 컴파일로 32 비트 포인터를 만들 수 있습니까? "라는 말이 무슨 뜻인지 알 수 없습니다. –

답변

0

일반 포인터를 변경할 수 없으며 포인터 크기는 sizeof(void *)입니다. 그리고 할 수 있다면 64 비트 시스템에서 32 비트 포인터로 무엇을 할 것입니까?

C에서 포인터를 사용합니까, 아니면 파일 오프셋에 대한 포인터를 의미합니까?

1

포인터 크기는 대상 아키텍처의 특성이므로 32 비트 및 64 비트 포인터를 혼합하고 일치시킬 수 없습니다. 이론적으로는 "제한적 도달 범위"오프셋을 사용하여 작업 할 수 있지만 왜 다시, 그리고 더 좋은 방법이 될지 물어보십시오 (예 : 정수 포인터에 대한 포인터를 캐스팅하는 실수와 같은 냄새가 나는 디자인을 다시 생각해보십시오). 그것을하는 것.

0

포인터 유형이 있으면 64 비트 프로그램에서 32 비트로 만들면 안됩니다. 메모리 모델과 관련이없는 일부 오프셋 인 경우 플랫폼간에 안정적인 크기를 가진 다른 유형을 사용할 수 있습니다 (예 : uint32_t).

0

64 비트 컴퓨터에서 32 비트 포인터를 "필요로하는"것은 의미가 없습니다. 나는 또한이 라인을 이해 해달라고 :

최종 목적은 내가 좀 더 자세히 살펴보고 최종의 버그를 수정하려고 할 것이다 그러나

64 비트를 할 필요가있다. 몇 가지 예제 코드를 게시하면 더 많은 도움을 줄 수 있습니다.