CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

printf("blabla");

Paulop
Paulop
Niveau 12
30 août 2012 à 16:44:49

Ah oui ça s'applique à grosso modo toute les machines bien entendu.

C'était pas forcément une très mauvaise idée, mais ça bouleverse la façon de coder. Ce qui est con, c'est d'avoir des bus aussi lent. Puis la PS3 a un coeur normal.

Calmacil
Calmacil
Niveau 47
30 août 2012 à 16:48:30

En fait, je souhaite appliquer ça dans un simple jeu, et j'en ai besoin pour l'équipement du joueur. J'ai un jeu dans lequel j'ai un joueur, qui a des statistiques personnelles, un équipement.

Et je souhaite créer un magasin dans lequel on peut choisir une arme à équiper. Cette arme possède des caractéristiques, que j'ai mis sous une structure (une valeur monétaire, une attaque, un ID qui l'identifie)

En gros, l'algorithme (très simplifié) serait :

-le joueur va dans le magasin (cette fonction magasin a besoin prend toutes les structures que j'ai expliqué précédemment)
-le joueur sélectionne une arme à l'aide d'un menu
-selon l'arme choisie, une fonction (prenant en paramètre la structure itemChoisi, qui est la structure qui contient l'ID et la valeur de l'arme) va assigner les caractéristiques demandés à la structure itemChoisi
-on retourne dans la fonction magasin, où on va comparer la valeur de l'arme et l'argent du joueur, et s'il possède assez d'argent, on va assigner les caractéristiques d'itemChoisi au joueur

sachant qu'itemChoisi est définie dans la fonction principale, et qu'elle sert de paramètre à la fonction magasin, qui fait elle même appel à la fonction armurerie, où sont les caractéristiques de chaque arme selon leur ID, il y a imbrication

godrik
godrik
Niveau 30
30 août 2012 à 18:15:53

Ca fait un bout de temps que je suis convaincu que tu perds des performances ridiculement des que tu n'as pas de controle sur OU tes donnes sont stocke en memoire. C'est pour ca que la notion de "high performance Java" m'a toujours laisse penseur. Tu ne peux pas placer tes donnees en memoire.
Donc comment tu vas avoir des performances?

Serieusement, quand en java tu fais un
FOO array[] = new FOO[30]; for (int i=0; i< 30; ++i) array[i] = new FOO(something);

Y a t'il un moyen de garantir la localite memoire des objets? De ce que je comprends, c'est entierement alloue dynamiquement. Et si tu as de la chance la JVM est suffisament inteligente pour mettre tous les objets FOO cote a cote. Mais c'est certainement pas forcement dans l'ordre du tableau. Et si tu as deux tableau qui contiennent les memes objets mais pas dans le meme ordre, clairement tu es nique. Alors que C++ te permet parfaitement de fixer l'ordre.

Quelqu'un a une quelconque information la dessus?

Pseudo supprimé
Pseudo supprimé 30 août 2012 à 18:37:25

pour alligner la memoire j'utilise

http://developer.android.com/reference/java/nio/ByteBuffer.html

il y aussi la class unsafe

http://www.docjar.com/doc/docs/api/sun/misc/Unsafe.html

godrik
godrik
Niveau 30
30 août 2012 à 18:56:23

Mais ca, ca ne te permet pas de "placer" tes objets en memoire, ca te permet d'avoir access a un tableau de byte en utilisant un type primaire. Ou est ce que j'ai loupe qqch?

Bunyan
Bunyan
Niveau 17
30 août 2012 à 19:19:27

Peut-être avec certains package particulier qui font sauter certaines "sécurités" et particularités (je pensais à Unsafe), ou avec une JVM particulière, pas celle embarquée par défaut.

Pseudo supprimé
Pseudo supprimé 30 août 2012 à 19:55:22

@godrik

jcomprend pas ske tu veux dire. tu veux alligner des classes dans la memoire ? c'est quoi le but ? tu peux donner un exemple en c++ ?

godrik
godrik
Niveau 30
30 août 2012 à 20:14:39

struct foo
{
int a,b,c,d;
float e,f,g,h;
zarbi buf[12];

void dosomething();
};

foo bar[10];

for (int i=0; i< 10; ++i)
bar[i].dosomething();

ici mes objets foo sont stocke de facon contigue en memoire. Acceder a n'importe quel variable de l'objet foo va charger les autre en memoire parcequ'ils sont soit sur la meme ligne de cache soit j'ai un access pattern qui est lineaire et donc le prefetcher hardware va fire son travail.

Si je veux faire le meme genre de chose a partir d'un buffer sans type en java, je vais perdre l'abstraction de offerte par le langage et je me retrouve a devoir faire des merdes du genre
char* bigbuffer;
char* base = bigbuffer+i*(sizeof(int)*4+sizeof(float)*4+precomp
utedsizeofzarbi*12);

((int*) base); //ouf ca c'est a!

sauf que tu les fais en java et pas en C. C'est super merdique a utiliser.

Pseudo supprimé
Pseudo supprimé 30 août 2012 à 21:09:53

est ce que foo bar[10]; en java va te donner 10 objets lun apres l'autre ou fragmenter ? je saurai pas te le dire mais je sais que java rajoute un header avec des information pour le garbage collector a chaque objets.

par contre je revien sur ton premier exemple. en c++ sur windows

ABC = new obj[n];

est equivalent a

HeapAlloc(HEAP DU PROCESS, 0, sizeof(obj)*n);

ainsi tu est sur que ABC serras continus mais avec

for (int i=0; i< 30; ++i) array[i] = new FOO(something);

rien ne garantis que les objet dans array seront en continus dans la memoire meme avec c++.

godrik
godrik
Niveau 30
30 août 2012 à 21:21:54

En java, il n'y a que des references, donc la machine virtuelle fais ce qu'il lui plait.

En C++, si tu alloue tes objets statiquement ils seront contigue en memoire. Si tu alloue tes objets dynamiquement, ca depends de la tete de ton allocateur memoire. Si tu utilise le new par defaut alors les objets seront la ou malloc a de la place.
Mais tu peux ne pas utiliser l'operateur new par defaut et le remplacer par un autre. C'est classique de definir un operateur new particulier pour certain type d'objet afin qu'ils soient contigu en memoire.

Tu peux meme avoir des allocateurs specialise pour faire de l'allocation memoire plus fine. Par exemple, si tu ecris un serveur de jeu tu veux certainement que tous les joueurs soit proche en memoire. Donc tu va preallouer de la memoire pour les stocker et faire de l'allocation dynamique dans ce segment de memoire (et utiliser placement new pour faire la construction comme il faut). Cependant, si ton serveur gere plusieurs cartes a la fois, tu t'en fout certaiemnet que des joueurs sur deux cartes differente soit contigue en memoire. Tu veux certainement avoir un allocateur par carte afin de maximiser la localite memoire.

Pseudo supprimé
Pseudo supprimé 30 août 2012 à 21:59:57

je vois bien ske tu veux dire. jutilise ce system avec les instruction SSE ki demande a ske tout sois aligner sur 128bits(ils existe des instruction pour les pointeurs non alligner mais elle sont plus lentes). De mémoire la premiere fois que jai vu ca ct avec le jeux doom qui reserve une block de 4 mo ensuite un memory manager propre au jeux utilise ce block comme une sorte de memoire virtuel pour l'entierete du jeux. le jeux ne fait apelle a malloc kune et une seule fois au lancement. ct une epoque ou les jeux etait fait sans thread et compagnie aujourdhui un tel system est impossible je pense. pour en revenir a java la philosophie du language c'est de ne pas faire joujou avec tout ca justement (donc forcement moin de controle).

en parlant de memory manager jai pas mal decran bleu a cause de celui ci sur windows 8 (jen avai aucun sur seven) :hap: par contre jaime b1 metro.

godrik
godrik
Niveau 30
30 août 2012 à 22:08:20

C'est encore super classique les applications qui gerent leur memoire manuellement. Typiquement tu fais des pools par type d'objet que tu alloue par block de quelques MB. Quand le block est plein, tu realloues un autre block.

Evidement que le but de faire du java est de ne pas se poser ces questions la. Ce que je voulais dire c'est que par construction: "high performance java" ca n'a aucun sens. Tu n'auras jamais de haute perforance avec une application qui ne place pas sa memoire explicitement/intteligement.

Tikim
Tikim
Niveau 21
30 août 2012 à 22:21:11

Coucou :)

