30

C'est si beau de gérer les cas d'erreurs au lieu de coder comme un porc

au moins un
if(!machin) return SOME_ERROR_CODE;

c'est une question de qualité minimale.

31

on(); }Ou bien class Exception { }; class OutOfMemoryException : public Exception { }; void* mymalloc(size_t size) { void* result = malloc(size); if (result) return result; else throw new OutOfMemoryExcepti(Oui bon, en pratique il faut mettre en cache l'exception pour ne pas avoir à utiliser de new…)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

32

./11238 : alors déjà mpm-worker est *moins* performant que prefork (c'est la contrepartie pour avoir un truc plus stable). En revanche je comprends pas leur délire de CGI, je n'ai certainement pas eu besoin de modifier la configuration des sites (et surtout pas pour ajouter des +ExecCGI partout !) pour faire le changement.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

33

GC : ouais mais ça n'existe pas en C, les exceptions ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

34

Ça peut s'arranger au besoin tongue (avec du code et des macro qui vont bien ^^)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

35

Brunni (./11243) :
Ben pour qu'un malloc soit refusé il faut avoir désactivé la swap
Bah non. Dans un des mes programmes, j'ai fait, par erreur, un malloc de 40 Go, au lieu de 4 Go, et ça me l'a refusé et heureusement grin

Je travaille avec des quantités de mémoire qui rendent obligatoire la vérification des allocations. Mais de toute façon, je le fais tout le temps.
avatar

36

Zerosquare (./11244) :
Perso au minimum c'est assert(ptr != NULL), sachant qu'effectivement ça va planter brutalement s'il n'y a pas assez de mémoire, mais au moins ce sera un plantage traçable. Entre ça et un comportement indéterminé, franchement, le choix est vite fait...

tu laisses tes asserts en release ?

37

C'est pas comme si c'était pas courant. Que celui qui n'a jamais vu une application crasher sur un "Assertion failed", que ce soit du gnou ou du propriétaire, se dénonce tout de suite.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

38

Pen^2 (./11252) :
tu laisses tes asserts en release ?
J'ai dit "au minimum", donc c'est plutôt pour des programmes persos. Et je ne fais quasiment pas de softs PC "pros", donc la question se pose rarement smile

avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

39

par release, j'entendais pas compilé en debug

40

Ah. Donc la réponse est oui.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

41

Zerosquare (./11244) :
Je vois pas ce qu'il y a de con à désactiver le swap... ce qui est plutôt con, c'est qu'il y a des cas où ça apporte un gain de performance de le faire !

Et pour le malloc(), je te croyais plus rigoureux que ça quand même grin
Perso au minimum c'est assert(ptr != NULL), sachant qu'effectivement ça va planter brutalement s'il n'y a pas assez de mémoire, mais au moins ce sera un plantage traçable. Entre ça et un comportement indéterminé, franchement, le choix est vite fait...

Non, quand je code en C je le fais proprement, avec des if imbriqués, ou au pire un if (!ptr) return; en m'assurant qu'il n'y a pas d'effet de bord.
Mais je trouve que c'est du temps passé bien peu utile au final, surtout que le C standard est bourré de choses qui me font autant dresser les cheveux sur la tête qu'à Folco le fait ne pas traiter les codes d'erreur, comme strcpy, sprintf, etc.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

42

43

Zerosquare (./11244) :
Je vois pas ce qu'il y a de con à désactiver le swap... ce qui est plutôt con, c'est qu'il y a des cas où ça apporte un gain de performance de le faire !

Ce n'est pas une bonne idée de le faire, c'est tout. Ou alors tu as assez de RAM pour que la limite de malloc n'existe virtuellement pas pour les applications que tu utilises.
Il n'y a qu'à prendre l'iPhone pour s'en rendre compte; la RAM est tout le temps pleine de choses inutiles, qui seraient bien mieux en swap. Résultat l'OS est tout le temps en train de libérer les vieux trucs, et quand il n'y arrive pas assez rapidement l'application en foreground plante. Ce n'est pas une vision très fiable de l'informatique.
En plus de la fiabilité, en forçant l'OS à occuper la RAM avec des vieux trucs inutilisés, tu réduis la mémoire de travail pour les applications en avant plan. Enfin, en cas de leak, même minime, les performances vont diminuer avec le temps et un reboot sera nécessaire, etc. bref retour en '90.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

44

Brunni (./11259) :
Ce n'est pas une bonne idée de le faire, c'est tout. Ou alors tu as assez de RAM pour que la limite de malloc n'existe virtuellement pas pour les applications que tu utilises.
Ben oui, je me place dans le cas où il y a suffisamment de RAM physique pour tout faire rentrer (sinon, c'est sûr que sans swap ça va coincer grin). Mais le fait est que sur certaines machines où c'est le cas, Windows (et peut-être d'autres OS) a de meilleures perfs avec le swap désactivé qu'avec le swap activé, ce que je considère comme un défaut de conception. À plus forte raison quand ça plante carrément si on vire le swap.
Brunni (./11259) :
Il n'y a qu'à prendre l'iPhone pour s'en rendre compte; la RAM est tout le temps pleine de choses inutiles, qui seraient bien mieux en swap. Résultat l'OS est tout le temps en train de libérer les vieux trucs, et quand il n'y arrive pas assez rapidement l'application en foreground plante. Ce n'est pas une vision très fiable de l'informatique.
C'est que l'OS et/ou les applis sont mal codées, c'est tout. Déjà un système embarqué ne devrait pas planter comme ça. Ensuite, pour se retrouver à court de RAM à ce point, soit c'est mal géré, soit ils ont été radins sur la quantité de RAM. Rajouter du swap est une fausse bonne idée (ça rame, et ça use les mémoires flash). Par ailleurs, y'a des trucs qu'on peut virer de la RAM sans avoir besoin de swapper (par exemple, le code inutilisé, qui peut être rechargé depuis le fichier exécutable).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

45

squalyl (./11245) :

C'est si beau de gérer les cas d'erreurs au lieu de coder comme un porc

au moins un
if(!machin) return SOME_ERROR_CODE;
c'est une question de qualité minimale.

pencil
Brunni (./11259) :
Zerosquare (./11244) :
Je vois pas ce qu'il y a de con à désactiver le swap... ce qui est plutôt con, c'est qu'il y a des cas où ça apporte un gain de performance de le faire !
Ce n'est pas une bonne idée de le faire, c'est tout.

Euh... confus

J'ai 2 Go de RAM, je sais que je n'ai besoin que d'un Go, pourquoi ce serait con de le désactiver, sachant que Win le gère avec les pieds ? Je fais encore ce que je veux et pense être optimal pour ma machine sans être con quand même, non ? confus

46

Oui, j'avoue que c'est un peu rapide comme jugement grin

Avec les machines d'aujourd'hui qui ont facilement 4 ou 6go voire plus, le swap devient tout à fait optionnelle et ça ne pose strictement aucun problème de le désactiver complètement...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

47

On peut mettre la machine en « hibernation » sans avoir un swap au moins aussi grand que la RAM ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

48

Oui, heureusement, le fichier d'hibernation est un fichier différent de celui de la swap.
avatar

49

Folco (./11265) :
Euh... confus

J'ai 2 Go de RAM, je sais que je n'ai besoin que d'un Go, pourquoi ce serait con de le désactiver, sachant que Win le gère avec les pieds ? Je fais encore ce que je veux et pense être optimal pour ma machine sans être con quand même, non ? confus

Oui, ben si tu crois mieux savoir que ton OS alors ne viens pas te plaindre si ça plante tongue (et là on parle de cas où malloc() raterait; si tu es si sûr que ça n'arrivera jamais avec tes 2 Go alors inutile d'y songer). Si un composant système a besoin de mémoire et qu'on ne peut pas lui en donner, alors ça *va* merder, aucune autre solution possible. Avec la swap pas. Et quand je vois un système planter pour ça, je me dis avant tout que l'utilisateur est con.

Ensuite c'est normal qu'activer la swap ralentisse légèrement les performances de la machine. Si tu utilises moins de 50% de la RAM, alors ça ne devrait pas en effet changer grand chose; si c'est le cas on peut considérer que l'OS est très préventif, et ce n'est pas bon si on a un SSD.

Mais à partir de 70%, alors un OS même parfait va commencer à swapper même préventivement (en gardant une copie des pages en RAM), parce qu'il aura anticipé une situation critique. Il aura aussi pu juger qu'il était mieux de swapper des pages de données plutôt que vider du .rodata. Et cette copie forcément occupe le disque et le CPU, réduisant donc les performances dans un benchmark. Par contre il est certainement bénéfique sur le long terme (entendre hors d'un benchmark qui alloue 7 Go sur les 8 que tu as et ensuite se termine).

Concernant Windows j'évite de juger parce que je n'ai jamais vraiment compris comment il gérait la swap (et en toute modestie je doute que quiconque ici non plus grin), mais si on regarde par exemple le petit carré en bas à droite de ce screen:
sIQn

2.5 Go / 4 Go de RAM libre, soit 64.8% de RAM et ... 100% de swap libre. Hé oui. Pourtant en regardant le gestionnaire des tâches on serait tenté de soustraire les 1468 Mo "valider" aux 1.35 Go indiqués dans la mémoire, nous donnant 86 Mo de swap, or c'est faux. Donc 35% d'utilisation de la RAM, 0% de swap, exactement ce que je dis; il ne gère pas ça si mal. A partir de 50% il devrait commencer à s'inquiéter; je ferai le test à l'occas.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

50

Oué voilà c'est ce que je disais. A 70% Windows ne s'inquiète toujours pas (Linux lui, commence à s'exciter avec un swapiness de 60).

tromb Fichier joint : WTjx (img141.png)

Par contre lorsqu'on dépasse les 80~85% là il commence enfin à se faire du souci.
tromb Fichier joint : t4nq (img142.png)

Le programme qu'il a choisi de swapper était par ailleurs plutôt bien choisi, et le fermer a suffi pour retrouver 100% de swap libre. Cela ne signifie pas pour autant que le système était exactement aussi fluide que si rien ne s'était passé, des sections de code/read-only ayant certainement été dégagées.

Bref après ça on ne viendra pas me dire que Windows swappe pour rien tongue
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

51

Brunni (./11272) :

Oui, ben si tu crois mieux savoir que ton OS alors ne viens pas te plaindre si ça plante tongue.gif (et là on parle de cas où malloc() raterait; si tu es si sûr que ça n'arrivera jamais avec tes 2 Go alors inutile d'y songer). Si un composant système a besoin de mémoire et qu'on ne peut pas lui en donner, alors ça *va* merder, aucune autre solution possible. Avec la swap pas. Et quand je vois un système planter pour ça, je me dis avant tout que l'utilisateur est con.

Je ne vois pas ce que ça change, ça ne fait que décaler le problème... que se passe-t-il lorsque la partition hébergeant le swap est pleine ? Ca plante aussi ou, miraculeusement, comme t'as activé la swap, le système décide enfin d'être gentil avec toi et te met un message d'erreur tout propre ?
avatar

52

du genre "allez vous faire foutre, je peux pas faire autrement que vous filer NULL"

53

Ca a peu de chances d'arriver parce que tu t'en rendras compte bien avant. Et le système sera plus à même de déterminer quel processus killer si tu as 7 Go / 4 utilisés que si tu en as 3.5 / 4 par exemple.
Dans le premier cas ça peut être tout à fait normal (tu as besoin de 3.5 Go à un moment donné et tu sais que tu ne dépasseras pas) donc le système ne peut rien faire d'autre que serrer les fesses et espérer qu'aucun driver n'aura bientôt besoin de beaucoup de RAM, sinon paf pastèque.
Dans l'autre il peut t'avertir (comme le fait Windows avec une popup par exemple) que ça va bientôt merder, car objectivement 7 / 4 Go utilisés = vraiment pas bien.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

54

Brunni (./11276) :
Ca a peu de chances d'arriver parce que tu t'en rendras compte bien avant. Et le système sera plus à même de déterminer quel processus killer si tu as 7 Go / 4 utilisés que si tu en as 3.5 / 4 par exemple.
Ouais, enfin, quand il plante parce que t'en as 11.5/12Go, il a eu le temps de voir venir, quand même, c'est pas comme s'il n'avait que 640ko... idem sur 4Go... d'ailleurs, je ne comprends même pas que le système ne soit pas prévu pour refuser proprement une allocation de mémoire à un programme, ou mettre une demande en attente, plutôt que se mettre à mouliner comme un fou en étant à ras la gueule, voire corrompre la mémoire. Bon, on devrait y arriver progressivement avec le sandboxing par application, mais il y avait probablement d'autres moyens moins barbares de faire ça, quand même...
avatar

55

Brunni (./11272) :
Oui, ben si tu crois mieux savoir que ton OS alors ne viens pas te plaindre si ça plante tongue.gif

Mais je ne me plains pas, d'ailleurs c'est toi seul dans ce thread qui est parti du principe que ça plantait toussa ^^

d'ailleurs je te rappelle que par ici, les gens touchent un minimum et savent donc ce qu'ils font quand ils dégagent leur swap toussa, donc je ne vois pas pourquoi qulqu'un l'ayany fait serait venu se plaindre tongue

56

Moi ça me fait juste chier que, sur mon netbook qui a un disque plutôt lent, je sois obligé de garder le swap... mais bon, en même temps les problèmes rencontrés le sont à cause de FF/Flash qui m'a encore fait des memory leaks à plusieurs reprisesla semaine dernière sans que je comprenne pourquoi (enfin, si, ça s'est passé après la maj de Flash, mais ça ne s'est plus reproduit depuis)... D'un coup, plus rien ne répond, et certaines polices puis certains éléments du thème ne sont plus chargés... Même le task manager est inaccessible (erreur lors du lancement). J'ai juste un peu de mal à comprendre pourquoi l'OS n'est pas un peu plus protégé contre ça.
avatar

57

Ah tiens, je ne suis pas le seul à avoir des pb avec la maj de flash sous Win ? Entre autre les vidéos en 1080 qui freeze ?
Sous nux par contre, pas de souci étrangement, d'habitude c'est plutôt l'inverse. ^^

58

./11278> C'est toi qui partais du principe qu'un malloc peut être refusé. Je disais juste qu'en temps normal il y a tellement peu de chances que certains ne prennent pas le temps de s'en préoccuper, et se reposent sur la limite d'adresse inférieure à la place ^^

Pour les éléments du thème c'est un souci de GDI peut être. Enfin je n'ai jamais eu ça vu que je regarde pas de vidéo 1080p en flash. Il y a une limite de 10000 ressources GDI par processus, et une fois qu'un la dépasse, plus personne ne semble avoir le droit d'en obtenir dans le système, c'est assez bizarre... ça ne doit pas être un bug puisqu'ils ont révisé ce système avec 7, notamment sur le fait qu'avec Vista on pouvait en avoir une infinité au prix des performances. Mais difficile d'y voir une raison logique. En tous cas quand une ressource est refusée, il n'y a pas de miracle, c'est noir/transparent/moche happy
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

59

y'a quand même des sacrés bouts de branlette qui trainent dans ces derniers posts, juste pour défendre l'idée qu'il n'y a pas besoin de checker le retour de malloc alors que ça coute rien et que ça n'a que des avantages.

60

Brunni (./11281) :
En tous cas quand une ressource est refusée, il n'y a pas de miracle, c'est noir/transparent/moche smile2.gif

C'est juste dommage que l'utilisateur n'en soit pas informé de façon transparente ("Attention, il a été refusé à une ressource d'utiliser de la mémoire [mieux : une ressource est mise en attente] car celle-ci [la mémoire de votre ordinateur] est saturée ; le système est à présent en mode dégradé pour vous permettre plus facilement de fermer des processus en cours.").
Ca veut dire que le système protège toujours systématiquement une plage mémoire pour des choses indispensables (task manager, shell, affichage...), et qu'il reste un peu de mémoire pour permettre de fermer proprement les applications, ce qui n'est pas évident...

Sinon, pour Folco > Oui mais sous nux t'es encore sous une vieille version (10.0), non ? Ou alors t'est toujours en 32 bits ? Ou alors tu utilises le wrapper ? Ou bien t'as installé le plug-in 10.2 bêta ?
avatar