Ignorer les problèmes multithreading, ce qui suit est garanti au travail:Vous cherchez avant de sauter
int can_alloc(size_t i)
{
void *p = malloc(i);
if(p == NULL) return 0;
free(p);
return 1;
}
// later
if(can_alloc(10))
{
char *c = malloc(10); // no need to verify, we already did?
memcpy(c, "something", 10);
}
Ceci est la plupart du temps par curiosité. Je n'ai pas l'intention de l'utiliser pour quelque chose, mais je crois qu'il devrait être garanti de travailler, et il serait instructif de savoir à coup sûr.
Je pensais (dans la plupart des systèmes d'exploitation) que chaque processus avait une quantité de mémoire allouée à ce processus uniquement. –
Je n'ai jamais entendu ça. Je pense qu'ils sont juste assignés ce qu'ils demandent (probablement arrondi à des tailles de blocs plus grandes). – sje397
Oh. On dirait que je ne suis pas sur ma théorie OS. J'ai vérifié la norme et rien ne garantit cela, je vais donc dire que vous avez probablement raison. –