2011-11-26 2 views
0

Windows 32 비트는 모든 프로세스에서 최대 2 기가 바이트 메모리 주소 공간을 허용한다는 것을 알고 있습니다. 2 기가 바이트 = 2147483648 바이트.프로세스의 메모리 주소 공간

# include<iostream> 

int main(){ 

    void *x=malloc(2147489999); 
    free(x); 
    system("pause"); 
    return 0; 
} 

이유는 무엇인가,이 코드를 나는 훨씬 더 2,147,483,648 바이트보다 힙 메모리를 할당하려고 내가 오류 또는 예외를 보지?

+0

가 신호되어야한다 ? – pezcode

+0

예외 또는 다른 알림? – Aan

+2

C에는 예외가 없으며'malloc'은 C++가 아니라 C입니다. 'malloc'은 NULL을 리턴함으로써 실패를 표시합니다. 반환 값을 관찰하지 않았습니다. – asveikau

답변

5

당신은 반환 값을 :) 확인하지 않는

#include <windows.h> 
#include <malloc.h> 
#include <stdio.h> 
#include<iostream> 

#define PAUSE getchar 

int 
main(int argc, char *argv[]) 
{ 
    void *x=malloc(2147489999); 
    if (x) 
    { 
     printf ("malloc succeeded: 0x%x...\n", x); 
     free(x); 
    } 
    else 
    { 
     perror ("malloc failed"); 
    } 
    PAUSE(); 
    return 0; 
} 

C : \ 임시> \의 Microsoft Visual C++ 도구를 사용하기위한 환경을 설정 빈 \의 vcvars32. C : \ temp> 메모장 tmp.cpp

C : \ temp> cl tmp.cpp Microsoft (R) 32 비트 C/C++ 최적화 컴파일러 80x86 용 12.00.8168 Copyright (C) Microsoft Corp 1984-1998 . 모든 권한 보유.

tmp.cpp ... /out:tmp.exe tmp.obj

C : \ 온도가>의 tmp를 malloc에 ​​실패 : 없음 오류를 오류 또는 경고를 생각하는 방법을

+0

오! 고마워요 paulsm4,하지만 여전히 2 메가 바이트 malloc 수 없습니다! 'malloc (2147483648)'을 시도해 보라. – Aan

+3

@Adban : 총 * 프로세스 주소 공간은 2GB로 제한됩니다. 귀하의 데이터 만이 아닙니다. OS는 코드를 어딘가에두고, 사용하는 모든 DLL과 OS가 예약 한 모든 오버 헤드를 넣어야합니다 ... 정확히 2GB를 할당하려면 64 비트 OS를 사용해야합니다. –

+0

@GregHewgill : 감사의 말을 보았습니다. – Aan