Sto testando una implementazione dell'albero rosso-nero ( repository ) e trovo che con Windows 10 e gcc, malloc inizia a restituire NULL dopo aver inserito ca. 50 milioni di nodi ma su Linux funziona almeno fino a 100 milioni di nodi.
Quale conclusione posso trarre da questo risultato? È un bug nel mio programma o è che malloc è "più efficiente" (come?) Su Linux?
int test() {
int T = 1000000000; //test case 1,000,000,000 nodes
int r2;
struct node *root = NULL;
srand(time(NULL));
struct node *z;
LEAF = malloc(sizeof(struct node));
LEAF->color = BLACK;
LEAF->left = NULL;
LEAF->right = NULL;
LEAF->key = 0;
while (T-- > 0) {
r2 = (2 + T) * (rand() % 100); // data
z = malloc(sizeof(struct node));
if (z != NULL) {
z->key = r2;
z->left = NULL;
z->right = NULL;
z->parent = NULL;
z->color = RED;
root = insert(root, z);
} else printf("malloc failed at node number %d", T);
}
root = NULL;
return 0;
}