5Fermer7
PpHdLe 05/10/2014 à 18:16
Zerosquare (./5) :
Ce que je veux dire, c'est que la seule façon de résoudre le problème du bug report que tu as cité (en supposant qu'on ne peut pas prévoir à l'avance si l'allocation va échouer), c'est de désactiver l'inlining de malloc()/free() pour des allocations de petite taille.

Il n'y a pas de inlining de malloc / free avec clang ? Où alors je ne l'ai jamais vu (et ce n'est pas la source du bug).
Zerosquare (./5) :
- en-dehors des OS "simples", rien ne garantit que la quantité de mémoire dispo ne variera pas entre le moment où tu fais ton estimation et le moment où tu utilises le résultat (voire pendant que tu fais estimation).

Il n'y a pas grand chose de garantie dans un OS... (pour info, je fais un mmap juste après l'estimation).
J'ai fait un petit test rapide : lancer 9x un programme qui fait un tel calcul :
23945 pphd      20   0  9,8g 239m  356 D   0,7  6,0   0:04.49 t-charge                                
23946 pphd      20   0  9,8g 741m  364 D   0,7 18,7   0:11.13 t-charge                                
23951 pphd      20   0  9,8g 439m  356 D   0,7 11,1   0:05.82 t-charge                                
23942 pphd      20   0  9,8g 338m  356 D   0,3  8,5   0:05.04 t-charge                                
23943 pphd      20   0  9,8g 281m  356 D   0,3  7,1   0:04.67 t-charge                                
23944 pphd      20   0  9,8g 259m  356 D   0,3  6,6   0:04.63 t-charge                                
23947 pphd      20   0  9,8g 302m  356 D   0,3  7,6   0:04.53 t-charge                                
23948 pphd      20   0  9,8g 302m  356 D   0,3  7,6   0:04.79 t-charge                                
23949 pphd      20   0  9,8g 303m  356 D   0,3  7,7   0:04.76 t-charge 

Toutes les instances ont alloués le même montant de la mémoire (sur un ordi avec 4Go de RAM ça fait presque 98G de virtualisé cheeky Mais l'OOM killer n'est pas venu ).
Donc il semblerait que le maximum allouable soit indépendant des autres process sous Linux.
Il faudrait que je fasse ce test sous MS Windows, mais j'ai vraiment peut de mettre en carafe MS Windows par un test aussi violent !
Zerosquare (./5) :
- le résultat obtenu dépend complètement de la stratégie d'allocation de la libc et de l'OS. Si ça ne fait que réserver de la mémoire sans l'allouer réellement tant qu'elle n'est pas accédée, le résultat peut être beaucoup plus grand que la mémoire physique réellement disponible.

Oui. Et ça reste le maximum allouable et c'est ce que je veux. Ce n'est pas la taille de la RAM.