IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Accès à la RAM


Sujet :

MFC

  1. #1
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut Accès à la RAM
    Salut à tous!

    Je suis nouveau sur ce forum, et débutant en C++. Je cherche les fonctions, une unité, librairie pour accéder à la RAM. J'ai besoin d'un accès très rapide aux données. Pouvez-vous me conseiller?

    Merci de votre aide!
    De retour parmis vous après 10 ans!!

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Je cherche les fonctions, une unité, librairie pour accéder à la RAM. J'ai besoin d'un accès très rapide aux données
    Je suis nouveau sur ce forum, et débutant en C++.
    Le moyen direct en C++ pour accéder à la RAM cela s'appelle un pointeur cher ami.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *p;
    p=NULL;
    p=new char[25];
    .....
    delete [] p;
    Donc conseil : prendre un bon livre sur le C++.

    J'ai besoin d'un accès très rapide aux données
    Utiliser pour cela des listes chaînées.

    Sous Windows , on ne peut pas accéder directement au matériel ( contrairement au DOS ).Sinon écrire des Device Drivers.
    Sinon on peut mixer code assembleur machine et C++

  3. #3
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut ASM
    Je confirme ce qu'a dit addicted_to_MFC quant à l'utilisation de l'asm dans ton code : y'a pas plus rapide(tu travailles avec les registres du processeur). Pour des fonctions pas trop complexes au début, il n'est pas très difficile de se mettre à l'asm...
    Qui dit buzz??!!!!

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par addicted_to_MFC
    Le moyen direct en C++ pour accéder à la RAM cela s'appelle un pointeur cher ami.
    Sous Windows , on ne peut pas accéder directement au matériel ( contrairement au DOS ).Sinon écrire des Device Drivers.
    Sinon on peut mixer code assembleur machine et C++
    C'est ce que je pensais au début, mais après des tests, je me suis rendu compte que l'allocation d'un pointeur utilisait plutôt la mémoire virtuelle malgré les 40 Mo libres de ma RAM...

    Après mes recherches sur le SDK, j'ai trouvé peut-être cette piste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Declare Function AllocateUserPhysicalPages Lib "kernel32.dll" _ 
    (ByVal hProcess As Long, ByRef NumberOfPages As OUT, 
    ByRef PageArray As PULONG_PTR ) As Long
    Qu'en pensez-vous? Suis-je sur la bonne voie?
    De retour parmis vous après 10 ans!!

  5. #5
    Membre à l'essai
    Profil pro
    Développeur Full Stack
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Pourquoi veux tu exactement accèder à la ram?
    la fonction AllocateUserPhysicalPages est juste une fonction qui permet d'allouer des pages mémoires à un processus mais pas d' accéder à des pages mémoires existantes.par le principe même des systemes protégés tu ne pourra jamais accèder à la mémoire allouée par les autres processus que ton prog.et si tu trouvais un moyen ce serait une faille de sécurité donc non portable.
    Pour accéder à la gestion mémoire il faut être en ring 0 et seul l'os y a accès.Je sais qu'il existait des bidouilles seur les systemes 9x qui permettait d'exécuter du code en ring 0 à partir du ring 3 par l'utilisation des call gate.
    par contre il existe des techniques pour ecrire ou lire dans la mémoire d'un autre processus par les fonctions ReadProcessMemory et WriteProcessMemory à condition que la zone mémoire partagée ait l'accès ecriture ou lecture

  6. #6
    mat.M
    Invité(e)
    Par défaut
    C'est ce que je pensais au début, mais après des tests, je me suis rendu compte que l'allocation d'un pointeur utilisait plutôt la mémoire virtuelle malgré les 40 Mo libres de ma RAM...
    C'est exact , je me suis trompé en partie car avec des OS comme Unix par ex. ( ça reste à vérifier ) l'allocation d'un pointeur donne un accès direct à la mémoire.
    Sous Windows il est vrai on n'accède pas du tout directement à la mémoire physique mais plutôt à une mémoire virtuelle.

    et débutant en C++. Je
    Tu sais ce que c'est un pointeur donc pas débutant .
    Tu ne te serais pas en train de te payer notre tête ?

    Charon a tout juste quand il dit que parce que système protégé tu ne peux pas accéder aux pages mémoires.

    Je pense qu'un des moyens les plus rapides pour effectuer des traitements ( ce n'est pas accéder à des données mais ces données il faut les traiter -but de l'informatique ) c'est l'utilisation de Threads avec un certain niveau de priorité


    Et le but des manoeuvres dans tout cela c'est quoi ???

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par addicted_to_MFC
    Tu sais ce que c'est un pointeur donc pas débutant. Tu ne te serais pas en train de te payer notre tête ?
    Je ne me permettrais sûrement pas de me payer votre tête!
    De retour parmis vous après 10 ans!!

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Avec TP sous dos, j'utilisais le driver Himem.sys, et les fonctions qui vont avec... Les variables utilisent la mémoire conventionnelle, donc pas de problèmes de rapidité!
    Oublie définitivement la gestion mémoire avec himem.sys ça appartient largement au passé

    Pour te démontrer l'utilité d'accéder à la RAM, imagine un programme d'animation, où toutes les images sont chargées en RAM, puis sont affichées à l'écran à grande vitesse (comme un player de vidéo divx ou mpg .Ces programmes ne peuvent se faire qu'avec un accès direct de la mémoire physique (et non virtuelle).
    Non monsieur :
    Ceci était valable sous DOS mais pas sous Windows.
    Parce que si on peut stocker des images bitmaps en mémoire et admettons directement dans la RAM , après il faut les afficher à l'écran.
    Problème parce que périphériques vidéos différents les uns des autres.
    Effectivement sous DOS on pouvait accéder grâce à un pointeur sur la mémoire vidéo ( adresse A000:000 )et afficher de cette manière un buffer .
    Mais sous Windows c'est impossible parce que surcouche logicielle indépendante du matériel.
    Windows fait la translation entre une procédure écrite en Delphi ou en C++ entre le GDI et le matériel.

    Pour jouer une vidéo le plus simple et plus performant est d'utiliser DirectShow.
    Pour stocker des images en mémoire , fonctions GDI ou "surfaces " DirectDraw.

    Ca fait plus d'un an que je suis au chomage, et ce projet est la seule chose qui me permet de tenir le coups!
    Mieux vaut consacrer une partie pour son projet et une autre pour la recherche d'un emploi ( SSII ou autre) . Car pour commercialiser un projet informatique ( donc un logiciel ) , il faut présenter quelque chose de béton.

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    tout à fait d'accord!

    Tu sais, m'expliquer vos théories sur l'utilisation ne m'aide pas plus que ça, je te rappel que j'ai toujours besoin de la RAM en accès direct, et rien d'autres...
    De retour parmis vous après 10 ans!!

  10. #10
    Membre à l'essai
    Profil pro
    Développeur Full Stack
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    si tu veux accéder à la ram en accès direct crée un driver avec le ddk de microsoft,les drivers s'exécutent dans un ring plus privilégié et y ont donc accès ou du moins par l'api fourni par les drivers.Mais il faut que tu saches que la mémoire en mode protégé n'est pas linéaire,Il y a un système de pagination et segmentation.Ensuite puisque tu veux accéder apparemment à la mémoire video directement je dirais là même chose que addicted_to_MFC utilise directx c'est fait pour çà.

  11. #11
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Merci pour toutes vos réponses!

    En fait, c'est pas pour de la video, mais pour charger des samples en RAM...
    Si il faut que je fasse un driver, alors comment faire?
    De retour parmis vous après 10 ans!!

  12. #12
    Membre à l'essai
    Profil pro
    Développeur Full Stack
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    pour la gestion mémoire au niveau des drivers regarde là:
    http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/k106_544y.asp
    pour la doc complete du ddk regarde à driver development kit sur le meme site.
    sinon le ddk lui même était téléchargeable sur le site de msdn mais je crois maintenant qu'il faut le commander.
    par contre je voudrais juste te poser quelques questions pour éclairer ma lanterne au risque d'être pris pour un boulet.Je ne vois pas du tout pour tes samples audio pourquoi tu n'utiliserais pas la gestion normale de la mémoire en utilisant new.est-ce parce que la mémoire à laquelle tu veux accéder est de la mémoire E/S(tu parlais d'interfaces electroniques).quand tu dis accéder à la ram,tu veux faire quoi exactement ? accéder à une adresse bien précise?Où est ce que tu veux être certain que la page correspondante à ta zone mémoire ne sera jamais stockée sur le disque et rechargée accélérant ainsi l'accès?
    dans les 2 cas,je crois qu'au niveau d'un driver il y a des fonctions qui permettent d'assigner une zone de mémoire physique.Ceux sont les mêmes qu'utilisent généralement les developpeurs de drivers pour réserver la mémoire entrée-sortie de leur matos.
    sinon au passage dans windows l'interface audio/video est géré par la technologie mci.On accède à cette technologie par une api windows prévue et de l'autre coté il y a des drivers MCI developpés avec le ddk
    qui communiquent avec des cartes sons,télés..Je crois qu'il existe dans les mci une notion de mixer.peut être devrais-tu developper ton propre driver mci.Tu devrais te renseigner la dessus.

  13. #13
    mat.M
    Invité(e)
    Par défaut
    Tu sais, m'expliquer vos théories sur l'utilisation ne m'aide pas plus que ça, je te rappel que j'ai toujours besoin de la RAM en accès direct, et rien d'autres...
    Quand on est têtu c'est pour la vie !
    charon a suggéré de développer un Device Driver , chose très ardue.
    Bonne chance pour faire cela !! ( fais moi-signe quand tu auras terminé )
    De plus accéder DIRECTEMENT à la mémoire RAM ne sert à rien car l'OS déplace les blocs de mémoire en fonction des besoins.

    En fait, c'est pas pour de la video, mais pour charger des samples en RAM...
    Comme l'a suggéré charon , utiliser les commandes MCI.
    Sinon avoir recours à Direct Sound.
    L'intérêt de Direct X comme son nom l'indique est un accés direct au matériel en outrepassant les couches logicielles.
    Les équipes de développement de Microsoft sont à mon avis plus à même de développer des technologies pour leur OS que le moindre programmeur dans son coin et ses drivers.

    Moralité : s'acheter un bon livre de programmation Windows comme le Petzold !

  14. #14
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'aurais peut-être du commencer par là: J'ai besoin de charger des samples en mémoire pour faire le mixage en temps réel. Encore merci de votre aide! à+
    De retour parmis vous après 10 ans!!

  15. #15
    mat.M
    Invité(e)
    Par défaut
    S'il ya un retard sur le mixage des échantillons , il faut avoir recours à ce moment-là à la programmation de threads ou autres processus ( j'ai déjà indiqué cette méthode ) . Car en définit le coeur du problème n'est pas d'accéder rapidement à la mémoire mais plutôt le traitement d'un échantillon ( application de filtres de traitements , calculs etc...).
    Pour cela avoir recours à des threads : avec Delphi/VCL il y a la classe TThread.

    Attention avec l'utilisation de librairies tierces comme Midas : il faut payer des royalties en utilisation commerciale !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Démontage PC portable : acces RAM
    Par Ange_blond dans le forum Ordinateurs
    Réponses: 5
    Dernier message: 29/05/2008, 20h12
  2. spécifier l'accès à plus de RAM
    Par sinoquet dans le forum Général Java
    Réponses: 8
    Dernier message: 16/04/2008, 23h12
  3. MySql uniquement en RAM (pas d'accès disque)
    Par gagarine dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/09/2006, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo