2011-11-26 3 views
0

Je sais que Windows 32 bits permet un processus d'un maximum de 2 Go d'espace d'adressage mémoire. 2 gigaoctets = 2147483648 octets. J'ai essayé d'allouer de la mémoire de tas beaucoup plus 2147483648 octets et j'ai vu aucune erreur ou une exception, ce code:Espace adresse mémoire d'un processus

# include<iostream> 

int main(){ 

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

quelle est la raison?

+0

comment pensez-vous d'une erreur ou d'avertissement doit être signalée ? – pezcode

+0

exceptions ou d'autres notifications? – Aan

+2

C n'a pas d'exceptions, et 'malloc' est C, pas C++. 'malloc' indique son échec en retournant' NULL'. Vous n'avez pas observé la valeur de retour. – asveikau

Répondre

5

Vous n'êtes pas vérifier la valeur de retour :)

#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: \ temp> \ bin \ vcvars32 environnement Configuration pour l'utilisation de Microsoft Visual C++ outils. C: \ temp> bloc-notes tmp.cpp

C: \ temp> cl tmp.cpp Compilateur d'optimisation C/C++ Microsoft (R) 32 bits Version 12.00.8168 pour 80 x 86 Copyright (C) Microsoft Corp 1984-1998 . Tous droits réservés.

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

C: \ temp> tmp malloc a échoué: Aucune erreur

+0

Oh! merci paulsm4, mais je ne peux pas encore malloc 2 Go! essayez 'malloc (2147483648)' ?? – Aan

+3

@Adban: votre espace d'adressage de processus * total * est limité à 2 Go. Pas seulement vos données. Le système d'exploitation doit mettre votre code quelque part, et toutes les DLL que vous utilisez, ainsi que tout surcoût réservé par le système d'exploitation ... si vous voulez allouer exactement 2 Go, vous devez utiliser un système d'exploitation 64 bits. –

+0

@GregHewgill: Je vois le point merci. – Aan

Questions connexes