dîtes j'ai une petite question, trop petite pour en faire un topic, et j'ai un peu cherché mais rien trouvé.

En C, il existe une fonction qui nous retourne le plus grand nombre en plusieurs ? (4 dans mon cas).

Parce que la seule méthode que j'ai trouvé là c'est de mettre mes 4 nombres dans un tableau et de faire un tri à bulle (ce sera toujours que 4 nombres, jamais plus, donc ça va très bien comme tri :o)) ). Et ça me parait un peu "détourné" :o))

godrik
godrik
Niveau 30
30 août 2012 à 22:22:19

pas compris la question. Expliques mieux pour voir?

Tikim
Tikim
Niveau 21
30 août 2012 à 22:26:49

J'ai 4 variables, d1, d2, d3 et d4. Je veux savoir laquelle est la plus grande. Donc je me demande s'il y a une fonction qui me retourne, sur 4 variables passées en paramètre, la plus petitevaleur (le max). Je sais que ça existe pour deux variables mais je me demande si par hasard ça existe pour 4 (même si je me doute bien que non :o)) ), ou, sinon, quelle est la méthode la plus simple/moins gourmande en temps/mémoire.

Là je les mets dans un tableau, que je trie (tri à bulle basique), puis je considère la première case comme la plus petite valeur.

La plus petite ou la plus grande en fait, les deux peuvent être utile. Pour le tri c'est pareil faut juste inverser ou prendre la valeur de la dernière case.

Pseudo supprimé
Pseudo supprimé 30 août 2012 à 22:27:43

je parlai dun systeme avec une seule allocation au lancement pour tout le programme.

java: je sais kil existe des machine virtuel temp reel (la nasa l'utilise) avec une gestion memoire differente des jvm standards mais je sais pas dir ske ca vaux. en faite je nutilise plus java depuis plusieurs annees :noel: jaime pas ce language pour tout dire.

mais en y repensant les linked list de java on un nombre minimum dobjet allouer (par 12 je crois). si la memoire est fragmenter je vois pas trop le but de ce minimum.

http://en.wikipedia.org/wiki/Real_time_Java

godrik
godrik
Niveau 30
30 août 2012 à 22:33:19

tikim, pouruqoi tu ne parcours pas ton ensemble a la recherche du plus grand element?

Tikim
Tikim
Niveau 21
30 août 2012 à 22:36:03

Tu vas rire mais j'y ai même pas pensé :ouch:

Tikim
Tikim
Niveau 21
30 août 2012 à 22:36:14

(Du coup merci :ange: )

tbop2
tbop2
Niveau 10
30 août 2012 à 23:54:45

Bonjour Tikim

Oui et non. Une autre méthode si tu as 4 variables isolées c'est juste de faire 3 fois un appel à la fonction max de math.h

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment