boh, c'est un classique
mais ca m'a fait penser a l'over-commit avec les cles usb sans-fond qui annoncent plus de capacite que de memoire flash dispo.
Zerosquare (./32) :
Certes, l'overcommit te facilite la vie en tant que programmeur. Mais il casse une garantie fondamentale : quand j'alloue de la mémoire, je m'attends à ce qu'elle soit accessible sans provoquer d'erreur (sauf cas extrême, genre barrette mémoire défectueuse ou secteur défectueux dans la partition de swap, mais on n'attend pas des programmes qu'ils soient capables de gérer ce genre de choses normalement). Sur un système avec l'overcommit activé, ce n'est pas le cas, et mon programme peut planter par manque de mémoire de manière imprévisible. Du point de vue déterminisme, c'est inacceptable.
void* zerosquare_malloc(size_t size)
{
void* ptr = malloc(size);
if (ptr)
memset(ptr, 0, size);
return ptr;
}
Zerosquare (./41) :Un OS je sais pas, mais VMWare ESX/Server fait ça depuis sa version 2. Il a un process background qui hashe les pages. Quand ça matche, il examine les pages et, si elles sont identiques, il les met en CoW.
Mais je privilégierais de remplir avec des octets aléatoires. Rien ne dit qu'un OS ne serait pas assez malin pour détecter les pages qui ne contiennent que des zéros ou qui sont identiques entre elles, et faire du copy-on-write
Zerosquare (./38) :
Au besoin, on peut proposer à l'utilisateur d'ouvrir le document quand même à ses risques et périls
Zerosquare (./38) :
Enfin, ce genre de mécanismes par défaut incite les développeurs à être paresseux et à ne pas réfléchir à la conception de leurs softs. Et on voit bien ce que ça donne en pratique...
Zerosquare (./39) :
Dans la majorité des cas, 8 Mo de pile c'est largement surdimensionné.
Zerosquare (./39) :
spectras > pareil pour la pile. Dans la majorité des cas, 8 Mo de pile c'est largement surdimensionné.
GT Turbo (./51) :
Le programme va faire des accès a d'autres zones mémoires, est ce que cela 'pourrit' pas les performances ? Car ces données auront très peu de chances d'être contigués. Donc remplissage du cache a chaque accès pile et reremplissage car accès a des données beaucoup lus loin non ?
GT Turbo (./51) :
L'utilisation 'exagéré' de la pile est spécique aux langages de haut niveau, car en assembleur, a part vouloir faire du récursif, et les appels au procédures (Pour le stockage du PC car perso j'utilise les regs du proc pour faire le passage de paramêtres (Bon après c'est sur cela des codeurs)).
GT Turbo (./51) :
>>PpHd : c'est 0.04% d'un systême
Heu cela dépend du systême, ceux qui font de l'embarqué doivent pas penser pareil. Prends une machine a café dans les entreprises, tu penses qu'elle embarque 1 Gigas ?
mint ~ # uname -a Linux mint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux mint ~ # cat /proc/meminfo MemTotal: 8039344 kB MemFree: 4687428 kB Buffers: 166068 kB Cached: 1282892 kB SwapCached: 93864 kB Active: 1890260 kB Inactive: 1040836 kB Active(anon): 1127192 kB Inactive(anon): 532092 kB Active(file): 763068 kB Inactive(file): 508744 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 8249340 kB SwapFree: 8056268 kB Dirty: 36 kB Writeback: 0 kB AnonPages: 1408856 kB Mapped: 216908 kB Shmem: 177148 kB Slab: 293436 kB SReclaimable: 256068 kB SUnreclaim: 37368 kB KernelStack: 3672 kB PageTables: 23444 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 12269012 kB Committed_AS: 3607828 kB VmallocTotal: 34359738367 kB VmallocUsed: 409344 kB VmallocChunk: 34359321212 kB HardwareCorrupted: 0 kB AnonHugePages: 411648 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 2207992 kB DirectMap2M: 6043648 kB mint ~ # echo 2 > /proc/sys/vm/overcommit_memory mint ~ # ./a.out Max allocatable virtual memory=8.250000Gb mint ~ # echo 0 > /proc/sys/vm/overcommit_memory mint ~ # ./a.out Max allocatable virtual memory=63787.500000Gb mint ~ # ./a.out Max allocatable virtual memory=65947.500000Gb mint ~ # ./a.out Max allocatable virtual memory=65988.000000Gb mint ~ # ./a.out Max allocatable virtual memory=64611.000000Gb mint ~ # ./a.out Max allocatable virtual memory=64651.500000Gb mint ~ # ./a.out Max allocatable virtual memory=64638.000000Gb mint ~ # ./a.out Max allocatable virtual memory=64813.500000Gb