2011-04-10 2 views
1

~ 1GB를 할당하려고하는데 포인터 주소를 확인하면 음수입니다. 이것이 내가 어딘가에 타격을 가하는 구성 제한 일 수 있습니까?C : 할당 제한

  • 목표는 ~ 0.7GB의 ~ 1기가바이트
  • 제한을 할당 ([구조체] 48 * 16,890) 메모리의
  • 1.5GB의 메모리를
  • 더 많은 양이 이전에 할당되지 않았다.
  • fedora linux를 사용 중입니다.
  • 에는 컴파일러 오류
+2

LOL, 진심이야? 포인터의 "부호"에 신경 쓰지 마십시오. 정수가 아닙니다. malloc()이 0이 아닌 값을 반환하면 작동합니다. –

+0

나는 포인터 주소가 음수 일 수 있다는 것에 놀랐다 - 매우 특이한 하드웨어 플랫폼에 있어야한다 ;-) 물론 모든 플랫폼에서 * signed int로 변환 될 수있다. –

+0

그래, 왜 효과가 없다고 생각하는지 확대 할 수 있니? 포인터는 부호 없음이고 malloc이 실패하면 NULL을 리턴합니다. – DanTheMan

답변

7

는 무관의 포인터의 "기호"를 테스트하지 마십시오. malloc이 반환하는 유일한 잘못된 포인터는 null 포인터입니다. 그것이 다른 것을 반환하면 그것을 사용할 수 있습니다. 내가 포인터 주소를 확인할 때

1

는하지만 음수 불가능

에게 있습니다. 여러분이 볼 수있는 것은 주소를 부호있는 정수로 해석하는 것입니다.

C 자체에는 제한이 없습니다. 할당은 요청 된 블록 크기 및 운영 체제의 주소 지정 기능에 사용되는 데이터 유형에 따라 제한됩니다.

요청한 크기의 연속 메모리 블록이없는 경우 런타임 중에 요청이 실패합니다 (malloc()NULL).